Exposing an agent as A2A

Status: Current | Last reviewed: 2026-09-25

You can publish a Chat Agent as an Agent-to-Agent (A2A) agent so that other agents — yours or a partner's — can discover and call it. Voice agents, translation agents, and copilot agents do not show A2A exposure. When you turn this on, TrueServe serves a standard Agent Card (a JSON description of your agent and its skills) and accepts A2A messages that run a real conversation turn with your agent and return its text reply.

This is the other side of Remote Agent (A2A) tools: that page is for calling a remote agent; this page is for being the remote agent.

Turning it on

  1. Open a Chat Agent in the editor and open Settings (top right).
  2. Scroll to the Agent-to-Agent (A2A) section.
  3. Switch on Expose as A2A agent.

Once it's on, a View Agent Card button appears. Open it to see:

While the toggle is off, nothing is exposed — the card URL returns not found and the View Agent Card button is hidden until you opt in.

What callers can do

Once exposed, another agent that has your card URL can:

Calls that send a message must include a TrueServe API token:

Authorization: Bearer <API token>

The token must be scoped to the same tenant as the exposed agent and include call-initiation access. The Agent Card advertises this Bearer-token requirement in its securitySchemes. The card itself is public so agents can discover your agent before they hold credentials.

Checking the result

Publish a version of your agent before testing A2A calls. Exposure alone does not publish its draft.

A successful call returns a Task with status.state set to completed and the agent's reply in the response artifact. If no reply arrives within the response window (45 seconds by default), the Task is failed, the reason appears in status.message, and no response artifact is returned. Callers should check the Task state even when the HTTP status is 200.

Streaming replies

Send message/stream to the Agent Card's url, with the same Bearer token as a normal call. The response uses text/event-stream: it begins with a Task, delivers text as artifact updates, and ends with a final status update. The existing /agents/{id}/a2a address also accepts these requests.

Artifact updates use append: false: replace the previous text for that artifact instead of appending it. This avoids repeated words as the answer grows. Some model configurations return text in larger batches, so the number and timing of updates vary. A successful stream ends with a completed status; an empty or unsuccessful turn ends with failed status. SSE keep-alive comments can be ignored.

Closing the stream ends that request's runtime session. Stream reconnection/resumption and conversation-history reuse across A2A requests are not supported yet.

Customising the card

By default the card's name and description come from the agent's own name and description, and its version is 1.0.0. An administrator can override these (and add extra advertised skills) per agent if needed.

See also