Skip to main content
PATCH
Update Payment

Authorizations

Authorization
string
header
required

An Account API key, an App API key, an account access token, an account-scoped user token, or a user OAuth token. Prepend the key or token with Bearer, for example Bearer ***************************. See Auth & API keys for how to get each one.

Headers

Api-Version-Date
string

Pins the request to a dated API version.

Example:

"2026-09-25"

Path Parameters

id
string
required

The payment, prefixed pay_.

Body

application/json
return_url
string

Where the buyer continues after completing an off-site step. An absolute https URL without credentials, at most 2,048 characters. Only for payments created with a confirmation_token, and only until the buyer has returned. Omit it to leave it unchanged.

Example:

"https://shinetime.example/checkout/thanks"

shipping_address
object | null

The complete new shipping address. It replaces the current address as a whole and is never merged with it, so send every field the address should have, including the ones that are not changing. Any field you leave out is cleared: sending only city leaves an address with nothing but a city. Pass null to remove the address, or omit shipping_address to leave it unchanged. It cannot change once a shipment exists for the payment.

Response

shipping address replaced

account_id
string | null
required

The account that received the payment, prefixed biz_.

Example:

"biz_xxxxxxxxxxxxxx"

amount_after_fees
object
required

What the account keeps: the total less Whop's fees.

auto_refunded
boolean
required

True when Whop refunded the payment automatically, for example on a dispute alert.

Example:

false

billing_address
object | null
required

The billing address the buyer entered, or null.

billing_reason
enum<string> | null
required

Why the charge was created: a first purchase, a renewal, a one-time payment, or a manual charge.

Available options:
subscription_create,
subscription_cycle,
subscription_update,
one_time,
manual,
subscription
Example:

"subscription_create"

checkout_configuration_id
string | null
required

The checkout configuration the buyer paid through, prefixed ch_, or null.

Example:

null

client_secret
string | null
required

The credential a buyer's surface presents to poll this payment and set its return URL. Only on payments created from a confirmation token, and always null in list responses — retrieve the payment for it.

Example:

"pay_xxxxxxxxxxxxxx_secret_vdefault_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

created_at
string
required

When the payment was created, as an ISO 8601 timestamp.

Example:

"2026-01-01T12:00:00.000Z"

currency
enum<string>
required

The currency the payment settles in, lowercase ISO 4217. Every money field below is stated in it unless it says otherwise.

Available options:
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
Example:

"usd"

customer_email
string | null
required

The buyer's email address. Null without member:email:read on the account or when the buyer has no assigned email.

Example:

"marcus@shinetime.example"

customer_phone
string | null
required

The phone number the buyer gave at checkout, when one was collected.

Example:

"+xxxxxxxxxxx"

decline_code
enum<string> | null
required

The normalized decline reason of the most recent failed attempt, or null.

Available options:
insufficient_funds,
lost_card,
stolen_card,
expired_card,
suspected_fraud,
invalid_card_number,
invalid_cvc,
invalid_cvc_or_expiration,
incorrect_pin,
authentication_required,
card_not_supported,
currency_not_supported,
duplicate_transaction,
generic_decline,
invalid_account,
invalid_amount,
processing_error,
restricted_card,
card_velocity_exceeded,
contact_issuer,
bank_declined,
regulatory_blocked,
transaction_not_permitted,
transaction_stopped,
card_type_not_supported,
issuer_not_found,
closed_account,
issuer_unavailable,
invalid_zip,
invalid_expiry_month,
invalid_expiry_year,
invalid_expiry,
invalid_transaction,
cannot_authorize,
pin_required,
pin_try_exceeded,
provider_declined,
high_risk,
test_mode_decline,
merchant_blacklist,
reenter_transaction,
invalid_pin,
pin_required_as,
withdrawal_count_limit_exceeded,
invalid_country,
issuer_error,
invalid_card_holder_name,
no_accounts,
transaction_cancelled,
three_d_secure_success,
three_d_secure_canceled,
three_d_secure_invalid_card_number,
three_d_secure_generic_error,
three_d_secure_timeout,
three_d_secure_failed,
three_d_secure_card_not_enrolled,
three_d_secure_fraud,
three_d_secure_too_many_attempts,
three_d_secure_rejected_by_bank,
three_d_secure_reported_lost_or_stolen,
blocked_by_cardholder,
test_mode_test_card,
try_again_later,
transaction_not_allowed,
bank_insufficient_funds,
bank_account_not_found,
bank_account_closed,
bank_account_frozen,
bank_invalid_routing_number,
bank_non_transaction_account,
bank_authorization_revoked,
bank_payment_stopped,
bank_not_authorized,
bank_account_holder_deceased,
bank_duplicate,
bank_amount_error,
bank_regulatory_blocked,
bank_details_invalid,
bank_processing_error,
bank_generic_decline,
sepa_invalid_iban,
sepa_no_mandate,
sepa_mandate_data_invalid,
sepa_disputed,
sepa_refused_by_customer,
sepa_generic_decline
Example:

"insufficient_funds"

dispute_alerted_at
string | null
required

When an issuer warned that this payment will be disputed, or null.

Example:

null

failure_message
string | null
required

Why the most recent attempt failed, in plain words, or null.

Example:

null

financing_installments_count
number | null
required

For installment methods, how many payments the charge splits into.

Example:

null

holds
object[]
required
id
string
required

Payment ID, prefixed pay_.

Example:

"pay_xxxxxxxxxxxxxx"

last_payment_attempt_at
string | null
required

When the most recent charge attempt ran, or null.

Example:

null

line_items
object[]
required
member_id
string | null
required

The buyer's member record on the account, prefixed mber_. Null without the member:basic:read permission.

Example:

"mber_xxxxxxxxxxxxxx"

membership_id
string | null
required

The membership this payment is billed against, prefixed mem_. Null for one-off purchases or without the member:basic:read permission.

Example:

"mem_xxxxxxxxxxxxxx"

metadata
object | null
required

Your own key-value data attached when the payment was created.

Example:
needs_tracking
boolean | null
required

True when funds are held until the order ships and no tracking number has been added yet. Null without the shipment:basic:read permission.

Example:

false

next_payment_attempt_at
string | null
required

When the next automatic retry is scheduled, or null.

Example:

null

paid_at
string | null
required

When the money was collected, or null while it has not been.

Example:

"2026-01-01T12:00:00.000Z"

payment_instrument
object | null
required

The instrument shaped for display: a buyer-facing name, the standard icon set, and the card's brand, last four and issuer identification number when it was a card.

payment_method_id
string | null
required

The stored payment method that was charged, prefixed payt_. Null when the method was not saved.

Example:

"payt_xxxxxxxxxxxxxx"

payment_method_type
enum<string> | null
required

The kind of instrument used, for example card, apple_pay, klarna, or us_bank_account.

Available options:
acss_debit,
addi,
affirm,
afterpay_clearpay,
alipay,
alipayhk,
alma,
amazon_pay,
apple,
apple_pay,
au_bank_transfer,
au_becs_debit,
bacs_debit,
bancolombia,
bancontact,
bank_wire,
billie,
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,
flex_pay,
gb_bank_transfer,
gcash,
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,
mercado_pago_ar,
mercado_pago_mx,
mobilepay,
modo,
mondu,
multibanco,
naver_pay,
nequi,
netbanking,
ng_bank,
ng_bank_transfer,
ng_card,
ng_market,
ng_ussd,
ng_wallet,
nupay,
nz_bank_account,
oney,
oney_3x,
oney_4x,
opay,
oxxo,
p24,
pago_efectivo,
pse,
pay_by_bank,
payco,
paynow,
paypal,
paypay,
payto,
pix,
platform_balance,
promptpay,
qris,
rapipago,
rechnung,
revolut_pay,
samsung_pay,
satispay,
scalapay,
sencillito,
sepa_debit,
sequra,
servipag,
sezzle,
shop_pay,
shopeepay,
sofort,
south_korea_market,
spei,
splitit,
sunbit,
swish,
tabby,
tamara,
touch_n_go,
twint,
upi,
us_bank_account,
us_bank_transfer,
venmo,
verve,
vipps,
webpay,
wechat_pay,
yape,
zip,
coinflow,
unknown
Example:

"acss_debit"

payment_rule_matches
object[]
required
payments_failed
number
required

How many charge attempts have failed on this payment.

Example:

0

plan_id
string | null
required

The variant that was charged, prefixed plan_.

Example:

"plan_xxxxxxxxxxxxxx"

presentment_total
object | null
required

The account-facing total in the currency presented to the buyer, before conversion into the settlement currency. Excludes buyer fees.

product_id
string | null
required

The product the variant belongs to, prefixed prod_. Null for a variant with no product.

Example:

"prod_xxxxxxxxxxxxxx"

promo_code_id
string | null
required

The promo code applied at checkout, prefixed promo_, or null.

Example:

null

recovery_url
string | null
required

Whop-hosted URL where the buyer can sign in and complete 3D Secure for an off-session charge the bank challenged — a subscription renewal or a saved-card payment. Null when recovery is unavailable, you lack member:basic:read, or in list responses. Retrieve the payment for it.

Example:

null

refundable
boolean
required

True when the payment is paid, not yet fully refunded, and its processor supports refunds.

Example:

false

refunded_amount
object | null
required

How much has been refunded so far, as it settled — refunds convert at the rate in force when each one was issued, not the payment's original rate.

refunded_at
string | null
required

When the payment was refunded, or null.

Example:

null

retryable
boolean
required

True when the payment is open and Whop can attempt the charge again — see POST /payments/{id}/retry.

Example:

true

risk_score
number | null
required

Whop's published risk index from 0 (lowest) to 100 (highest), including enforced decision floors. This is not a fraud probability. Null when no score is available.

Example:

null

risk_signals
object | null
required
deprecated

Deprecated. Risk score explanations are no longer provided; always null. DEPRECATED: Risk score explanations are no longer provided. Always null.

Example:

null

settlement_time_at
string | null
required

When the portion not listed in holds posts to the account's available balance, at midnight UTC. The financial_activity.funds_available webhook's posted_at carries the same value when the settlement that clears it posts. Null until the payment is paid, and always null in list responses — retrieve the payment for it.

Example:

null

shipment_id
string | null
required

The shipment fulfilling this payment, prefixed ship_. Null when nothing ships or without the shipment:basic:read permission.

Example:

null

shipping_address
object | null
required

The shipping address for physical goods, or null.

status
enum<string>
required

The lifecycle state of the charge: open while collection is outstanding, paid once the money moved, pending while a settlement rail clears, void/uncollectible when it ended without collecting.

Available options:
draft,
open,
authorized,
paid,
pending,
uncollectible,
unresolved,
void
Example:

"draft"

substatus
enum<string>
required

The dashboard's finer-grained reading of the payment, folding in refunds, disputes and Resolution Center cases.

Available options:
succeeded,
requires_capture,
pending,
failed,
blocked,
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
Example:

"succeeded"

subtotal
object | null
required

The price before discounts, tax and fees.

tax_amount
object | null
required

The sales tax or VAT collected. Null when no tax applied.

tax_behavior
enum<string> | null
required

Whether tax_amount was added on top of the price (exclusive) or was already inside it (inclusive).

Available options:
exclusive,
inclusive,
unspecified,
unable_to_collect
Example:

"exclusive"

tax_refunded_amount
object
required

How much of the collected tax has been returned to the buyer so far. Zero when the payment carried no tax, or when nothing has been refunded.

three_ds_verified
boolean
required

True when the buyer completed 3D Secure for this payment.

Example:

false

total
object | null
required

The account-facing total: the price after discounts, plus any tax added on top. Excludes buyer fees, which the buyer pays above this amount — so this is not necessarily what the buyer's statement shows.

updated_at
string
required

When the payment last changed, as an ISO 8601 timestamp.

Example:

"2026-01-01T12:00:00.000Z"

usd_total
object | null
required

The total converted to USD at the time of the charge, for reporting across currencies. Excludes the adaptive pricing FX markup, which the account does not keep.

user
object | null
required

The buyer. Null when the payment belongs to a company buyer rather than a user.

verification_checks
object | null
required

The Address Verification Service (AVS), cardholder name, and Card Verification Value (CVV/CVC) results, or null when the processor returned none.

voidable
boolean
required

True when the payment can be voided or canceled. The request is rejected if the payment is no longer eligible — see POST /payments/{id}/void.

Example:

false