Async

Payment lifecycle

All statuses and the transitions between them. Customer return on return_url and metadata handling are on a separate page.

All payment statuses:

StatusMeaning
pendingpayment created, waiting for the customer to open the link and select/confirm a method
processingcustomer started paying, the bank session is open
succeededbank confirmed the charge. Final status
failedbank or customer declined. Final status
expiredlink TTL or bank session TTL elapsed. Final status
cancelledmerchant or customer explicitly cancelled. Final status
refundeda succeeded payment was fully refunded. Final status

Transitions

pending    → processing  customer picked a method, bank session opened
pending    → expired     link TTL elapsed, no one paid
pending    → cancelled   merchant or customer cancelled
processing → succeeded   bank confirmed the charge
processing → failed      bank declined
processing → expired     bank session TTL elapsed, bank never returned a status
succeeded  → refunded    refund total covered the original amount
Link TTL and bank-session TTL are separate clocks. expires_at applies to our payment page (merchant-controlled by default). processing_until applies to the bank session and depends on the method: SBP — 20 minutes (NSPK requirement), cards — 15 minutes, T-Pay and SberPay — 30.

A payment is created in pending, walks through intermediate states and reaches a final one — succeeded, failed, cancelled, expired or refunded. A payment in a final state no longer changes (except transitions to refunded on successful refunds).

After the final status the customer is redirected to return_url with query parameters — details in the Customer return section of the API Reference. Arbitrary tags on a payment — in metadata field.