Connect an endpoint
Register a URL and the events it should receive. Do it once per mode: a sandbox token registers a sandbox endpoint, a production token a production one.secret once. Store it. enabled_events takes exact names, prefix wildcards like vault.*, or ["*"] for everything. An endpoint receives only what it lists.
Manage endpoints, read or rotate the secret, and inspect recent deliveries with the Webhook endpoints API. The same is available in the dashboard under Developers → Webhooks.
The envelope
Every event has the same shape:type is stable and part of the API contract, so branch on it directly. livemode: false is sandbox. Delivery is at least once, so deduplicate on id.
Verify the signature
Each delivery carries anAgentCard-Signature header:
t, join it to the raw request body with a dot, compute HMAC-SHA256 with your endpoint’s secret, and compare it to v1 in constant time. Reject timestamps older than a few minutes to block replays. Verify against the raw bytes, never re-serialized JSON.
X-AgentCard-Signature: sha256=… header signs the body alone. New integrations should use AgentCard-Signature.
Delivery and retries
Return a2xx quickly and do slow work afterwards. A slow handler looks like a failure. Failed deliveries retry up to five times: immediately, then after 1 minute, 5 minutes, 30 minutes, and 1 hour. Recent deliveries with payloads and response codes are on List recent deliveries and in the dashboard.
Develop locally
No tunnel needed. The CLI registers a listener endpoint and forwards every event to your machine, signed exactly like production:Sandbox
Sandbox events deliver exactly like production, withlivemode: false. Endpoints are scoped to one mode: if your sandbox integration completes actions but nothing arrives, check that the endpoint was created with a sandbox token.
Events by object
Connections
connection.created, wallet_link.opened, approval.requestedVault
vault.session_linked, vault.card_storedCheckout authorizations
approved, submitted, declined, expired, amount_mismatch
Orders
order.placed, order.confirmed, order.failedCards and transactions
card.*, transaction.*, balance.lowIdentity verification
identity.verification.updatedWallet
user_wallet.funding_detected, user_wallet.fundedRewards and merchants
reward.*, merchant.connectedCompany wallet
cardholder.*, card_flow.*, transfer.*, recovery.*, wallet.*