Skip to main content
A charge tracks the outcome of a customer’s payment. Its status tells you where the charge stands. Some statuses also have a substatus that explains what is happening or why the charge ended. Use Get Charge Status to retrieve a charge, or use webhooks to receive payment updates as they happen.

Charge statuses

How statuses and substatuses relate

status describes the charge’s overall state. substatus adds detail to certain statuses. It does not replace status, and it does not by itself confirm that money was collected. For an open charge, substatus describes the current payment attempt: For a charge that has ended without payment, substatus explains why: The open substatus reflects the current attempts and can change as they progress. For example, an open charge with last_attempt_failed is still payable. A failed attempt does not mean the whole charge has failed. A completed charge keeps its ending substatus. For compatibility, webhooks can report the reason as a status such as cancelled or expired, while the Payments API reports incomplete with a substatus. Check the status and substatus together when handling these records.

Decide what to do

  • Keep the order pending while the charge is open.
  • Fulfill when the payment reaches succeeded, accepted, or overpaid, applying your own rules for the amount received.
  • Do not fulfill an incomplete or failed charge.
  • When a charge is refunded, use its refund status and refunded_amount to update your records.
  • For an asynchronous payment, use webhooks for updates and retrieve the charge when you need its current state.
For refund processing and refund-specific statuses, see the Refunds guide.