stages array that breaks the buy pipeline into ordered steps. Poll
GET /platform/v1/transactions/{id}
or
client.getTransaction() to see how
each stage is progressing. When a stage’s status is failed, read
failureReason for a machine-readable code you can branch on in your app.
stages reflects buy pipeline progress. The top-level transaction status
(pending, completed, or failed) is what you should treat as terminal
when polling. A transaction can be failed while earlier stages still show
success.Properties
Stage kinds
Not every transaction includes every kind. The array only contains stages that
apply to that payment method and route.
Stage status
Stage failure reasons
Whenstatus is failed, failureReason is a snake_case code (for
example, payment_authorization_declined). Use it for programmatic handling —
not for display copy. Show your own message or MoonPay’s frame failureReason
string when the customer initiated payment through Apple Pay or Google Pay.
- Frame
failureCode(camelCase) on Apple Pay / Google Paycompleteevents — see the Apple Pay and Google Pay failure code tables. - HTTP
moonPayErrorCodeon Widget API errors — see Widget errors. - Top-level transaction
failureReasonon the legacy Widget transaction object (human-readable sentence), not returned on PlatformGET /transactions/{id}.
failureReason values, the stage that surfaces each
code, and retry guidance is documented on
Stage failure reasons.
Bank transfers and waiting_payment
For SEPA bank transfers, the transaction stays pending until the customer’s
deposit arrives. Check the waiting_payment stage: when its status is
success, MoonPay has received the transfer. See
Get a transaction for polling
guidance.
Example
Failed card authorization on theprocessing stage: