Turn it on
- Open the agent, go to the API tab, and switch on List on agent marketplaces (A2A).
- Publish the agent. The listing follows the published version, so it goes live, or comes down, with the next publish.
- Under Marketplace keys, create a key. It is shown once; copy it then.
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.
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.