Payments

Retrieve payment status

Retrieves how far a payment has got and what the buyer must do next, if anything. A payment is collected in the background, so poll this rather than reading the create response. Accepts either a secret key or the payment's own client_secret, so the surface collecting the payment can poll it directly.

get/payments/{payment_id}/status

Path parameters

payment_idstring required

The unique identifier of the payment.

Response

Payment status retrieved

auto_capture_atstring nullable required

When Whop will capture this authorization automatically, as an ISO 8601 timestamp. null when no automatic capture was requested.

capture_expires_atstring nullable required

When the card authorization must be captured, as an ISO 8601 timestamp. null when this payment was not authorized for later capture.

idstring required

The payment this status describes, prefixed pay_.

objectstring required

Always payment_status.

return_urlstring nullable required

Where to send the buyer once the payment reaches a resting state, or null to leave them where they are. Editable until they return — see the return_url operation.

status'requires_confirmation' | 'requires_action' | 'requires_capture' | 'confirming' | 'processing' | 'succeeded' | 'canceled' required

How far the payment has got. requires_confirmation — nothing attempted yet, or the last attempt failed and can be retried. requires_action — the buyer has a step outstanding; see next_action. requires_capture — the card authorization is holding funds and must be captured. confirming — the buyer has done their part and the processor is deciding. processing — with processing_details, the money is moving; without them, the charge is still being decided and the status should be read again. succeeded — collected. canceled — voided or written off.

Example response

{
  "account": {
    "id": "biz_xxxxxxxxxxxxxx",
    "title": "Shine Time Auto Detailing"
  },
  "capture_expires_at": "2026-01-01T12:00:00.000Z",
  "id": "pay_xxxxxxxxxxxxxx",
  "last_payment_error": {
    "code": "processing_error",
    "decline_code": "insufficient_funds",
    "message": "Your card was declined."
  },
  "next_action": {
    "data": {
      "frame_max_width": 500,
      "url": "https://psp.example/3ds/challenge"
    },
    "render": [
      "inline"
    ],
    "type": "redirect"
  },
  "object": "payment_status",
  "processing_details": {
    "expected_by": "2026-01-01T12:00:00.000Z"
  },
  "return_url": "https://shinetime.example/checkout/done",
  "status": "succeeded"
}

Changes