Skip to main content
Every AdCP response includes a status field that tells you exactly what state the operation is in and what action you should take next. This is the foundation for handling any AdCP operation.

Status Values

AdCP uses the same status values as the A2A protocol’s TaskState enum:

Response Structure

Every AdCP response uses a flat structure where task-specific fields are at the top level:

Status Handling

Basic Pattern

Clarification Flow

When status is input-required, the message tells you what’s needed:
Client handling:

Approval Flow

Human approval is a special case of input-required:
Client handling:

Long-Running Operations

Async operations start with working or submitted and provide updates:
Protocol-specific polling:
  • MCP: Poll with context_id for updates
  • A2A: Subscribe to SSE stream for real-time updates

Status Progression

Tasks progress through predictable states:
  • submitted: Task queued for execution, provide webhook or poll
  • working: Agent actively processing, poll frequently
  • input-required: Need user input, continue conversation
  • completed: Success, process results
  • failed: Error, handle appropriately

Polling Patterns

Status-Based Polling Intervals

Different statuses require different polling frequencies:

Timeout Handling

Set reasonable timeouts based on operation type:

Task Reconciliation

Use tasks/list to recover from lost state:

Best Practices

  1. Always check status first - Don’t assume success
  2. Handle all statuses - Include a default case for unknown states
  3. Preserve context_id - Required for conversation continuity
  4. Use task_id for tracking - Especially for long-running operations
  5. Implement timeouts - Don’t wait forever
  6. Log status transitions - Helps with debugging and auditing

Next Steps

  • Async Operations: See Async Operations for handling different operation types
  • Webhooks: See Webhooks for push notification patterns
  • Error Handling: See Error Handling for error categories and recovery