Skip to content

Payment Lifecycle

Every payment has a status. The table below lists the customer-visible statuses; these values appear in the status field and in webhook event types.

Status UI label Meaning
initiated Created Cardless payment created; the buyer has not yet been redirected to the handoff / 3D is not yet complete. Card-bound fields (maskedPan, cardFamily, commission) are null at this stage.
capture_pending Verifying transaction Result inconclusive; the system resolves it. Not counted as failed automatically.
captured Successful Capture approved.
failed Failed 3D rejection or capture rejection.
expired Expired The payment/3D window elapsed or 3D was abandoned.
voided Voided Cancelled within the same processing day.
partially_refunded Partially refunded Cumulative refund < sale amount.
refunded Refunded Cumulative refund = sale amount.
initiated ──► captured ──► (voided | partially_refunded | refunded)
│ ▲ │
│ │ └► refunded (once the remaining balance is refunded too)
└► capture_pending (inconclusive; system resolves)
│
├► failed (3D or capture rejection)
└► expired (window elapsed / 3D abandoned)

Voids and refunds are started via Refunds & Void; the resulting status is voided, partially_refunded, or refunded. A single full-amount refund moves the payment directly from captured to refunded — partially_refunded never appears in between; partially_refunded occurs only on partial refunds, and moves on to refunded once the remaining balance is refunded as well.

Webhook event type Status(es) you will see in the query
payment.captured captured
payment.failed failed
payment.expired expired
refund.approved voided, partially_refunded, or refunded
refund.declined (payment status unchanged; the refund’s status is declined)

Refund/void outcomes are reported via refund.approved / refund.declined; since a single refund.approved can lead to three different payment statuses, learn the exact status via GET /v1/payments. See Webhooks.