v8

latestOpenAPI 3.1.02026-08-033623795.0 MB
Payments

Retrieve payment

Retrieves the details of an existing payment.

Required permissions:

  • payment:basic:read
  • plan:basic:read
  • access_pass:basic:read
  • member:email:read
  • member:basic:read
  • member:phone:read
  • promo_code:basic:read
  • payment:dispute:read
  • payment:resolution_center_case:read
get/payments/{id}

Path parameters

idstring required
Example:pay_xxxxxxxxxxxxxx

The unique identifier of the payment.

Response

A successful response

amount_after_feesnumber required

How much the payment is for after fees

auto_refundedboolean required

Whether this payment was auto refunded or not

billing_reason'subscription_create' | 'subscription_cycle' | 'subscription_update' | 'one_time' | 'manual' | 'subscription' required

The reason why a specific payment was billed

card_brand'mastercard' | 'visa' | 'amex' | 'discover' | 'unionpay' | 'jcb' | 'diners' | 'link' | 'troy' | 'visadankort' | 'visabancontact' | 'china_union_pay' | 'rupay' | 'jcbrupay' | 'elo' | 'maestro' | 'tarjeta_naranja' | 'cirrus' | 'nspk_mir' | 'verve' | 'ebt' | 'private_label' | 'local_brand' | 'uatp' | 'wexcard' | 'uzcard' | 'meeza' | 'hrg_store_card' | 'girocard' | 'fuel_card' | 'dankort' | 'carnet' | 'atm_card' | 'china_union_payuzcard' | 'codensa' | 'cabal' | 'hipercard' | 'jcblankapay' | 'cmi' | 'aura' | 'unknown' required

Possible card brands that a payment token can have

card_last4string nullable required

The last four digits of the card used to make this payment. Null if the payment was not made with a card.

checkout_configuration_idstring nullable required

The ID of the checkout session/configuration that produced this payment, if any. Use this to map payments back to the checkout configuration that created them.

created_atstring date-time required

The datetime the payment was created.

currency'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau' required

The available currencies on the platform

customer_phonestring nullable required

Phone number the customer provided at checkout, or their verified phone number when your checkout requires phone verification. null when no phone number was collected.

dispute_alerted_atstring date-time nullable required

When an alert came in that this transaction will be disputed

failure_messagestring nullable required

If the payment failed, the reason for the failure.

financing_installments_countinteger nullable required

The number of financing installments for the payment. Present if the payment is a financing payment (e.g. Splitit, Klarna, etc.).

idstring required

The unique identifier for the payment.

last_payment_attemptstring date-time nullable required

The time of the last payment attempt.

metadataobject nullable required

The custom metadata stored on this payment. This will be copied over to the checkout configuration for which this payment was made

next_payment_attemptstring date-time nullable required

The time of the next schedule payment retry.

paid_atstring date-time nullable required

The time at which this payment was successfully collected. Null if the payment has not yet succeeded. As a Unix timestamp.

payment_method_type'acss_debit' | 'affirm' | 'afterpay_clearpay' | 'alipay' | 'alma' | 'amazon_pay' | 'apple' | 'apple_pay' | 'au_bank_transfer' | 'au_becs_debit' | 'bacs_debit' | 'bancolombia' | 'bancontact' | 'bank_wire' | 'billie' | 'bizum' | 'blik' | 'boleto' | 'bre_b' | 'ca_bank_transfer' | 'capchase_pay' | 'card' | 'card_installments_three' | 'card_installments_six' | 'card_installments_twelve' | 'cashapp' | 'claritypay' | 'coinbase' | 'crypto' | 'custom' | 'customer_balance' | 'demo_pay' | 'efecty' | 'eps' | 'eu_bank_transfer' | 'fpx' | 'gb_bank_transfer' | 'giropay' | 'google_pay' | 'gopay' | 'grabpay' | 'id_bank_transfer' | 'ideal' | 'interac' | 'kakao_pay' | 'klarna' | 'klarna_pay_now' | 'konbini' | 'kr_card' | 'kr_market' | 'kriya' | 'kueski' | 'link' | 'mb_way' | 'm_pesa' | 'mercado_pago' | 'mobilepay' | 'mondu' | 'multibanco' | 'naver_pay' | 'nequi' | 'netbanking' | 'ng_bank' | 'ng_bank_transfer' | 'ng_card' | 'ng_market' | 'ng_ussd' | 'ng_wallet' | 'nz_bank_account' | 'oxxo' | 'p24' | 'pago_efectivo' | 'pse' | 'pay_by_bank' | 'payco' | 'paynow' | 'paypal' | 'paypay' | 'payto' | 'pix' | 'platform_balance' | 'promptpay' | 'qris' | 'rechnung' | 'revolut_pay' | 'samsung_pay' | 'satispay' | 'scalapay' | 'sencillito' | 'sepa_debit' | 'sequra' | 'servipag' | 'sezzle' | 'shop_pay' | 'shopeepay' | 'sofort' | 'south_korea_market' | 'spei' | 'splitit' | 'sunbit' | 'swish' | 'tamara' | 'twint' | 'upi' | 'us_bank_account' | 'us_bank_transfer' | 'venmo' | 'vipps' | 'webpay' | 'wechat_pay' | 'yape' | 'zip' | 'coinflow' | 'unknown' required

The different types of payment methods that can be used.

payments_failedinteger nullable required

The number of failed payment attempts for the payment.

refundableboolean required

True only for payments that are paid, have not been fully refunded, and were processed by a payment processor that allows refunds.

refunded_amountnumber nullable required

The payment refund amount(if applicable).

refunded_atstring date-time nullable required

When the payment was refunded (if applicable).

retryableboolean required

True when the payment status is open and its membership is in one of the retry-eligible states (active, trialing, completed, or past_due), or when it is a failed initial billing-engine payment on a drafted membership with an unlimited-stock plan; otherwise false. Used to decide if Whop can attempt the charge again.

risk_scoreinteger nullable required

Whop's in-house fraud risk score for this payment, from 0 (lowest risk) to 100 (highest risk). Null when the payment has not been scored or scoring has not yet completed.

risk_signalsobject nullable required

A curated set of factors behind the risk score, grouped by category (business transaction history, buyer, device). Each entry has a key, human-readable label, category, and value. Null when there is no risk assessment for this payment.

settlement_amountnumber required

The total amount charged to the customer for this payment, including taxes and after any discounts. In the currency specified by the currency field.

settlement_currency'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau' required

The available currencies on the platform

settlement_exchange_ratenumber nullable required

Deprecated. Always returns null.

settlement_time_atstring date-time nullable required

When this payment's funds post to the company's available balance, at midnight UTC. Known at payment time and never changes. The ledger_account.funds_available webhook carries the same settlement_time_at when that batch posts — match them to know these funds are now withdrawable.

status'draft' | 'open' | 'paid' | 'pending' | 'uncollectible' | 'unresolved' | 'void' required

The status of a receipt

substatus'succeeded' | 'pending' | 'failed' | 'past_due' | 'canceled' | 'price_too_low' | 'uncollectible' | 'refunded' | 'auto_refunded' | 'partially_refunded' | 'dispute_warning' | 'dispute_needs_response' | 'dispute_warning_needs_response' | 'resolution_needs_response' | 'dispute_under_review' | 'dispute_warning_under_review' | 'resolution_under_review' | 'dispute_won' | 'dispute_warning_closed' | 'resolution_won' | 'dispute_lost' | 'dispute_closed' | 'resolution_lost' | 'drafted' | 'incomplete' | 'unresolved' | 'open_dispute' | 'open_resolution' required

The friendly status of a payment. This is a derived status that provides a human-readable summary of the payment state, combining the underlying status and substatus fields.

subtotalnumber nullable required

The subtotal to show to the creator (excluding buyer fees).

tax_amountnumber nullable required

The calculated amount of the sales/VAT tax (if applicable).

tax_behavior'exclusive' | 'inclusive' | 'unspecified' | 'unable_to_collect' required

The type of tax inclusivity applied to the receipt, for determining whether the tax is included in the final price, or paid on top.

tax_refunded_amountnumber nullable required

The amount of tax that has been refunded (if applicable).

three_ds_verifiedboolean required

Whether 3D Secure authentication was completed for this payment.

totalnumber nullable required

The total to show to the creator (excluding buyer fees).

updated_atstring date-time required

The datetime the payment was last updated.

usd_totalnumber nullable required

The total in USD to show to the creator (excluding buyer fees).

voidableboolean required

True when the payment is tied to a membership in past_due, the payment status is open, and the processor allows voiding payments; otherwise false.

Example response

{
  "amount_after_fees": 6.9,
  "application_fee": {
    "amount": 6.9,
    "amount_captured": 6.9,
    "amount_refunded": 6.9,
    "created_at": "2023-12-01T05:00:00.401Z",
    "id": "apfee_xxxxxxxxxxxx"
  },
  "card_last4": "4242",
  "company": {
    "id": "biz_xxxxxxxxxxxxxx"
  },
  "created_at": "2023-12-01T05:00:00.401Z",
  "dispute_alerted_at": "2023-12-01T05:00:00.401Z",
  "disputes": [
    {
      "amount": 6.9,
      "id": "dspt_xxxxxxxxxxxxx",
      "needs_response_by": "2023-12-01T05:00:00.401Z",
      "notes": "Customer used the product for 3 months before disputing.",
      "reason": "Product Not Received"
    }
  ],
  "financing_installments_count": 42,
  "financing_transactions": [
    {
      "amount": 6.9,
      "created_at": "2023-12-01T05:00:00.401Z",
      "id": "ptx_xxxxxxxxxxxxxx"
    }
  ],
  "id": "pay_xxxxxxxxxxxxxx",
  "last_payment_attempt": "2023-12-01T05:00:00.401Z",
  "membership": {
    "id": "mem_xxxxxxxxxxxxxx"
  },
  "next_payment_attempt": "2023-12-01T05:00:00.401Z",
  "paid_at": "2023-12-01T05:00:00.401Z",
  "payment_method": {
    "card": {
      "exp_month": 42,
      "exp_year": 42,
      "last4": "4242"
    },
    "created_at": "2023-12-01T05:00:00.401Z",
    "id": "payt_xxxxxxxxxxxxx"
  },
  "payments_failed": 42,
  "plan": {
    "id": "plan_xxxxxxxxxxxxx"
  },
  "product": {
    "id": "prod_xxxxxxxxxxxxx",
    "route": "pickaxe-analytics",
    "title": "Pickaxe Analytics"
  },
  "promo_code": {
    "amount_off": 6.9,
    "id": "promo_xxxxxxxxxxxx",
    "number_of_intervals": 42
  },
  "refunded_amount": 6.9,
  "refunded_at": "2023-12-01T05:00:00.401Z",
  "refunds": [
    {
      "amount": 6.9,
      "created_at": "2023-12-01T05:00:00.401Z",
      "id": "rf_xxxxxxxxxxxxxxx"
    }
  ],
  "resolutions": [
    {
      "due_date": "2023-12-01T05:00:00.401Z",
      "id": "reso_xxxxxxxxxxxxx"
    }
  ],
  "risk_score": 42,
  "settlement_amount": 6.9,
  "settlement_exchange_rate": 6.9,
  "settlement_time_at": "2023-12-01T05:00:00.401Z",
  "subtotal": 6.9,
  "tax_amount": 6.9,
  "tax_refunded_amount": 6.9,
  "total": 6.9,
  "updated_at": "2023-12-01T05:00:00.401Z",
  "usd_total": 6.9,
  "user": {
    "email": "john.doe@example.com",
    "id": "user_xxxxxxxxxxxxx",
    "name": "John Doe",
    "username": "johndoe42"
  }
}