docs/documentation/api/task.md
The Task API manages task execution — polling, updating, logging, and queue management. All endpoints use the base path /api/tasks.
GET /api/tasks/{taskId}
Returns the task details for a given task ID.
curl 'http://localhost:8080/api/tasks/a1b2c3d4-5678-90ab-cdef-111111111111'
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"
}
These endpoints are used by workers to poll for tasks and update their results. They are typically called by the SDK, not manually.
GET /api/tasks/poll/{taskType}?workerid=&domain=
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 |
curl 'http://localhost:8080/api/tasks/poll/my_task?workerid=worker-1'
Response 200 OK — returns a task object (same format as Get Task above), or 204 No Content if no tasks are queued.
GET /api/tasks/poll/batch/{taskType}?count=1&timeout=100&workerid=&domain=
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"}
}
]
POST /api/tasks
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.
POST /api/tasks/update-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.
POST /api/tasks/{workflowId}/{taskRefName}/{status}?workerid=
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": "[email protected]"}'
Response 200 OK — no response body.
POST /api/tasks/{workflowId}/{taskRefName}/{status}/sync?workerid=
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.
POST /api/tasks/{taskId}/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 /api/tasks/{taskId}/log
Returns execution logs for a task. Returns 204 No Content if no logs exist.
curl 'http://localhost:8080/api/tasks/a1b2c3d4.../log'
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
}
]
| 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 /api/tasks/queue/size?taskType=&domain=&isolationGroupId=&executionNamespace=
Returns the queue depth for a specific task type, optionally filtered by domain and isolation group.
curl 'http://localhost:8080/api/tasks/queue/size?taskType=my_task'
Response 200 OK
5
GET /api/tasks/queue/all
Returns a map of task type to pending count for all queues.
curl 'http://localhost:8080/api/tasks/queue/all'
Response 200 OK
{
"my_task": 5,
"http_task": 0,
"email_task": 12
}
GET /api/tasks/queue/all/verbose
Returns detailed queue information including per-shard counts.
curl 'http://localhost:8080/api/tasks/queue/all/verbose'
Response 200 OK
{
"my_task": {
"size": 5,
"shards": {"0": 3, "1": 2}
}
}
POST /api/tasks/queue/requeue/{taskType}
Requeues all pending tasks of the specified type. Useful for recovery after worker issues.
curl -X POST 'http://localhost:8080/api/tasks/queue/requeue/my_task'
Response 200 OK — returns the number of tasks requeued.
GET /api/tasks/queue/polldata?taskType=
Returns the last poll data for a given task type — useful for monitoring worker health and activity.
curl 'http://localhost:8080/api/tasks/queue/polldata?taskType=my_task'
Response 200 OK
[
{
"queueName": "my_task",
"domain": null,
"workerId": "worker-host-1",
"lastPollTime": 1700000005000
}
]
GET /api/tasks/queue/polldata/all
Returns the last poll data for all task types.
curl 'http://localhost:8080/api/tasks/queue/polldata/all'
Response 200 OK — returns a list of poll data objects (same format as above) for all task types.
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 | — |
GET /api/tasks/search?start=0&size=100&sort=&freeText=&query=
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
}
]
}
GET /api/tasks/search-v2?start=0&size=100&sort=&freeText=&query=
Returns SearchResult<Task> — full task objects including input/output data.
GET /api/tasks/externalstoragelocation?path=&operation=&payloadType=
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
{
"uri": "s3://conductor-payloads/task/output/...",
"path": "task/output/..."
}