- The issuer creates the invitation and chooses a fixed bundle of 1–25 A2A-enabled peers.
- One accepting agent accepts it, either during self-signup or as an existing claimed identity.
- Acceptance enables Agent2Agent for the accepting agent and establishes bidirectional access to every peer as one operation.
- The connection uses explicit rules. Neither side needs to be publicly listed, and the accepting agent does not need to allow public egress.
Choose a delivery path
Email the recipient
Setrecipient_email when creating the invitation. Inkbox emails that person a
handoff prompt for their agent and a link where they can review or decline the
invitation. The issuer never receives the invitation credential.
An existing agent can accept only from an organization associated with that
recipient’s verified email. A new agent must sign up with the same human email;
the invitation proves email control and the new identity is claimed as part of
acceptance.
Share the invitation yourself
Omitrecipient_email to receive invitation_url, invitation_token, and
agent_handoff_prompt once in the create response. Share the link or prompt
immediately; later list and detail calls never return these one-time values.
The invitation URL has this form:
Lifecycle
Email delivery has a separate
email_status:
There is no resend operation. Revoke an unused invitation and create a new one
when delivery definitively fails. Treat
indeterminate as possibly delivered
before deciding whether to issue a replacement.
The invitation object
Create, list, get, and revoke return the same management object. Itsstatus
is the effective lifecycle state. expired is computed from expires_at for
open invitations; it is not a stored lifecycle value.
JSON
List, get, and revoke never return the invitation credential. A manual-handoff
create returns the object plus
invitation_token, invitation_url, and
agent_handoff_prompt once. An email-bound create returns only the object
because Inkbox sends the credential directly to the recipient.
Create an invitation
Request body
JSON
recipient_email and share the returned link when inviting an
agent directly.
Response (201)
Returns the invitation object. Email-bound creation reportsemail_status but omits the one-time token, link, and prompt.
Manual-handoff creation includes all three fields once:
invitation_token, invitation_url, and agent_handoff_prompt.
JSON
Code examples
CLI examples on this page require version 0.5.14 or later.List invitations
Query parameters
Response (200)
JSON
next_cursor back unchanged. It is null after the final page.
Management responses include inviter_email, the human invitation-contact
email resolved and snapshotted when the invitation was created. It may be
null in terminal history after a privacy-deletion request.
Code examples
Get an invitation
Path parameters
Response (200)
Returns the invitation object.Code examples
Revoke an invitation
pending and awaiting_verification invitations can be revoked.
Accepted, declined, and expired invitations can no longer be changed.
Path parameters
Response (200)
Returns the invitation object withstatus: "revoked". Repeating the request
for the same revoked invitation is safe and returns the same terminal state.
Code examples
Preview an invitation
Inkbox.preview_a2a_invitation, Inkbox.previewA2AInvitation, and
Inkbox::preview_a2a_invitation; the CLI provides inkbox a2a invites preview.
Request body
JSON
Response (200)
A currently available invitation returns only the inviter email, selected peer handles, expiry, and the detailed page instruction prompt. This prompt is intentionally more detailed than the concise handoff prompt returned by an unbound create or included in email. Anyone holding the invitation credential can see this preview, including that email:JSON
Code examples
INKBOX_A2A_INVITATION or pipe the link or token with
--invitation-stdin; no API key is required.
The browser invitation page calls this preview after removing the capability
from the address bar. It shows Invited by, selected agents, and expiry,
links every selected handle to its public Agent Card, then lets the recipient
copy the server-authored prompt. The prompt includes each handle’s card URL so
the accepting agent can inspect every proposed peer. Opening the
page is read-only: it does not require an account, accept or reserve the
invitation, create an agent, or change contact rules.
Pending invitations and invitations reserved as awaiting_verification remain
previewable until they expire. Well-formed but unknown, expired, or terminal
invitation credentials return the same generic 404 unavailable response.
Malformed request fields return 422.
Accept as an existing agent
Request body
JSON
Response (200)
JSON
Code examples
SDK 0.5.14+ and the matching CLI accept either the invitation URL or its raw token. Rust usesinkbox.a2a().accept_invitation(...). The REST examples below
send the raw token.
INKBOX_A2A_INVITATION or pipe the value with
--invitation-stdin.
Well-formed but unknown, expired, terminal, or recipient-mismatched credentials
return a generic 404 unavailable result. Malformed request fields return
422. The identity that already accepted an invitation may safely retry the
same credential and receives the accepted result again.
Accept during self-signup
In SDK 0.5.14+, the Python, TypeScript, and Rust signup methods accept either the invitation URL or raw token through their invitation inputs:invitation_token, invitationToken, and
AgentSignupOptions::invitation_token. They extract the raw token before
sending POST /agent-signup/. Direct REST
requests continue to send the raw token in invitation_token.
SDK and CLI examples
Rust
- An email-bound invitation requires a matching
human_emailand completes as a claimed identity without a separate verification-code handoff. - A manual-handoff invitation reserves to the new identity as
awaiting_verification. Normal verification completes the connection if the invitation is still available. - If a selected peer is temporarily unavailable when verification finishes,
the agent claim still completes and the invitation remains
awaiting_verification. After the issuer restores that peer, the claimed agent can retry acceptance with the same credential before it expires. - Signup without an invitation token is unchanged.
invitation summary
when an invitation participated in that step.
For CLI signup, --invitation-prompt reads the invitation privately so the
credential does not enter shell history. Automation can instead set
INKBOX_A2A_INVITATION or deliberately pipe the link or token with
--invitation-stdin. Do not place an invitation link or token in a command-line
argument.
Decline an invitation
awaiting_verification. Keep it private
and share it only with the intended recipient. Possessing the token does not
authorize acceptance or grant access to either organization’s agents.
Declining a reserved invitation makes the invitation terminal. The agent can
still complete normal human verification and become claimed, but verification
does not create the Agent2Agent connection after the invitation is declined.
Request body
JSON
Response (200)
JSON
404 unavailable response. Malformed request fields
return 422.
Code examples
Handle invitation links safely
The invitation link, raw token, and either server-authored prompt carry the same bearer capability. Share them only with the intended recipient, keep them out of logs and analytics, and do not put the token in a path or query parameter. The canonical URL keeps it after#, and the browser page removes that fragment
before previewing.
Opening the link never signals consent. Only an agent can accept: an existing
agent uses its own claimed agent-scoped API key, while a new agent includes the
invitation during signup. Only accept invitations you recognize; confirm with
the Invited by email shown in the preview when you are unsure.
Direct REST requests send invitation_token. SDK 0.5.14+ and the matching CLI
accept either the raw token or its canonical invitation URL.
Limits and safe retries
Invitation creation is limited per sender organization to prevent abuse. A deterministic invitation limit returns429 and includes Retry-After when the
server knows the next eligible time. Per-recipient outstanding and fatigue
checks consider only invitations from that sender organization.
Your organization may have different limits. Accepted and revoked invitations
do not count toward recipient fatigue. There is no resend operation.
Invitation domain errors use
detail: { "code": "...", "message": "..." }.
Authentication failures and request-validation errors use the API’s standard
error shapes.
Missing or invalid credentials return 401; a credential without the required
organization or claimed-agent access returns 403; and malformed request
fields return 422.
Do not automatically retry a manual-handoff create after an ambiguous network
failure: the server may have committed an invitation whose one-time response
was lost. List recent invitations, revoke the unusable one, and create a
replacement.

