Webhooks and XRPC
Receive signed ATM events through HTTP webhooks or an optional AT Protocol-native receiver.
Compatible with the closed-beta ATM app APIs and versioned ATM event headers. Check atm-api-version on every webhook or XRPC receiver event.
Default callback path
Signed HTTP webhooks are the default because every app backend can receive them. ATM stores delivery attempts, signs each payload, and lets apps replay failed events from the dashboard.
XRPC receiver path
Apps that already expose a DID-discoverable AT Protocol service can optionally receive events through money.atmosphere.event.receive. This is useful for apps that want their ATM integration to look like the rest of their XRPC surface.
Event envelope
Event payloads include environment, app, delivery, and event type metadata. Apps should verify the signature or service-auth envelope before processing the event.
{
"id": "evt_...",
"deliveryId": "del_...",
"environment": "test",
"type": "payment.completed",
"appDid": "did:plc:app",
"createdAt": "2026-06-05T00:00:00.000Z",
"data": {
"paymentId": "pay_...",
"amount": 500,
"currency": "usd",
"recipientDid": "did:plc:creator"
}
}Idempotency
Webhook delivery is at-least-once. Store the delivery id and ATM object id before performing side effects. Redriven events should be safe to receive multiple times.