Skip to main content

Documentation Index

Fetch the complete documentation index at: https://conto.finance/docs/llms.txt

Use this file to discover all available pages before exploring further.

Agent-to-Agent (A2A) Payments

Conto supports direct payment requests between agents in the same organization. One agent creates a request and the receiving agent reviews and executes it.

How It Works

Requesting agent -> creates request -> target agent reviews -> target agent executes
  1. Agent A calls POST /api/sdk/a2a/request
  2. Agent B either receives a payment_request.created webhook or lists incoming requests via GET /api/sdk/a2a/requests
  3. Agent B approves via POST /api/sdk/a2a/requests/{id}/approve or rejects via POST /api/sdk/a2a/requests/{id}/reject
  4. Agent B executes the approved request via POST /api/sdk/a2a/requests/{id}/execute
  5. The transfer still runs through Conto policy evaluation before settlement

Create a Request

You can target the receiving agent by targetAgentId or by targetWalletAddress.
curl -X POST https://conto.finance/api/sdk/a2a/request \
  -H "Authorization: Bearer $CONTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "targetAgentId": "agent_xyz",
    "amount": 50,
    "currency": "USDC",
    "purpose": "Reimbursement for API credits",
    "metadata": {
      "invoiceId": "INV-2026-001"
    }
  }'
Response
{
  "success": true,
  "paymentRequest": {
    "id": "a2a_req_abc123",
    "status": "PENDING",
    "requestingAgentId": "agent_abc",
    "requestedFromAgentId": "agent_xyz",
    "amount": 50,
    "currency": "USDC",
    "purpose": "Reimbursement for API credits"
  },
  "message": "Payment request sent to DevOps Agent"
}
If you pass targetWalletAddress, Conto resolves it to a registered agent first. Requests to unknown addresses are rejected.

List Requests

GET /api/sdk/a2a/requests
Use this endpoint to view both incoming and outgoing requests for the authenticated agent.

Webhook-First Automation

If the requested-from agent has a webhook or callback URL configured, Conto also emits payment_request.created as soon as a new request is created. That payload targets the paying agent and includes:
  • paymentRequestId
  • requestingAgentId and requestingAgentName
  • amount, currency, purpose, invoiceId
  • approveUrl and rejectUrl
Use this path if you want an autonomous agent to react immediately without polling GET /api/sdk/a2a/requests.

Approve or Reject a Request

The paying agent can explicitly approve a pending request before execution:
curl -X POST https://conto.finance/api/sdk/a2a/requests/{id}/approve \
  -H "Authorization: Bearer $CONTO_API_KEY"
To reject it, call the reject endpoint. You can include an optional reason that is stored with the request.
curl -X POST https://conto.finance/api/sdk/a2a/requests/{id}/reject \
  -H "Authorization: Bearer $CONTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "This invoice is missing the deployment reference"
  }'

Execute a Request

The receiving agent executes the request:
curl -X POST https://conto.finance/api/sdk/a2a/requests/{id}/execute \
  -H "Authorization: Bearer $CONTO_API_KEY"
Spend limits, approval rules, counterparty rules, and other policies still apply.

Resolve an Agent from a Wallet Address

curl -X POST https://conto.finance/api/sdk/a2a/resolve \
  -H "Authorization: Bearer $CONTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "0x1234567890abcdef..."
  }'

A2A Statistics

GET /api/sdk/a2a/stats

API Reference

EndpointMethodDescription
/api/sdk/a2a/requestPOSTCreate an A2A payment request
/api/sdk/a2a/requestsGETList A2A requests
/api/sdk/a2a/requests/{id}GETGet one request
/api/sdk/a2a/requests/{id}/approvePOSTApprove a pending request
/api/sdk/a2a/requests/{id}/rejectPOSTReject a pending request
/api/sdk/a2a/requests/{id}/executePOSTExecute an approved request
/api/sdk/a2a/resolvePOSTResolve an agent from a wallet address
/api/sdk/a2a/statsGETView A2A statistics