---
title: "Open a Case as the Customer"
method: POST
path: "/resolution_center_cases"
tags: ["Resolution Center Cases"]
---

# Open a Case as the Customer

`POST /resolution_center_cases`

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

## Headers

- `Api-Version-Date` string
- `Idempotency-Key` string

## Request body

- object
  - `attachments` object[]
    - `direct_upload_id` string
    - `id` string
  - `message` string, 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_id` string, required — The payment to open the case against (`pay_` tag).

## Response `201`

case opened

- ResolutionCenterCase
  - `account` AccountSummary, required
    - `id` string, required — Account ID, prefixed `biz_`.
    - `title` string, required — Account display name.
  - `amount` number, required — The amount in question, in whole units of `currency`.
  - `available_actions` string[], required
  - `buyer` ResolutionBuyer, required
    - `email` string, nullable, required — The customer's email address. Requires the `member:email:read` scope; `null` without it.
    - `member_id` string, nullable, required — The customer's member row on the account, prefixed `mem_`.
    - `name` string, nullable, required — The customer's display name.
    - `user_id` string, nullable, required — The customer's user ID, prefixed `user_`.
    - `username` string, nullable, required — The customer's Whop username.
  - `created_at` string, required — When the case was opened, as an ISO 8601 timestamp.
  - `currency` string, nullable, required — Three-letter ISO currency code of the amount.
  - `customer_appealed` boolean, required — Whether the customer has appealed a decision on this case.
  - `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.
  - `id` string, 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.
  - `payment` ResolutionPayment, required
    - `card_brand` string, nullable, required — Card brand, when the customer paid by card.
    - `card_last4` string, nullable, required — Last four digits of the card, when the customer paid by card.
    - `created_at` string, required — When the payment was made, as an ISO 8601 timestamp.
    - `id` string, required — Payment ID, prefixed `pay_`.
    - `payment_method_type` string, nullable, required — How the customer paid, such as `card` or `paypal`.
  - `plan_id` string, nullable, required — The plan the payment was made on, prefixed `plan_`.
  - `product_id` string, 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_at` string, 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_at` string, required — When the case was last changed, as an ISO 8601 timestamp.

## Other responses

- `401` — Unauthorized

---

[API](https://skmtc.net/whop/apis/whop-api.md) · [All operations](https://skmtc.net/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/whop/whop-api/versions/db0883548bc5/schema)
