Skip to main content
Clix supports both A2A V1 and legacy V0. New integrations should use V1 by sending A2A-Version: 1.0.
If you omit the A2A-Version header, Clix resolves the request as V0 (0.3).

Method Mapping

V1V0
SendMessagemessage/send
SendStreamingMessagemessage/stream
GetTasktasks/get
ListTaskstasks/list
CancelTasktasks/cancel
SubscribeToTasktasks/resubscribe
CreateTaskPushNotificationConfigtasks/pushNotificationConfig/set
GetTaskPushNotificationConfigtasks/pushNotificationConfig/get
ListTaskPushNotificationConfigstasks/pushNotificationConfig/list
DeleteTaskPushNotificationConfigtasks/pushNotificationConfig/delete
GetExtendedAgentCardagent/getAuthenticatedExtendedCard

Key Wire-Format Differences

Agent Card

AreaV1V0
Endpoint metadatasupportedInterfacesurl, preferredTransport, additionalInterfaces
Auth metadatasecuritySchemes, securityRequirementssecuritySchemes, security
Extended card capabilitycapabilities.extendedAgentCardsupportsAuthenticatedExtendedCard
Protocol version fieldPer interface protocolVersionTop-level protocolVersion

Message and Task Objects

AreaV1V0
Part discriminatorNo kind fieldkind is required on parts
Message shapemessageId, role, partsSame camelCase fields plus kind: "message"
Task shapeid, contextId, status, artifactsSame camelCase fields plus kind: "task"
Stream eventsJSON-RPC envelope with v1 StreamResponse resultJSON-RPC envelope with V0 event objects such as kind: "status-update"

Pagination

AreaV1V0
Request paramspageSize, pageTokenlimit, offset
Response shape{ tasks, nextPageToken, pageSize, totalSize }Array of tasks
Total countFirst page only in current Clix implementationNot returned

Push Notification Config Params

OperationV1V0
Createparams is the config object itself with taskId, url, id?, token?, authentication?params is { taskId, pushNotificationConfig: { ... } }
Get{ taskId, id }{ id, pushNotificationConfigId }
List{ taskId }{ id }
Delete{ taskId, id }{ id, pushNotificationConfigId }

SendMessage Result Shape

VersionResult
V1{ "result": { "task": { ... } } }
V0{ "result": { ...task... } }

Role and State Values

The protocol values are the same across Clix V0 and V1:
  • Roles serialize as user, agent, and unspecified
  • Task states serialize as submitted, working, completed, failed, and other lowercase protocol values
The main compatibility differences are method names, container shapes, and pagination models, not the role or state strings.

Example Migration

V0 request

{
  "jsonrpc": "2.0",
  "id": "req-1",
  "method": "message/send",
  "params": {
    "message": {
      "kind": "message",
      "messageId": "msg-1",
      "role": "user",
      "parts": [
        {
          "kind": "data",
          "data": {
            "skill": "create-user",
            "projectUserId": "user_123"
          }
        }
      ]
    }
  }
}

V1 request

Send this request with A2A-Version: 1.0. If you omit the header, Clix interprets the request as V0.
{
  "jsonrpc": "2.0",
  "id": "req-1",
  "method": "SendMessage",
  "params": {
    "message": {
      "messageId": "msg-1",
      "role": "user",
      "parts": [
        {
          "data": {
            "skill": "create-user",
            "projectUserId": "user_123"
          }
        }
      ]
    }
  }
}

Migration Checklist

  1. Start sending A2A-Version: 1.0 on every request, including the public Agent Card request.
  2. Rename JSON-RPC methods from slash-style V0 names to the PascalCase V1 names.
  3. Remove kind fields from message parts and stop expecting kind on messages, tasks, and stream events.
  4. Update SendMessage callers to read result.task instead of reading the task directly from result.
  5. Replace limit and offset with pageSize and pageToken, and update your parser for the paged ListTasks response object.
  6. Update task webhook config params to the V1 taskId and id field names.

When to Keep V0

Keep V0 only if you already have a deployed client that depends on the older method names or older object wrappers. For any new integration, V1 is the stable documentation target.