Skip to main content
A Resolution Center Case is opened by a buyer when something is wrong with a purchase, such as an unwanted renewal, an item that never arrived, or a charge they don’t recognize. It is the step before a chargeback: the buyer and merchant work it out directly, and Whop decides the case if they can’t. Use the Resolution Center Cases API from either side: as the buyer, open, reply to, appeal, or withdraw a case; as the merchant, accept it (refunding the payment), deny it, or ask the buyer for more information.

Endpoints

Attributes

string
required
Resolution center case ID, prefixed reso_.
object | null
required
The account the case was filed against.

Properties

string
required
Account ID, prefixed biz_.
string
required
Account display name.
number
required
The amount in question, in whole units of currency.
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
object
required
The customer who opened the case.

Properties

string | null
required
The customer’s email address. Requires the member:email:read scope; null without it.
string | null
required
The customer’s member row on the account, prefixed mem_.
string | null
required
The customer’s display name.
string | null
required
The customer’s user ID, prefixed user_.
string | null
required
The customer’s Whop username.
string
required
When the case was opened, as an ISO 8601 timestamp.
string | null
required
Three-letter ISO currency code of the amount.
boolean
required
Whether the customer has appealed a decision on this case.
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.
object[]
required
Everything the disputed payment charged for, in purchase order. product_id and plan_id name the first of these; a cart’s later items appear only here. A payment made before items were recorded lists the single item its variant implies. Empty when the payment is not linked to a variant.

Properties

string | null
required
Line item ID, prefixed li_. Null when the payment predates item snapshots and the item is read from the payment’s variant.
string | null
required
The item’s name as shown at checkout — the product title, else the variant title.
string | null
required
The variant bought, prefixed plan_. Null when the variant has since been deleted.
string | null
required
The variant’s current title, or null when the variant has been deleted or has no title.
string | null
required
The product the variant belongs to, prefixed prod_. On a payment that predates item snapshots this falls back to the variant’s product, so it can be set where the parent’s own product_id is null. Null for a variant with no product.
string | null
required
The product’s current title, or null when the item has no product.
number
required
How many units were bought.
string | null
required
The variant’s stock keeping unit, free text set by the seller (e.g. TSHIRT-LARGE-BLUE). Accounts with billing-reason SKU suffixes enabled receive it stamped with why the charge happened: -S for a first subscription charge, -R for a renewal, -C for a one-time purchase, -U when the payment’s own metadata carries upsell: true, -F when nothing was charged. Other billing reasons carry the bare SKU. null when the variant has no SKU or has been deleted.
object | null
required
The recorded amount for this item’s full quantity, before discounts, tax, and fees, in its purchase currency. Returns null when no item amount was recorded.

Properties

string
required
The amount in major units, as an exact decimal string — "10.00" is ten dollars. A string so no float rounds it in transit.
string
required
Three-letter ISO 4217 currency code, lowercase.
integer
required
How many decimal places the amount CARRIES — the precision the charge itself runs at.
integer
required
How many decimal places to SHOW. Usually equal to decimals, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is 2 and 0. Format the number in your own locale using this.
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
object
required
The payment the case was opened against.

Properties

string
required
Payment ID, prefixed pay_.
string | null
required
Card brand, when the customer paid by card.
string | null
required
Last four digits of the card, when the customer paid by card.
string
required
When the payment was made, as an ISO 8601 timestamp.
string | null
required
How the customer paid, such as card or paypal.
string | null
required
The variant the payment was made on, prefixed plan_.
string | null
required
The product the payment was for, prefixed prod_.
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
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
string | null
required
When the next response is due, as an ISO 8601 timestamp.
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
string
required
When the case was last changed, as an ISO 8601 timestamp.
ResolutionCenterCase