Checkout Statuses and Failure Reasons

What each checkout and checkout transaction status means, why a payment failed, and when a checkout can be charged again.

Use this page to decide what to do with a checkout from its status and, when it failed, from its failure reasons. The hosted page, the iframe and the Payin SDK all report the same values.

Before you start

You read checkouts with Get Checkout, Search Checkouts or the checkout-status-changed webhook. The Payins Overview explains checkouts and checkout transactions.

Checkout status

StatusMeaningFinal?What to do
PENDINGCreated and not paid yet. No charge is in flight.NoWait for the buyer, charge it yourself with a saved instrument, or send it to a terminal if the buyer pays in person.
PROCESSINGA charge is in flight, including a 3D Secure challenge the buyer has not finished.NoWait. Do not create a second checkout for the same order.
PAIDThe charge succeeded. chargedAmount and succeededTransactionId are set.YesFulfil the order.
FAILEDThe last charge was declined or could not be made. errorTransaction says why.No, while expiresAt has not passedSee Charging a failed checkout again.
EXPIREDexpiresAt passed before the checkout was paid.YesCreate a new checkout if the buyer still wants to pay.
UNKNOWNThe charge was never confirmed as succeeded or failed. The checkout is locked against further charges.YesDo not charge the buyer again and do not cancel the order. Contact Payment Labs support with the checkout ID.

Two details matter when you read these values:

  • Expiry. A checkout past its expiresAt can no longer be paid, but its status can stay PENDING or FAILED. Compare expiresAt with the current time instead of relying on the status alone.
  • Subscription checkouts. Checkouts that Payment Labs creates to bill a subscription do not appear in Search Checkouts and do not send checkout-status-changed. Follow them through the subscription events instead. See Subscriptions.

Checkout transaction status

Every charge attempt creates a checkout transaction (ST-…). To follow the latest attempt, read the checkout's status; succeededTransactionId names the successful transaction, and errorTransaction the last failed one. List Checkout Transactions returns every attempt.

StatusMeaning
PENDINGThe charge was accepted and is being processed.
PENDING_3DSThe issuer asked for 3D Secure and the buyer has not completed it.
SUCCEEDEDThe money was taken. Only a SUCCEEDED transaction can be refunded.
FAILEDThe charge did not succeed. This also covers charges that were cancelled, returned or never confirmed. Read the checkout's status to tell a decline (FAILED) from an unconfirmed charge (UNKNOWN).

Failure reasons

When a checkout is FAILED, errorTransaction describes the failed attempt:

{
  "status": "FAILED",
  "errorTransaction": {
    "transactionId": "ST-01JBX8C4D6F8G0H2J4K6M8N0P2",
    "errorReason": "CHARGE_INSTRUMENT_ERROR",
    "extendedErrorReason": "INSUFFICIENT_FUNDS",
    "checkoutInstrumentId": "SI-01JBX8B1C3D5E7F9G1H3J5K7M9",
    "instrumentType": "payment-card-1"
  }
}

The top-level errorReason on the checkout is deprecated. Read errorTransaction.errorReason instead.

errorReason

The category of the failure. It is always present on a failed attempt.

ValueMeaningWhat to tell the buyer
MISSING_INSTRUMENTNo usable payment method reached the charge: none was provided, or the saved one is no longer available.Choose or enter a payment method.
INVALID_INSTRUMENTThe payment details did not pass validation, for example a card number, expiry date or billing address that does not match what the bank holds.Check the details, including the billing address on file with the bank.
CHARGE_INSTRUMENT_ERRORThe bank or card network declined the charge.Use another payment method, or contact the bank.
APPLICATION_ERRORPayment Labs could not process the charge. Payment Labs is notified automatically.Try again later.

extendedErrorReason

The specific cause, when the bank or card network reports one. It can be absent. New values can be added, so handle values you do not recognise by falling back to errorReason.

ValueMeaning
INSUFFICIENT_FUNDSThe account does not have enough funds.
EXPIRED_CARDThe card's expiration date has passed.
INVALID_CVVThe security code was wrong.
DO_NOT_HONORThe issuer declined without giving a reason.
TRANSACTION_NOT_PERMITTEDThe card does not allow this kind of transaction.
RESTRICTED_CARDThe card is restricted, for example by region or account status.
DUPLICATE_TRANSACTIONThe same charge was submitted twice.
INVALID_ACCOUNT_NUMBERThe card or account number does not exist.
INVALID_AMOUNTThe amount is out of range or over the card's limit.
INVALID_CURRENCYThe currency is not accepted.
CALL_ISSUERThe issuer wants the cardholder to contact them.
ADDRESS_VERIFICATION_FAILEDThe billing address does not match the issuer's records.
MERCHANT_RULE_VALIDATIONA rule configured for your account blocked the charge.
THREE_D_SECURE_REQUIREDThe issuer requires 3D Secure and it was not completed.
THREE_D_SECURE_FAILEDThe 3D Secure authentication was rejected.
THREE_D_SECURE_EXPIREDThe buyer did not finish 3D Secure in time.
NEW_ACCOUNT_INFO_AVAILABLEThe issuer holds newer card details than the ones used. Ask the buyer to enter the card again.
PAYMENT_CANCELLED_BY_CARDHOLDERThe cardholder withdrew permission to bill this card. Do not charge it again.
RETRY_LATERThe charge could not be approved now but may succeed later.
PROCESSOR_UNAVAILABLEThe payment network could not be reached.
UNKNOWN_ERRORNo usable reason was reported.

Charging a failed checkout again

A FAILED checkout can be charged again while its expiresAt has not passed and none of its attempts is still in flight or unconfirmed.

  • The buyer. After a failure the hosted page, the iframe and the Payin SDK show the result and do not offer another attempt on the same checkout. To let the buyer try again, create a new checkout for the same order and send them the new link or ID.
  • You, with a saved instrument. Call Charge Checkout on the same checkout. See Saved Cards and Merchant-Initiated Charges.
  • You, on a terminal. For an in-person payment, send the same checkout to the terminal again with Charge Checkout. See POS Terminals.

A PAID, EXPIRED or UNKNOWN checkout cannot be charged again. Charge Checkout on one of them returns 423 NOT_EDITABLE.

Next steps


What’s Next

Next: Refunds.

Did this page help you?