Execution API Response Shape Changed
For the complete documentation index, see llms.txt. For a full content snapshot, see llms-full.txt. Append.mdto anykestra.io/docs/*URL for plain Markdown.
This change only affects integrations that call the execution REST API directly and parse the JSON response. Regular flow execution, expressions, and the Kestra UI are unaffected.
Kestra 2.0 moves task run outputs to a dedicated storage layer and changes what the execution endpoints return. This reduces payload size, improves performance on execution list pages, and removes the need for a migration script — existing executions with inline task run outputs are read transparently from their original location.
What changed
Single execution endpoint (GET /api/v1/{tenant}/executions/{executionId} and POST /api/v1/{tenant}/executions/{namespace}/{id}?wait=true):
taskRunListis still present but each task run now uses a slimmer shape. The following fields are removed from each task run entry:outputs— task run outputs are no longer included in the execution responseexecutionId,namespace,flowId— removed from each task run entry
Paginated execution list (GET /api/v1/{tenant}/executions/search):
taskRunListis removed entirely from list responses. Each item in the list contains execution-level fields only (id,namespace,flowId,state,labels,kind,originalId, etc.). Flow-leveloutputsare not included in list items — fetch the single execution endpoint to get them.
Both endpoints:
deletedfield removed (was alwaysfalseand never meaningful in responses).
How to get task run outputs
If your integration reads taskRunList[*].outputs from the execution response, use the dedicated outputs endpoint instead:
GET /api/v1/{tenant}/outputs/{executionId}/{taskRunId}Or to list all task output information for an execution:
GET /api/v1/{tenant}/outputs/{executionId}Before and after
Before — task run response included outputs and redundant fields:
"taskRunList": [ { "id": "abc123", "executionId": "xyz789", "namespace": "company.team", "flowId": "myflow", "taskId": "mytask", "outputs": { "value": "hello" }, "state": { "current": "SUCCESS" } }]After — task run response is slimmer, outputs removed:
"taskRunList": [ { "id": "abc123", "taskId": "mytask", "state": { "current": "SUCCESS" } }]No database migration required
Kestra does not require a migration script for existing task run outputs. The backward-compatible storage layer checks both the new dedicated storage and the legacy inline location, so all existing executions continue to work after upgrading.
Migration steps
- If your code reads
taskRunList[*].outputsfrom a single execution response, switch toGET /api/v1/{tenant}/outputs/{executionId}/{taskRunId}. - If your code reads
taskRunListfrom a paginated execution list response, switch to fetching individual executions by ID when task run detail is needed. - If your code checks for
deleted: falsein the response, remove that check — the field is no longer returned.
Was this page helpful?