PAYMENT_FAILED
PAYMENT_FAILED
The payment was declined and the processor did not tell us why. This is the unattributed decline — the generic answer we return whenever a payment fails without a reason we can map to something more specific.
Summary
| Field | Value |
|---|---|
| Appears as | errors[].code |
| Response | HTTP 200 — Order with isValid: false and a populated errors[] |
| Retry the same card | No |
This is a reason code, not a top-level error code
PAYMENT_FAILED is an errors[].code value on the order. It is not a top-level
ProblemDetail.errorCode, so it carries no HTTP status, errorCategory, or retryable field of its
own. See Unified OrderError shape.
When This Fires
POST /v1/marketfront/orders/place— payment authorization failed and the decline carried no attributable reason, or carried one we deliberately do not refine (an address-verification failure, for example).
PAYMENT_FAILED is not superseded by the more specific decline reasons — it remains the correct answer for a generic decline. If you need to branch on why a payment failed, handle the specific codes and let PAYMENT_FAILED be your default case.
Recommended Action
Ask the user for a different payment method:
- Show a clear "your card was declined — please try another payment method" message.
- Open the payment-method picker.
- Resubmit
placewith the new method.
Do not retry the declined card automatically — this is a decision by the issuer, not a transient fault, so a retry will return the same answer and repeated attempts can trigger fraud lockouts.
Looking for the retryable case?
If the payment failed because of a timeout or a fault at the processor rather than a decision about
the card, that is PROCESSING_ERROR — the one payment reason where
retrying the same card is sensible advice, and the one that needs idempotency care to avoid a
double charge.
Related codes
More specific decline reasons refine this one. All are errors[].code values:
| Code | When you get it instead |
|---|---|
INSUFFICIENT_FUNDS | The account does not cover the amount |
INCORRECT_CVC | The security code did not match |
CARD_EXPIRED | The card has expired |
CARD_LOST_OR_STOLEN | The credential is flagged — never retry, never explain |
PROCESSING_ERROR | A transient fault, not a decline |
Example
Code