The Object Hierarchy
Every payment flow creates three objects in sequence:
If a card is declined and the customer retries with a different card, a new Payment Attempt is created on the same Payin.
The Lifecycle
- Your server calls
POST /v3/checkout— returns a hosted payment pageurl - You redirect the customer to that
url - Customer selects a payment method, completes authentication
- Tazapay redirects customer back to your
success_urlorcancel_url - Tazapay sends webhooks — key events:
checkout.paid— payment_status changes to paidpayment_attempt.created— new payment attempt createdpayment_attempt.succeeded— attempt succeedspayment_attempt.failed— attempt failspayment_attempt.processing— attempt moves to processingcheckout.expired— session expires before paymentcheckout.created— session created
Checkout Status Fields
The Checkout object has two independent status fields that update separately:status — the session state:
active— session is open and the customer can still payexpired— session window closed before payment was completed
payment_status — the payment outcome:
unpaid— no payment received yetprocessing— customer completed all actions but Tazapay hasn’t confirmed funds yet; common for async methods like local bank transfer or wire transfer where intermediary banks take time to processpaid— payment confirmed
Creating a Checkout Session
url in the response.