Skip to main content
A2A (Agent2Agent) is an open protocol that agent marketplaces use to discover agents and call them. Any agent can be exposed over A2A v1.0, using the JSON-RPC binding. The marketplace gets one URL per agent and a key that works for that agent only.

Turn it on

  1. Open the agent, go to the API tab, and switch on List on agent marketplaces (A2A).
  2. Publish the agent. The listing follows the published version, so it goes live, or comes down, with the next publish.
  3. Under Marketplace keys, create a key. It is shown once; copy it then.
Until all three are done, both URLs below answer 404, the same as for an agent that does not exist.

What the marketplace needs

<agent_id> is the agent’s group id. It stays the same across publishes, so the marketplace never needs a new URL.

What a marketplace key can do

A marketplace key is scoped to one agent:
  • It works only on that agent’s A2A endpoint. Every other API refuses it with 401.
  • A caller using it sees only the runs it started. Other callers’ runs, and runs started in the app, answer TaskNotFoundError.
  • It cannot be given a role.
  • Each agent can have up to 10 marketplace keys. They do not count toward the workspace’s own API key limit.
Runs started over A2A appear in your workspace like any other run, with source a2a, and are billed to your workspace. Revoke a key from the same tab, or from Settings → API keys.

Supported methods

SubscribeToTask, ListTasks, GetExtendedAgentCard and push notifications are not supported; the agent card says so.

Messages and results

In. Text parts become the request. data parts are passed to the agent as JSON. Files go inline as raw (base64) parts, or as url parts pointing at a public https:// address that is downloaded before the run starts. Each file can be up to 20 MB, and a request up to 64 MB. Retries. A message is identified by its messageId. Sending the same message again with the same key and messageId returns the task the first one started; it does not start a second run or add the reply twice. Reusing a messageId for a different message is an error. Out. A finished run returns its result as an artifact: text for a summary, JSON for structured output, chosen by the agent’s Synchronous run result setting. Files the run produced come back as download links. Questions. When the agent asks the caller something, the task goes to TASK_STATE_INPUT_REQUIRED with the question in status.message. Answer with SendMessage on the same taskId (a contextId on the reply is optional; the task keeps its own). Pauses that something else resolves, such as an owner’s review or a background wait, stay TASK_STATE_WORKING.

Example