---
title: "Dispute Created"
method: POST
path: "dispute.created"
tags: ["Disputes"]
---

# Dispute Created

`POST dispute.created` (webhook)

Sent when a dispute is created

Required permissions:
 - `payment:dispute:read`
 - `plan:basic:read`
 - `access_pass:basic:read`
 - `company:basic:read`
 - `payment:basic:read`
 - `member:email:read`
 - `member:basic:read`
 - `member:phone:read`
 - `webhook_receive:disputes`

## Headers

- `webhook-id` string, required — A unique identifier for this webhook request
- `webhook-signature` string, required — The signature of the webhook request with the webhook version prepended
- `webhook-timestamp` string, required — The timestamp in seconds since the Unix epoch that the webhook was sent at on the server

## Payload

- object
  - `api_version` 'v1', required — The API version for this webhook
  - `api_version_date` string, nullable, required — The dated API version (Api-Version-Date) the payload is serialized to
  - `company_id` string, nullable — The account ID that this webhook event is associated with
  - `data` Dispute, required
    - `account_id` string, nullable, required — The account the dispute was filed against, prefixed `biz_`.
    - `amount` number, required — The disputed amount, in whole units of `currency`.
    - `buyer` DisputeBuyer, 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_`. `null` for a guest checkout.
      - `username` string, nullable, required — The customer's Whop username.
    - `created_at` string, required — When the dispute was opened, as an ISO 8601 timestamp.
    - `currency` string, required — Three-letter ISO currency code of the disputed amount.
    - `evidence` DisputeEvidence, required
      - `access_activity_log` string, nullable, required — Log of the customer's access to the product, such as sign-in or download activity.
      - `billing_address` string, nullable, required — The billing address the customer provided at checkout.
      - `cancellation_policy_attachment` DisputeAttachment, required
        - `content_type` string, nullable, required — The uploaded file's MIME type.
        - `filename` string, nullable, required — The uploaded file's name.
        - `id` string, nullable, required — The attachment's ID. `null` for a Whop-hosted policy, which is not an uploaded file.
        - `platform` boolean, required — Whether this is Whop's own hosted policy, standing in because the seller uploaded none. Sending it back on a PATCH changes nothing.
        - `url` string, nullable, required — A URL to download the attachment.
      - `cancellation_policy_disclosure` string, nullable, required — How the cancellation policy was shown to the customer before purchase.
      - `customer_communication_attachment` DisputeAttachment, required
        - `content_type` string, nullable, required — The uploaded file's MIME type.
        - `filename` string, nullable, required — The uploaded file's name.
        - `id` string, nullable, required — The attachment's ID. `null` for a Whop-hosted policy, which is not an uploaded file.
        - `platform` boolean, required — Whether this is Whop's own hosted policy, standing in because the seller uploaded none. Sending it back on a PATCH changes nothing.
        - `url` string, nullable, required — A URL to download the attachment.
      - `customer_email_address` string, nullable, required — The email address the customer used at checkout.
      - `customer_name` string, nullable, required — The customer's name as given at checkout.
      - `notes` string, nullable, required — Any additional context for the processor reviewing the dispute.
      - `product_description` string, nullable, required — What the customer purchased, in the seller's own words.
      - `refund_policy_attachment` DisputeAttachment, required
        - `content_type` string, nullable, required — The uploaded file's MIME type.
        - `filename` string, nullable, required — The uploaded file's name.
        - `id` string, nullable, required — The attachment's ID. `null` for a Whop-hosted policy, which is not an uploaded file.
        - `platform` boolean, required — Whether this is Whop's own hosted policy, standing in because the seller uploaded none. Sending it back on a PATCH changes nothing.
        - `url` string, nullable, required — A URL to download the attachment.
      - `refund_policy_disclosure` string, nullable, required — How the refund policy was shown to the customer before purchase.
      - `refund_refusal_explanation` string, nullable, required — Why a refund was refused, when one was requested and denied.
      - `service_date` string, nullable, required — When the product or service was delivered.
      - `uncategorized_attachment` DisputeAttachment, required
        - `content_type` string, nullable, required — The uploaded file's MIME type.
        - `filename` string, nullable, required — The uploaded file's name.
        - `id` string, nullable, required — The attachment's ID. `null` for a Whop-hosted policy, which is not an uploaded file.
        - `platform` boolean, required — Whether this is Whop's own hosted policy, standing in because the seller uploaded none. Sending it back on a PATCH changes nothing.
        - `url` string, nullable, required — A URL to download the attachment.
    - `evidence_due_at` string, nullable, required — The deadline to submit evidence, as an ISO 8601 timestamp. Whop reserves the last 24 hours before the processor's own cutoff to forward the submission.
    - `evidence_editable` boolean, required — Whether `evidence` can still be changed and submitted.
    - `evidence_locked_reason` 'submitted' | 'response_window_closed' | 'not_contestable' | 'null', nullable, required — Why evidence can no longer be edited. `null` while `evidence_editable` is true.
    - `evidence_submitted_at` string, nullable, required — When the evidence was submitted to the processor, as an ISO 8601 timestamp.
    - `id` string, required — Dispute ID, prefixed `dspt_`.
    - `inquiry` boolean, required — Whether this is a pre-dispute inquiry rather than a formal chargeback. Inquiries follow the same lifecycle but move no funds unless one escalates.
    - `issuer_comments` DisputeIssuerComment[], required
      - `received_at` string, nullable, required — When the comment was received, as an ISO 8601 timestamp.
      - `text` string, required — What the issuer wrote, as received.
    - `payment` DisputePayment, required
      - `amount` number, nullable, required — What the customer was charged, in whole units of the payment's currency.
      - `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.
      - `currency` string, nullable, required — Three-letter ISO currency code of the payment. Can differ from the dispute's currency when the processor settles in another currency.
      - `id` string, required — Payment ID, prefixed `pay_`.
      - `payment_method_type` string, nullable, required — How the customer paid, such as `card` or `paypal`.
      - `payment_processor` string, nullable, required — The processor that handled the payment, such as `stripe`.
    - `plan_id` string, nullable, required — The plan the disputed payment was made on, prefixed `plan_`.
    - `product_id` string, nullable, required — The product the disputed payment was for, prefixed `prod_`.
    - `rapid_dispute_resolution` boolean, required — Whether Visa Rapid Dispute Resolution settled this automatically. These refund the customer without an evidence round.
    - `reason` 'fraudulent' | 'unrecognized' | 'declined_authorization' | 'product_not_received' | 'product_unacceptable' | 'subscription_canceled' | 'credit_not_processed' | 'duplicate' | 'processing_error' | 'documentation_request' | 'bank_cannot_process' | 'other', required — Why the customer says they are disputing, normalized across card networks. `other` covers a code Whop has not categorized yet — read `reason_code` for the raw value.
    - `reason_code` string, nullable, required — The raw card-network or processor reason code, such as `10.4`.
    - `status` 'needs_response' | 'under_review' | 'won' | 'lost' | 'closed', required — Where the dispute stands. `needs_response` is awaiting evidence, `under_review` is with the processor, `won` returned the funds to the seller, `lost` returned them to the customer, and `closed` ended without a ruling.
    - `updated_at` string, required — When the dispute was last changed, as an ISO 8601 timestamp.
  - `id` string, required — A unique ID for every single webhook request
  - `timestamp` string, date-time, required — The timestamp in ISO 8601 format that the webhook was sent at on the server
  - `type` 'dispute.created', required — The webhook event type

## Acknowledgement `200`

Return a 200 status to indicate that the data was received successfully

---

[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)
