Docs
Error codes
Stable ATM error codes, likely causes, retry behavior, and developer actions.
Compatible with the closed-beta ATM app APIs and versioned ATM event headers. Check atm-api-version on every webhook or XRPC receiver event.
Payment setup errors
| Code | HTTP | Retry | Cause | Developer action |
|---|---|---|---|---|
| RecipientNotPayable | 409 | no | Recipient has not completed payment setup. | Disable checkout controls and direct the recipient to ATM setup. |
| PaymentSetupIncomplete | 409 | no | Payment setup exists but is not ready for live payment collection. | Show setup-required copy and re-check payout status later. |
| PaymentAccountUnavailable | 503 | yes | ATM cannot currently access the recipient payment account. | Show a temporary unavailable state and retry payout status. |
| BrokerDidUnsupported | 400 | no | The recipient prefers a broker ATM cannot process for this checkout. | Do not send an ATM checkout envelope to another broker. |
Checkout errors
| Code | HTTP | Retry | Cause | Developer action |
|---|---|---|---|---|
| InvalidProduct | 400 | no | The product token or checkout envelope is malformed. | Rebuild the envelope server-side and confirm only one product field is sent to attested.network initiate. |
| CheckoutExpired | 410 | no | The checkout session or ticket hold expired. | Create a fresh checkout or hold. |
| CheckoutAlreadyProcessing | 409 | yes | A matching idempotent checkout operation is already in flight. | Poll status or retry after a short delay. |
| ProcessorUnavailable | 503 | yes | The payment processor is temporarily unavailable. | Show a retryable payment-unavailable state. |
| PaymentMethodUnavailable | 400 | no | The requested payment method is not enabled or eligible. | Use ATM-supported methods for the environment and currency. |
Auth errors
| Code | HTTP | Retry | Cause | Developer action |
|---|---|---|---|---|
| AppUnauthorized | 401 | no | App service-auth is missing or invalid. | Mint a fresh token with the exact issuer, audience, lxm, expiry, and jti. |
| InvalidAudience | 401 | no | The token audience does not match ATM. | Use the ATM service audience for this environment. |
| InvalidMethod | 401 | no | The token lxm does not match the route being called. | Mint service-auth for the exact NSID. |
| TokenReplay | 401 | no | The jti has already been used. | Mint a new token with a unique jti. |
| BuyerAssertionInvalid | 401 | no | The buyer assertion is missing, expired, replayed, or does not match buyerDid. | Mint a fresh buyer assertion for the current action. |
Webhook errors
| Code | HTTP | Retry | Cause | Developer action |
|---|---|---|---|---|
| InvalidSignature | 401 | no | Webhook signature verification failed. | Verify against the raw body and the correct environment secret. |
| DuplicateDelivery | 200 | no | The delivery was already processed. | Return success after confirming the side effect already happened. |
| ReceiverUnavailable | 502 | yes | ATM could not deliver to the app endpoint. | Fix the endpoint and redrive from the app dashboard. |
| ReceiverConfigNeeded | 202 | no | No webhook or receiver endpoint is configured. | Add an endpoint; ATM can queue or redrive pending events. |
Ticket errors
| Code | HTTP | Retry | Cause | Developer action |
|---|---|---|---|---|
| TicketHoldUnavailable | 409 | no | Capacity could not be reserved. | Refresh authoritative availability and ask the buyer to choose a valid quantity. |
| TicketHoldExpired | 410 | no | The hold expired before checkout completed. | Create a new hold. |
| TicketAlreadyCheckedIn | 200 | no | The ticket was already checked in. | Show prior check-in state rather than recording a second entry. |
| TicketTokenInvalid | 404 | no | The scan token is unknown, revoked, or malformed. | Do not admit entry; ask the organizer to inspect the ticket. |
| TicketVoided | 409 | no | The ticket was refunded, voided, or revoked. | Do not admit entry. |
User-facing copy
Keep user-facing errors calmer than developer errors. Show the concrete next action and avoid exposing processor internals unless the user is in ATM dashboard settings or support tooling.
Setup incomplete
This creator has not set up payments yet.
Temporary unavailable
Checkout is temporarily unavailable. Please try again in a moment.
Sold out
These tickets are no longer available.
Auth canceled
Sign-in was canceled. You can continue from where you left off.