Error decision trees
Decision trees for turning common ATM and Tickets failures into correct app UX and developer action.
Compatible with the closed-beta ATM app APIs and versioned ATM event headers. Check atm-api-version on every webhook or XRPC receiver event.
Recipient not payable
- 01
Call payout status before UI
Do not show active checkout buttons for non-payable recipients.
- 02
Creator path
Show setup or resolve-payment-state CTA.
- 03
Buyer path
Show that this creator cannot receive payments yet.
- 04
Retry path
Retry status after setup completes or support repairs account access.
Ticket sold out
- 01
Refresh availability
Treat availability as an estimate until a hold succeeds.
- 02
Hold fails
Show sold out or ask the buyer to choose a lower quantity.
- 03
Hold expires
Create a new hold; never reuse an expired checkout.
- 04
Refund/void
Void issued tickets or pass tokens if payment reverses.
Buyer assertion failed
- Confirm buyerDid matches assertion issuer.
- Confirm audience is ATM and lxm is the expected method.
- Confirm expiry and jti replay state.
- Fall back to guest-style checkout only when the app can still fulfill safely.
- Ask the buyer to refresh/re-auth in the originating app if identity matters.
Webhook delivery failed
- 01
Verify endpoint health
Fix DNS, TLS, route, and raw body handling first.
- 02
Check signature
Use the environment-specific secret and the raw body bytes.
- 03
Return success for duplicates
A redriven event should not fulfill twice.
- 04
Redrive from dashboard
Use stored delivery status after the receiver is fixed.
Duplicate or replayed event
Duplicate delivery is not an error if the original side effect already succeeded. Store delivery ids before side effects and return success for duplicate deliveries after confirming state.