Task

Service Task

Service Task

Executes work outside the engine. Two modes: external worker (poll-based) or HTTP push (engine calls your URL).

Properties

External Worker Mode

PropertyTypeRequiredDescription
IDstringyesUnique element identifier
NamestringyesDisplay label
TopicstringyesWorker queue name workers poll for
RetriesintegernoHow many times to retry on failure (default: 3)
Timeout (ms)integernoLock duration — worker must complete within this window

HTTP Push Mode

PropertyTypeRequiredDescription
IDstringyesUnique element identifier
NamestringyesDisplay label
URLstringyesEndpoint the engine POSTs to with instance variables
MethodstringnoHTTP method (default: POST)
Timeout (ms)integernoRequest timeout in milliseconds
Auth Typenone | bearer | api_keynoAuthentication mode
Secret RefstringnoSecret name (when auth type is bearer or api_key)
Request TransformFEELnoFEEL expression to reshape the request body
Response TransformFEELnoFEEL expression to extract variables from response
Error Code ExpressionFEELnoFEEL expression — if truthy, throws a BPMN error
Retryobjectno{ maxAttempts, initialDelayMs, backoffMultiplier }

XML Example

<!-- External worker mode -->
<bpmn:serviceTask id="process_payment" name="Process Payment">
  <bpmn:extensionElements>
    <conduit:taskTopic>payment-worker</conduit:taskTopic>
  </bpmn:extensionElements>
  <bpmn:incoming>flow_to_payment</bpmn:incoming>
  <bpmn:outgoing>flow_to_confirm</bpmn:outgoing>
</bpmn:serviceTask>
<!-- HTTP push mode -->
<bpmn:serviceTask id="notify_crm" name="Notify CRM">
  <bpmn:extensionElements>
    <conduit:httpConnector>
      <conduit:url>https://crm.example.com/api/orders</conduit:url>
      <conduit:method>POST</conduit:method>
    </conduit:httpConnector>
  </bpmn:extensionElements>
  <bpmn:incoming>flow_to_crm</bpmn:incoming>
  <bpmn:outgoing>flow_done</bpmn:outgoing>
</bpmn:serviceTask>

API Integration — External Worker

Fetch and lock available tasks:

POST /api/v1/external-tasks/fetch-and-lock
Content-Type: application/json

{
  "worker_id": "my-worker-1",
  "topics": [{ "topic_name": "payment-worker", "lock_duration": 30000 }],
  "max_tasks": 5
}

Complete a task:

POST /api/v1/external-tasks/{task_id}/complete
Content-Type: application/json

{
  "worker_id": "my-worker-1",
  "variables": [
    { "name": "paymentId", "value": "PAY-999" },
    { "name": "status", "value": "success" }
  ]
}

Report a failure:

POST /api/v1/external-tasks/{task_id}/failure
Content-Type: application/json

{
  "worker_id": "my-worker-1",
  "error_message": "Payment gateway timeout",
  "retries": 2,
  "retry_timeout": 5000
}

Throw a BPMN error (routes to Boundary Error Event):

POST /api/v1/external-tasks/{task_id}/bpmn-error
Content-Type: application/json

{
  "worker_id": "my-worker-1",
  "error_code": "PAYMENT_DECLINED",
  "error_message": "Card declined"
}