Documentation sections

Documentation/API

Payment statuses

Lifecycle and final statuses

StatusFinalMeaning
CREATEDnoThe payment has been created; the customer has not started paying yet. The payUrl link does not expire until payment is started; an unneeded payment can be canceled via the API.
PENDINGnoThe customer has started paying: an invoice has been issued, a QR code shown, or a bank page opened. From this moment the customer has 20 minutes to pay.
SUCCESSyesPaid. paidAt is set and the credit appears in the shop balance.
FAILEDyesThe payment did not go through: the bank declined it or it was canceled. No money was charged; create a new payment to retry. A late payment may change it to SUCCESS (see "Lifecycle").
EXPIREDyesThe time to pay has run out. Create a new payment to retry. A late payment may change it to SUCCESS (see "Lifecycle").
REFUNDEDyesThe payment was refunded to the customer after SUCCESS. Refunds are handled via TabPay support.
CANCELEDyesThe payment was canceled by you via the API before payment started (from status CREATED). The payUrl link shows the customer an "Invoice canceled" screen; it can no longer be paid.

Lifecycle

CREATED, then PENDING, then one of the final statuses: SUCCESS, FAILED, or EXPIRED. From SUCCESS a payment can move to REFUNDED, and from CREATED to CANCELED (cancellation via the API, available only while the customer has not started paying). The only exception to finality is a late payment: an SBP QR code can be paid even after our timeout, in which case EXPIRED or FAILED changes to SUCCESS and a webhook is sent. So do not close the order irreversibly on EXPIRED: a late SUCCESS webhook means the money has arrived and the order must be fulfilled. There are no other transitions out of final statuses.

On every transition to a final status - including REFUNDED after SUCCESS and CANCELED - your shop receives a webhook. Handle statuses unknown to your code safely: acknowledge with a 200 response and log them - the set of statuses may grow.