Execution API Response Shape Changed

For the complete documentation index, see llms.txt. For a full content snapshot, see llms-full.txt. Append .md to any kestra.io/docs/* URL for plain Markdown.

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):

  • taskRunList is 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 response
    • executionId, namespace, flowId — removed from each task run entry

Paginated execution list (GET /api/v1/{tenant}/executions/search):

  • taskRunList is removed entirely from list responses. Each item in the list contains execution-level fields only (id, namespace, flowId, state, labels, kind, originalId, etc.). Flow-level outputs are not included in list items — fetch the single execution endpoint to get them.

Both endpoints:

  • deleted field removed (was always false and 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

  1. If your code reads taskRunList[*].outputs from a single execution response, switch to GET /api/v1/{tenant}/outputs/{executionId}/{taskRunId}.
  2. If your code reads taskRunList from a paginated execution list response, switch to fetching individual executions by ID when task run detail is needed.
  3. If your code checks for deleted: false in the response, remove that check — the field is no longer returned.

Was this page helpful?