Skip to main content
Agent2Agent (A2A) is an open protocol for one agent to discover and talk to another. Every live Fluid storefront runs a store agent that speaks A2A 1.0 on the store’s own host, with no setup. The store agent has one skill: answering questions about the store, from what it publishes. It’s the same answer as UCP Ask. To build carts and check out, use UCP.

The Agent Card

The interface URL is always on the host that served the card, so a custom domain’s card points to that domain. The card has no security schemes: the store agent answers as a signed-out shopper. It’s served with a five-minute public cache and an ETag, and any origin can read it. When the storefront is turned off, or the company’s account is paused for billing, the card and the endpoint answer 404.

Ask a question

Send SendMessage to the interface URL. Put the question in a text part. To ask about particular products, add a data part with up to 10 ids: product IDs or slugs, or variant IDs or SKUs.
The store agent replies with one message, never a task:
  • The text part is the answer: plain text, in the language of the question.
  • The data part holds links to the store pages the answer is based on, with the same link types as UCP Ask. It also holds a messages list with a not_found entry for each ID that names nothing the shopper can see. The data part is left out when there’s nothing to put in it.
  • The reply keeps your contextId, or starts a new one when you send none. The store agent doesn’t remember earlier messages: send each question with what it needs.
  • Send A2A-Version: 1.0. A request without the header is read as 1.0.

Methods and errors

Other errors: A2A errors carry a google.rpc.ErrorInfo entry in error.data, with a reason such as TASK_NOT_FOUND and the domain a2a-protocol.org. Errors answer HTTP 200, with two exceptions that carry a Retry-After header:
  • 429 with reason RATE_LIMITED: the store has used its daily allowance. Retry-After counts the seconds to the next UTC day, when the allowance resets.
  • 503 with reason SERVICE_UNAVAILABLE: answers are temporarily unavailable. Retry after 60 seconds.
A request with no id is a JSON-RPC notification. The endpoint answers 204 with no body and doesn’t act on it, because every A2A method expects a reply. A2A questions share UCP Ask’s rate limits and daily allowance.