Multiple form buttons with AJAX, how to update form state storage data?
Please try this, as @4k4 suggested you have to first build a normal form and ajaxify by using #ajax, and from the method defined inside #ajax you can return a $form and any fields inside the wrapper. 

// Relevant bit of the form...
$form['#prefix'] = '&lt;div id="my-form-wrapper"&gt;';
$form['#suffix'] = '&lt;/div&gt;';

$form['actions']['#type'] = 'actions';

$form['actions']['update'] = [
  '#type' =&gt; 'button',
  '#value' =&gt; $this-&gt;t('Start Form'),
  '#submit' =&gt; ['::setAjaxSubmit'],
  '#ajax' =&gt; [
    'wrapper' =&gt; 'my-form-wrapper',
    'callback' =&gt; [$this, 'update'],
    'method' =&gt; 'replace',
  ]
];

$form['actions']['reset'] = [
  '#type' =&gt; 'button',
  '#value' =&gt; $this-&gt;t('Reset Form'),
  '#ajax' =&gt; [
    'wrapper' =&gt; 'my-form-wrapper',
    'callback' =&gt; [$this, 'reset'],
    'method' =&gt; 'replace',
  ],
  '#disabled' =&gt; TRUE,
];

// The AJAX callback
public function update($form, FormStateInterface $form_state) {
//return $form or part inside the ajax wrapper
return $form;
}

// The submit callback
public function setAjaxSubmit($form, FormStateInterface $form_state) {
  $form_state-&gt;set('flag_1', TRUE);
  $form_state-&gt;set('flag_2', "Started!");
  $form_state-&gt;setRebuild();
}