Skip to main content
POST
JavaScript

Authorizations

Authorization
string
header
required

An Account API key, account-scoped JWT, App API key, or user OAuth token. Prepend the key or token with Bearer, for example Bearer ***************************.

Headers

Api-Version-Date
string

Pins the request to a dated API version.

Example:

"2026-08-13"

Idempotency-Key
string

A unique key that makes this request safe to retry. See Idempotent requests.

Maximum string length: 255
Example:

"d9105228-4a08-46b1-8b91-42fed586d383"

Body

application/json
message
string
required

The customer's explanation.

Example:

"The mobile detailer never showed up for the Ceramic Coating appointment."

reason
enum<string>
required

What went wrong. Uses the same vocabulary as /disputes.

Available options:
fraudulent,
product_not_received,
not_as_described,
product_unacceptable,
subscription_canceled
Example:

"product_not_received"

receipt_id
string
required

The payment to open the case against (pay_ tag).

Example:

"pay_xxxxxxxxxxxxxx"

attachments
object[]

Response

case opened

account
object | null
required

The account the case was filed against.

amount
number
required

The amount in question, in whole units of currency.

Example:

249

available_actions
enum<string>[]
required

What you can do to this case right now, named for the endpoint that does it. Resolved for the calling credential, so a merchant and a customer reading the same case see their own options.

Available options:
accept,
deny,
request_info,
reply,
appeal,
withdraw
buyer
object
required

The customer who opened the case.

created_at
string
required

When the case was opened, as an ISO 8601 timestamp.

Example:

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

currency
string | null
required

Three-letter ISO currency code of the amount.

Example:

"usd"

customer_appealed
boolean
required

Whether the customer has appealed a decision on this case.

Example:

false

escalated
boolean
required

Whether Whop is involved — either reviewing the case, or waiting on the side named by status for something it asked for while reviewing.

Example:

false

id
string
required

Resolution center case ID, prefixed reso_.

Example:

"reso_xxxxxxxxxxxxxx"

outcome
enum<string> | null
required

Who prevailed on the claim. null until the case closes. Read refund for whether any money actually moved.

Available options:
customer_won,
merchant_won,
withdrawn,
null
Example:

"merchant_won"

payment
object
required

The payment the case was opened against.

plan_id
string | null
required

The plan the payment was made on, prefixed plan_.

Example:

"plan_xxxxxxxxxxxxxx"

product_id
string | null
required

The product the payment was for, prefixed prod_.

Example:

"prod_xxxxxxxxxxxxxx"

reason
enum<string>
required

What the customer says went wrong. Shares the /disputes vocabulary, so a case that later becomes a chargeback reports the same complaint.

Available options:
fraudulent,
product_not_received,
not_as_described,
product_unacceptable,
subscription_canceled
Example:

"product_not_received"

refund
enum<string> | null
required

Whether money moved and off whose balance: none, merchant, or platform (Whop refunded the customer and the merchant kept the funds). Independent of outcome — a case the merchant won can still carry a platform refund. null while the case is open, and on older closed cases that predate this being recorded.

Available options:
none,
merchant,
platform,
null
Example:

"none"

response_due_at
string | null
required

When the next response is due, as an ISO 8601 timestamp.

Example:

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

status
enum<string>
required

Who the case is waiting on. awaiting_merchant and awaiting_customer name the side that owes a response, under_review means Whop is deciding, and closed means it is settled — read outcome for how.

Available options:
awaiting_merchant,
awaiting_customer,
under_review,
closed
Example:

"closed"

updated_at
string
required

When the case was last changed, as an ISO 8601 timestamp.

Example:

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