Skip to main content
A payment is described at two levels: the payment intent (the overall request) and its attempts (each execution against a gateway). Each has its own statuses, which are either transitory (still moving) or final (terminal).

Payment intent statuses

StatusTypeMeaning
pendingTransitoryCreated and not yet resolved; one or more attempts may be in progress.
completedFinalPaid successfully.
failedFinalAll attempts failed.
expiredFinalThe intent was not completed before it expired.
partially_refundedFinalCompleted, then partially refunded.
refundedFinalCompleted, then fully refunded.

Payment attempt statuses

StatusTypeMeaning
processingTransitorySent to the gateway, awaiting an outcome.
action_requiredTransitoryThe customer must act (OTP, redirect, QR, approval). Read next_action.
completedFinalCaptured successfully.
failedFinalDeclined. Read the failure object.
cancelledFinalAbandoned.

How the two relate

  • A completed attempt completes the intent.
  • When all attempts fail (after any automatic failover), the intent becomes failed.
  • A completed refund moves the intent to partially_refunded or refunded.
Only pending (intent) and processing / action_required (attempt) are non-terminal. Treat every other status as final and act on it. The authoritative status always comes from the API — see Verify a payment.