Task API
The Task API manages task execution — polling, updating, logging, and queue management. All endpoints use the base path /api/tasks.
Get Task
Returns the task details for a given task ID.
Response 200 OK
{
"taskType": "my_task",
"status": "COMPLETED",
"referenceTaskName": "my_task_ref",
"retryCount": 0,
"seq": 1,
"startTime": 1700000001000,
"endTime": 1700000003000,
"updateTime": 1700000003000,
"pollCount": 1,
"taskId": "a1b2c3d4-5678-90ab-cdef-111111111111",
"workflowInstanceId": "3a5b8c2d-1234-5678-9abc-def012345678",
"inputData": {"key": "value"},
"outputData": {"result": "success"},
"workerId": "worker-host-1"
}
Poll and Update Tasks
These endpoints are used by workers to poll for tasks and update their results. They are typically called by the SDK, not manually.
Poll for a Task
Polls for a single task of the given type. Returns 204 No Content if no task is available.
| Parameter | Description | Required |
|---|---|---|
taskType |
Task type to poll for | Yes |
workerid |
Identifier for the worker polling | No |
domain |
Task domain. See Task Domains. | No |
Response 200 OK — returns a task object (same format as Get Task above), or 204 No Content if no tasks are queued.
Batch Poll
Polls for multiple tasks in a single request. This is a long poll — the connection waits until timeout or at least 1 task is available.
| Parameter | Description | Default |
|---|---|---|
taskType |
Task type to poll for | — |
count |
Maximum number of tasks to return | 1 |
timeout |
Long poll timeout in milliseconds | 100 |
workerid |
Worker identifier | — |
domain |
Task domain | — |
# Poll for up to 5 tasks, wait up to 1 second
curl 'http://localhost:8080/api/tasks/poll/batch/my_task?count=5&timeout=1000&workerid=worker-1'
Response 200 OK — returns a list of task objects, or an empty list if no tasks are available.
[
{
"taskType": "my_task",
"status": "IN_PROGRESS",
"taskId": "task-uuid-1",
"workflowInstanceId": "workflow-uuid-1",
"inputData": {"key": "value1"}
},
{
"taskType": "my_task",
"status": "IN_PROGRESS",
"taskId": "task-uuid-2",
"workflowInstanceId": "workflow-uuid-2",
"inputData": {"key": "value2"}
}
]
Update Task
Updates the result of a task execution. Returns the task ID.
curl -X POST 'http://localhost:8080/api/tasks' \
-H 'Content-Type: application/json' \
-d '{
"workflowInstanceId": "3a5b8c2d-1234-5678-9abc-def012345678",
"taskId": "a1b2c3d4-5678-90ab-cdef-111111111111",
"status": "COMPLETED",
"outputData": {
"result": "processed successfully",
"recordCount": 42
}
}'
Request body fields:
| Field | Description | Required |
|---|---|---|
workflowInstanceId |
Workflow execution ID | Yes |
taskId |
Task ID | Yes |
status |
IN_PROGRESS, COMPLETED, FAILED, or FAILED_WITH_TERMINAL_ERROR |
Yes |
outputData |
JSON map of output data | No |
reasonForIncompletion |
Reason for failure (when status is FAILED) |
No |
callbackAfterSeconds |
Callback delay — task will be put back in queue after this time | No |
logs |
List of log entries to append | No |
Response 200 OK — returns the task ID as plain text.
Update Task V2
Updates a task and returns the next available task to be processed — combining an update and poll in one call. Returns 204 No Content if no next task is available.
curl -X POST 'http://localhost:8080/api/tasks/update-v2' \
-H 'Content-Type: application/json' \
-d '{
"workflowInstanceId": "3a5b8c2d-1234-5678-9abc-def012345678",
"taskId": "a1b2c3d4-5678-90ab-cdef-111111111111",
"status": "COMPLETED",
"outputData": {"result": "done"}
}'
Response 200 OK — returns the next task object, or 204 No Content if no tasks are queued.
Update Task by Reference Name
Updates a task using the workflow ID and task reference name instead of the task ID. This is useful for completing WAIT or HUMAN tasks from external systems.
| Parameter | Description | Required |
|---|---|---|
workflowId |
Workflow execution ID | Yes |
taskRefName |
Task reference name in the workflow | Yes |
status |
IN_PROGRESS, COMPLETED, FAILED, or FAILED_WITH_TERMINAL_ERROR |
Yes |
workerid |
Worker identifier | No |
Request body: JSON map of output data.
# Complete a WAIT task with output data
curl -X POST 'http://localhost:8080/api/tasks/3a5b8c2d.../wait_for_approval/COMPLETED' \
-H 'Content-Type: application/json' \
-d '{"approved": true, "approver": "jane@example.com"}'
Response 200 OK — no response body.
Update Task by Reference Name (Synchronous)
Same as above, but returns the updated workflow after the task update is processed. Useful for synchronous execution patterns where you need the workflow state immediately after updating a task.
curl -X POST 'http://localhost:8080/api/tasks/3a5b8c2d.../wait_for_signal/COMPLETED/sync' \
-H 'Content-Type: application/json' \
-d '{"signal": "proceed"}'
Response 200 OK — returns the full workflow execution object.
Task Logs
Add a Task Log
Adds an execution log entry to a task. Request body: log message as a plain string.
curl -X POST 'http://localhost:8080/api/tasks/a1b2c3d4.../log' \
-H 'Content-Type: text/plain' \
-d 'Processing started for batch #42'
Response 200 OK — no response body.
Get Task Logs
Returns execution logs for a task. Returns 204 No Content if no logs exist.
Response 200 OK
[
{
"log": "Processing started for batch #42",
"taskId": "a1b2c3d4-5678-90ab-cdef-111111111111",
"createdTime": 1700000001000
},
{
"log": "Batch #42 completed: 100 records processed",
"taskId": "a1b2c3d4-5678-90ab-cdef-111111111111",
"createdTime": 1700000003000
}
]
Queue Management
| Endpoint | Method | Description |
|---|---|---|
/queue/all |
GET |
Get pending task counts for all queues |
/queue/all/verbose |
GET |
Get detailed queue info including per-shard counts |
/queue/size |
GET |
Get queue size for a specific task type |
/queue/sizes |
GET |
(Deprecated) Get queue sizes for task types. Use /queue/size instead. |
/queue/requeue/{taskType} |
POST |
Requeue pending tasks of a given type |
Get Queue Size
Returns the queue depth for a specific task type, optionally filtered by domain and isolation group.
Response 200 OK
Get All Queue Sizes
Returns a map of task type to pending count for all queues.
Response 200 OK
Get All Queue Details (Verbose)
Returns detailed queue information including per-shard counts.
Response 200 OK
Requeue Pending Tasks
Requeues all pending tasks of the specified type. Useful for recovery after worker issues.
Response 200 OK — returns the number of tasks requeued.
Poll Data
Get Poll Data for a Task Type
Returns the last poll data for a given task type — useful for monitoring worker health and activity.
Response 200 OK
[
{
"queueName": "my_task",
"domain": null,
"workerId": "worker-host-1",
"lastPollTime": 1700000005000
}
]
Get Poll Data for All Task Types
Returns the last poll data for all task types.
Response 200 OK — returns a list of poll data objects (same format as above) for all task types.
Search Tasks
All search endpoints support the same query parameters:
| Parameter | Description | Default |
|---|---|---|
start |
Page offset | 0 |
size |
Number of results | 100 |
sort |
Sort order: <field>:ASC or <field>:DESC |
— |
freeText |
Full-text search query | * |
query |
SQL-like where clause | — |
Search (Summary)
Returns SearchResult<TaskSummary> — lightweight results.
# Find failed tasks for a specific workflow type
curl 'http://localhost:8080/api/tasks/search?query=workflowType%3D%27order_processing%27+AND+status%3D%27FAILED%27&size=10'
# Free-text search
curl 'http://localhost:8080/api/tasks/search?freeText=timeout'
Response 200 OK
{
"totalHits": 3,
"results": [
{
"taskId": "task-uuid",
"taskType": "my_task",
"referenceTaskName": "my_task_ref",
"workflowId": "workflow-uuid",
"workflowType": "order_processing",
"status": "FAILED",
"startTime": "2024-01-15T10:30:00Z",
"updateTime": "2024-01-15T10:30:05Z",
"executionTime": 5000
}
]
}
Search V2 (Full)
Returns SearchResult<Task> — full task objects including input/output data.
External Storage
Get the URI for external task payload storage. See External Payload Storage.
curl 'http://localhost:8080/api/tasks/externalstoragelocation?path=task/output&operation=WRITE&payloadType=TASK_OUTPUT'
Response 200 OK