Agent-to-Agent (A2A) Payments
Conto supports direct payment requests between registered agents. One agent creates a request and the paying agent reviews and executes it, subject to its policies and wallet limits.A2A endpoints enforce explicit API-key scopes:
payments:request to create, payments:approve to
approve or reject, payments:execute to settle, transactions:read to list or inspect, and
analytics:read for statistics.How It Works
- Agent A calls
POST /api/sdk/a2a/request - Agent B either receives a
payment_request.createdwebhook or lists incoming requests viaGET /api/sdk/a2a/requests - Agent B approves via
POST /api/sdk/a2a/requests/{id}/approveor rejects viaPOST /api/sdk/a2a/requests/{id}/reject - Agent B executes the approved request via
POST /api/sdk/a2a/requests/{id}/execute - The transfer still runs through Conto policy evaluation before settlement
Create a Request
You can target the receiving agent bytargetAgentId or by targetWalletAddress.
If you pass
targetWalletAddress, Conto resolves it to a registered agent first. Requests to
unknown addresses are rejected.List Requests
direction filter accepts incoming, outgoing, or all.
List and detail responses use these request statuses:
When a transaction is present, its status is
processing, completed, or failed. Its stable
transaction ID, network, block number, hash, and explorer URL are included for reconciliation when
available.
GET /api/sdk/a2a/requests/{id}.
Webhook-First Automation
If the requested-from agent has a webhook or callback URL configured, Conto also emitspayment_request.created as soon as a new request is created. That payload targets the paying
agent and includes:
paymentRequestIdrequestingAgentIdandrequestingAgentNameamount,currency,purpose,invoiceIdapproveUrlandrejectUrl
GET /api/sdk/a2a/requests.
Approve or Reject a Request
The paying agent can explicitly approve a pending request before execution:approved status, detail URL, and execute URL. Repeating the
next step with the returned URLs avoids reconstructing endpoint paths in your integration.
To reject it, call the reject endpoint. You can include an optional reason that is stored with the request.