v8

OpenAPI 3.1.02026-08-033623795.0 MB
Resolution Center Cases

Open a Case as the Customer

Opens a case, as the customer, against one of your own payments. Provide the payment (receipt_id), the reason, and a message.

post/resolution_center_cases

Headers

Api-Version-Datestring
Example:2026-07-31

Pins the request to a dated API version.

Idempotency-Keystring
Example:d9105228-4a08-46b1-8b91-42fed586d383

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

Request body

messagestring required

The customer's explanation.

reason'fraudulent' | 'product_not_received' | 'not_as_described' | 'product_unacceptable' | 'subscription_canceled' required

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

receipt_idstring required

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

Response

case opened

amountnumber required

The amount in question, in whole units of currency.

available_actionsstring[] required
created_atstring required

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

currencystring nullable required

Three-letter ISO currency code of the amount.

customer_appealedboolean required

Whether the customer has appealed a decision on this case.

escalatedboolean required

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

idstring required

Resolution center case ID, prefixed reso_.

outcome'customer_won' | 'merchant_won' | 'withdrawn' | 'null' nullable required

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

plan_idstring nullable required

The plan the payment was made on, prefixed plan_.

product_idstring nullable required

The product the payment was for, prefixed prod_.

reason'fraudulent' | 'product_not_received' | 'not_as_described' | 'product_unacceptable' | 'subscription_canceled' required

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

refund'none' | 'merchant' | 'platform' | 'null' nullable 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.

response_due_atstring nullable required

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

status'awaiting_merchant' | 'awaiting_customer' | 'under_review' | 'closed' 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.

updated_atstring required

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

Example response

{
  "available_actions": [
    "accept"
  ],
  "outcome": "customer_won",
  "reason": "fraudulent",
  "refund": "none",
  "status": "awaiting_merchant"
}