Task state
The TaskState value in an A2A task's status: submitted, working, waiting for input or authorization, or one of four terminal outcomes.
A task state is the TaskState enum value in a task’s status.state field that tells a client where the task is in its lifecycle. A2A v1.0 defines eight lifecycle values, plus TASK_STATE_UNSPECIFIED for an unknown or indeterminate state (a2a.proto).
| v1.0 value | v0.3 string | Kind |
|---|---|---|
TASK_STATE_SUBMITTED |
submitted |
In progress: submitted and acknowledged |
TASK_STATE_WORKING |
working |
In progress: being processed |
TASK_STATE_INPUT_REQUIRED |
input-required |
Interrupted: needs input from the client |
TASK_STATE_AUTH_REQUIRED |
auth-required |
Interrupted: needs authorization |
TASK_STATE_COMPLETED |
completed |
Terminal: finished successfully |
TASK_STATE_FAILED |
failed |
Terminal: finished with an error |
TASK_STATE_CANCELED |
canceled |
Terminal: canceled before completion |
TASK_STATE_REJECTED |
rejected |
Terminal: the agent decided not to perform it |
In v0.3, the string unknown played the role of TASK_STATE_UNSPECIFIED.
Encoding. v1.0 JSON follows ProtoJSON, so the state is the enum name as a string (section 5.5). It sits in a TaskStatus object next to an optional status message and a timestamp:
{"state": "TASK_STATE_WORKING", "timestamp": "2026-09-25T14:03:11.482Z"}
Why the groups matter. A blocking Send Message call returns once the task reaches a terminal or an interrupted state (section 3.2.2). A streaming response for a task closes when it reaches a terminal state. Interrupted tasks still accept messages on the same task; terminal tasks do not, and follow-up work needs a new task. Clients can filter List Tasks by state, for example to find every task still in TASK_STATE_WORKING.
Extending states. The A2A extensions guide says extensions should not add values to enums such as this one. An extension that needs a finer-grained status should keep the standard state and put the extra meaning in metadata.
Sources
- A2A protocol definition (a2a.proto): TaskState, TaskStatus (accessed )
- A2A Protocol Specification, section 3.2.2: SendMessageConfiguration (execution mode) (accessed )
- A2A Protocol Specification, section 5.5: JSON Field Naming Convention (accessed )
- A2A v0.3.0 type definitions (types.ts): TaskState (accessed )
- A2A documentation: Extensions (limitations) (accessed )