Docs
Event payload examples
Copyable full event envelopes for app webhooks and optional XRPC receivers.
Compatible with the closed-beta ATM app APIs and versioned ATM event headers. Check atm-api-version on every webhook or XRPC receiver event.
How to read examples
These are complete app event envelopes. HTTP webhooks and XRPC receiver callbacks use the same JSON body. Only the transport auth changes.
| id | Delivery id (whd_...). Matches the Atm-Delivery-Id header. Use for idempotency before side effects, logs, and support. |
|---|---|
| apiVersion | Wire-format version (currently 2026-07). Pin to it and treat unknown fields as additive. |
| environment | test or live. Never mix fulfillment state across environments. |
| data | Typed payload for the event type (carries a $type lexicon ref). Store the ATM id beside your app order id. |
Payment completed
json
{
"id": "whd_pay_completed_01",
"type": "payment.completed",
"createdAt": "2026-06-05T14:00:00.000Z",
"apiVersion": "2026-07",
"environment": "test",
"data": {
"$type": "money.atmosphere.event.receive#paymentCompleted",
"paymentId": "pay_01HZYATM0001",
"amount": 2500,
"currency": "usd",
"paymentType": "shop",
"status": "succeeded",
"recipientDid": "did:plc:creator",
"recipientHandle": "creator.example",
"payerDid": "did:plc:buyer",
"payerHandle": "buyer.example",
"listing": {
"uri": "at://did:plc:creator/money.atmosphere.product/abc",
"cid": "bafy..."
},
"appOrderId": "ord_123",
"checkoutToken": "atm_checkout_123"
}
}Payment refunded
json
{
"id": "whd_pay_refunded_01",
"type": "payment.refunded",
"createdAt": "2026-06-05T15:30:00.000Z",
"apiVersion": "2026-07",
"environment": "test",
"data": {
"$type": "money.atmosphere.event.receive#paymentRefunded",
"paymentId": "pay_01HZYATM0001",
"refundId": "refund_01HZYATM0002",
"amountRefunded": 2500,
"currency": "usd",
"reason": "requested-by-customer",
"appOrderId": "ord_123"
}
}Subscription updated
json
{
"id": "whd_sub_updated_01",
"type": "subscription.updated",
"createdAt": "2026-06-05T16:00:00.000Z",
"apiVersion": "2026-07",
"environment": "test",
"data": {
"$type": "money.atmosphere.event.receive#subscriptionUpdated",
"subscriptionId": "sub_01HZYATM0003",
"status": "active",
"amount": 1000,
"previousAmount": 500,
"currency": "usd",
"cadence": "month",
"payerDid": "did:plc:buyer",
"recipientDid": "did:plc:creator",
"appSubscriptionRef": "support:creator.example"
}
}Product archived
json
{
"id": "whd_product_archived_01",
"type": "product.archived",
"createdAt": "2026-06-05T17:00:00.000Z",
"apiVersion": "2026-07",
"environment": "test",
"data": {
"$type": "money.atmosphere.event.receive#productArchived",
"product": {
"uri": "at://did:plc:creator/money.atmosphere.product/abc",
"cid": "bafy..."
},
"creatorDid": "did:plc:creator"
}
}Tickets issued
json
{
"id": "whd_tickets_issued_01",
"type": "tickets.issued",
"createdAt": "2026-06-05T18:00:00.000Z",
"apiVersion": "2026-07",
"environment": "test",
"data": {
"$type": "money.atmosphere.event.receive#ticketsIssued",
"eventUri": "at://did:plc:organizer/community.lexicon.calendar.event/abc",
"holdId": "hold_01HZYATM0004",
"paymentId": "pay_01HZYATM0005",
"issuedCount": 2,
"buyerDid": "did:plc:buyer",
"appOrderId": "ticket_order_123",
"tickets": [
{
"ticketId": "ticket_01HZYATM0006",
"tierId": "tier_general",
"status": "issued"
}
]
}
}Ticket checked in
json
{
"id": "whd_ticket_checked_in_01",
"type": "ticket.checked-in",
"createdAt": "2026-06-05T19:00:00.000Z",
"apiVersion": "2026-07",
"environment": "test",
"data": {
"$type": "money.atmosphere.event.receive#ticketCheckedIn",
"ticketId": "ticket_01HZYATM0006",
"eventUri": "at://did:plc:organizer/community.lexicon.calendar.event/abc",
"checkInListId": "list_main_gate",
"checkedInAt": "2026-06-05T19:00:00.000Z",
"scannerDid": "did:plc:scanner",
"repeat": false
}
}