code: public function submit($id, array $variables)
      {
          foreach ($variables as $variable) {
              if (!$variable instanceof Variable) {
                  throw new InvalidArgumentException('Array of variables is not valid.');
              }
          }
  
          $resource = str_replace('{id}', $id, static::RESOURCE_SUBMIT);
          $options = [
              'headers' => [
                  'Accept' => 'application/json',
                  'Content-Type' => 'application/json'
              ]
          ];
  
          foreach ($variables as $variable) {
              // @todo Standardize variable toObject logic (see ProcessInstanceService::start)
              $options['json']['variables'][$variable->getName()] = [
                  'value' => Variable::TYPE_JSON === $variable->getType() ? json_encode($variable->getValue()) : $variable->getValue(),
                  'type' => $variable->getType()
              ];
          }
  
          $this->execute('POST', $resource, $options);
      }
docs: Submit task data
  
  @param string $id
  @param array $variables
  @throws \InvalidArgumentException