Skip to main content

A2A Protocol

Every Anima agent gets a did:web DID and a public Agent Card, so other agents — Anima-hosted or not — can discover it and learn what it can do. On top of that identity layer, Anima gives each agent a task queue: a structured way to hand a job to one of your agents, tag who it’s from, and track it from submission through completion.

How A2A Works

  1. Identity — every agent has a did:web DID and a DID document (containing its public key) published at a world-readable URL
  2. Discovery — fetch any agent’s Agent Card (/.well-known/agent.json) to see its capabilities, DID, and contact info
  3. Task submission — submit a structured task onto one of your own agents’ task queues (first-party), tagged with a sender DID
  4. Dispatch — send a signed task to another agent by DID; Anima signs it with your agent’s key and the recipient verifies that signature against your published DID document before accepting it
  5. Tracking — poll for status (submitted -> working -> completed / failed / input_required), or cancel a task that hasn’t finished yet
Task submission (submitTask, getTask, listTasks, cancelTask) is scoped to your own org — the agentId in every task endpoint must be an agent your org owns. discover is unscoped: it’s a plain, unauthenticated fetch of the target’s public Agent Card, on Anima or anywhere else.

Discovering an Agent

Fetch an agent’s Agent Card directly from its /.well-known/agent.json URL. This works for any agent that publishes one — it doesn’t go through the Anima API and doesn’t require an API key.

Submitting a Task

Submit a task to one of your agents. agentId is the receiving agent (must belong to your org); from is a sender DID you supply — it’s recorded on the task but not cryptographically verified.

Dispatching a Task to Another Agent

dispatch is the authenticated agent-to-agent path. Anima signs the task with your sending agent’s key and delivers it to the recipient’s public inbound endpoint, which verifies the signature against your published DID document before accepting it. Unlike submitTask — where from is an unverified label on your own queue — a dispatched task’s sender identity is cryptographically proven. The recipient is addressed by DID. Your sending agent must be registered in the Agent Registry, and signing happens server-side — your private key never leaves Anima.
You never call the inbound endpoint (POST /v1/a2a/inbound) directly — it’s the public, signature-authenticated surface where dispatched tasks arrive. It takes no API key: the request is authenticated purely by the sender’s DID signature (verified against the sender’s DID document), then the task is recorded on the receiving agent, in the receiver’s org. Resolving non-Anima did:web senders is off by default (see Configuration).

Tracking a Task

Task Lifecycle

API Reference

Base URL: https://api.useanima.sh/v1. All endpoints above require Authorization: Bearer ak_... (or another valid key) for an org that owns agentId. Discovery and signed inbound are separate surfaces that take no API key:

Configuration

Inbound A2A behavior is controlled by these environment variables:

CLI

A2A pairs with the Agent Registry and agent identity commands:

Next Steps