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 | Stable event id. Use for logs and support. |
|---|---|
| deliveryId | Unique delivery attempt id. Use for idempotency before side effects. |
| environment | test or live. Never mix fulfillment state across environments. |
| appDid | The app receiving the event. This should match the configured app environment. |
| data | Typed payload for the event type. Store the ATM id beside your app order id. |
Payment completed
json
{
"id": "evt_pay_completed_01",
"deliveryId": "del_pay_completed_01",
"environment": "test",
"type": "payment.completed",
"appDid": "did:plc:app",
"createdAt": "2026-06-05T14:00:00.000Z",
"data": {
"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": "evt_pay_refunded_01",
"deliveryId": "del_pay_refunded_01",
"environment": "test",
"type": "payment.refunded",
"appDid": "did:plc:app",
"createdAt": "2026-06-05T15:30:00.000Z",
"data": {
"paymentId": "pay_01HZYATM0001",
"refundId": "refund_01HZYATM0002",
"amountRefunded": 2500,
"currency": "usd",
"reason": "requested_by_customer",
"appOrderId": "ord_123"
}
}Subscription updated
json
{
"id": "evt_sub_updated_01",
"deliveryId": "del_sub_updated_01",
"environment": "test",
"type": "subscription.updated",
"appDid": "did:plc:app",
"createdAt": "2026-06-05T16:00:00.000Z",
"data": {
"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": "evt_product_archived_01",
"deliveryId": "del_product_archived_01",
"environment": "test",
"type": "product.archived",
"appDid": "did:plc:app",
"createdAt": "2026-06-05T17:00:00.000Z",
"data": {
"productUri": "at://did:plc:creator/money.atmosphere.product/abc",
"productCid": "bafy...",
"archivedAt": "2026-06-05T17:00:00.000Z",
"appProductRef": "supper:shop:123"
}
}Tickets issued
json
{
"id": "evt_tickets_issued_01",
"deliveryId": "del_tickets_issued_01",
"environment": "test",
"type": "tickets.issued",
"appDid": "did:plc:app",
"createdAt": "2026-06-05T18:00:00.000Z",
"data": {
"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": "evt_ticket_checked_in_01",
"deliveryId": "del_ticket_checked_in_01",
"environment": "test",
"type": "ticket.checked_in",
"appDid": "did:plc:app",
"createdAt": "2026-06-05T19:00:00.000Z",
"data": {
"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
}
}