import Whop from '@whop/sdk';
const client = new Whop({
apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted
});
const dispute = await client.disputes.update('id');
console.log(dispute.id);curl --request PATCH \
--url https://api.whop.com/api/v1/disputes/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"evidence": {
"access_activity_log": "<string>",
"billing_address": "<string>",
"cancellation_policy_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"cancellation_policy_disclosure": "<string>",
"customer_communication_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"customer_email_address": "<string>",
"customer_name": "<string>",
"notes": "<string>",
"product_description": "<string>",
"refund_policy_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"refund_policy_disclosure": "<string>",
"refund_refusal_explanation": "<string>",
"service_date": "<string>",
"uncategorized_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
}
}
}
'import requests
url = "https://api.whop.com/api/v1/disputes/{id}"
payload = { "evidence": {
"access_activity_log": "<string>",
"billing_address": "<string>",
"cancellation_policy_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"cancellation_policy_disclosure": "<string>",
"customer_communication_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"customer_email_address": "<string>",
"customer_name": "<string>",
"notes": "<string>",
"product_description": "<string>",
"refund_policy_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"refund_policy_disclosure": "<string>",
"refund_refusal_explanation": "<string>",
"service_date": "<string>",
"uncategorized_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.whop.com/api/v1/disputes/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'evidence' => [
'access_activity_log' => '<string>',
'billing_address' => '<string>',
'cancellation_policy_attachment' => [
'direct_upload_id' => '<string>',
'id' => '<string>'
],
'cancellation_policy_disclosure' => '<string>',
'customer_communication_attachment' => [
'direct_upload_id' => '<string>',
'id' => '<string>'
],
'customer_email_address' => '<string>',
'customer_name' => '<string>',
'notes' => '<string>',
'product_description' => '<string>',
'refund_policy_attachment' => [
'direct_upload_id' => '<string>',
'id' => '<string>'
],
'refund_policy_disclosure' => '<string>',
'refund_refusal_explanation' => '<string>',
'service_date' => '<string>',
'uncategorized_attachment' => [
'direct_upload_id' => '<string>',
'id' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.whop.com/api/v1/disputes/{id}"
payload := strings.NewReader("{\n \"evidence\": {\n \"access_activity_log\": \"<string>\",\n \"billing_address\": \"<string>\",\n \"cancellation_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"cancellation_policy_disclosure\": \"<string>\",\n \"customer_communication_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"customer_email_address\": \"<string>\",\n \"customer_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"product_description\": \"<string>\",\n \"refund_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"refund_policy_disclosure\": \"<string>\",\n \"refund_refusal_explanation\": \"<string>\",\n \"service_date\": \"<string>\",\n \"uncategorized_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n }\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.whop.com/api/v1/disputes/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"evidence\": {\n \"access_activity_log\": \"<string>\",\n \"billing_address\": \"<string>\",\n \"cancellation_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"cancellation_policy_disclosure\": \"<string>\",\n \"customer_communication_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"customer_email_address\": \"<string>\",\n \"customer_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"product_description\": \"<string>\",\n \"refund_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"refund_policy_disclosure\": \"<string>\",\n \"refund_refusal_explanation\": \"<string>\",\n \"service_date\": \"<string>\",\n \"uncategorized_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.whop.com/api/v1/disputes/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"evidence\": {\n \"access_activity_log\": \"<string>\",\n \"billing_address\": \"<string>\",\n \"cancellation_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"cancellation_policy_disclosure\": \"<string>\",\n \"customer_communication_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"customer_email_address\": \"<string>\",\n \"customer_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"product_description\": \"<string>\",\n \"refund_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"refund_policy_disclosure\": \"<string>\",\n \"refund_refusal_explanation\": \"<string>\",\n \"service_date\": \"<string>\",\n \"uncategorized_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"account_id": "<string>",
"amount": 123,
"buyer": {
"email": "<string>",
"member_id": "<string>",
"name": "<string>",
"user_id": "<string>",
"username": "<string>"
},
"created_at": "<string>",
"currency": "<string>",
"evidence": {
"access_activity_log": "<string>",
"billing_address": "<string>",
"cancellation_policy_attachment": {
"content_type": "<string>",
"filename": "<string>",
"id": "<string>",
"platform": true,
"url": "<string>"
},
"cancellation_policy_disclosure": "<string>",
"customer_communication_attachment": {
"content_type": "<string>",
"filename": "<string>",
"id": "<string>",
"platform": true,
"url": "<string>"
},
"customer_email_address": "<string>",
"customer_name": "<string>",
"notes": "<string>",
"product_description": "<string>",
"refund_policy_attachment": {
"content_type": "<string>",
"filename": "<string>",
"id": "<string>",
"platform": true,
"url": "<string>"
},
"refund_policy_disclosure": "<string>",
"refund_refusal_explanation": "<string>",
"service_date": "<string>",
"uncategorized_attachment": {
"content_type": "<string>",
"filename": "<string>",
"id": "<string>",
"platform": true,
"url": "<string>"
}
},
"evidence_due_at": "<string>",
"evidence_editable": true,
"evidence_locked_reason": "submitted",
"evidence_submitted_at": "<string>",
"id": "<string>",
"inquiry": true,
"issuer_comments": [
{
"received_at": "<string>",
"text": "<string>"
}
],
"payment": {
"amount": 123,
"card_brand": "<string>",
"card_last4": "<string>",
"created_at": "<string>",
"currency": "<string>",
"id": "<string>",
"payment_method_type": "<string>",
"payment_processor": "<string>"
},
"plan_id": "<string>",
"product_id": "<string>",
"rapid_dispute_resolution": true,
"reason": "fraudulent",
"reason_code": "<string>",
"status": "needs_response",
"updated_at": "<string>"
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}Update Dispute
Edits a dispute’s evidence, while it is still editable. Sending it is a separate call.
import Whop from '@whop/sdk';
const client = new Whop({
apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted
});
const dispute = await client.disputes.update('id');
console.log(dispute.id);curl --request PATCH \
--url https://api.whop.com/api/v1/disputes/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"evidence": {
"access_activity_log": "<string>",
"billing_address": "<string>",
"cancellation_policy_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"cancellation_policy_disclosure": "<string>",
"customer_communication_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"customer_email_address": "<string>",
"customer_name": "<string>",
"notes": "<string>",
"product_description": "<string>",
"refund_policy_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"refund_policy_disclosure": "<string>",
"refund_refusal_explanation": "<string>",
"service_date": "<string>",
"uncategorized_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
}
}
}
'import requests
url = "https://api.whop.com/api/v1/disputes/{id}"
payload = { "evidence": {
"access_activity_log": "<string>",
"billing_address": "<string>",
"cancellation_policy_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"cancellation_policy_disclosure": "<string>",
"customer_communication_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"customer_email_address": "<string>",
"customer_name": "<string>",
"notes": "<string>",
"product_description": "<string>",
"refund_policy_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
},
"refund_policy_disclosure": "<string>",
"refund_refusal_explanation": "<string>",
"service_date": "<string>",
"uncategorized_attachment": {
"direct_upload_id": "<string>",
"id": "<string>"
}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.whop.com/api/v1/disputes/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'evidence' => [
'access_activity_log' => '<string>',
'billing_address' => '<string>',
'cancellation_policy_attachment' => [
'direct_upload_id' => '<string>',
'id' => '<string>'
],
'cancellation_policy_disclosure' => '<string>',
'customer_communication_attachment' => [
'direct_upload_id' => '<string>',
'id' => '<string>'
],
'customer_email_address' => '<string>',
'customer_name' => '<string>',
'notes' => '<string>',
'product_description' => '<string>',
'refund_policy_attachment' => [
'direct_upload_id' => '<string>',
'id' => '<string>'
],
'refund_policy_disclosure' => '<string>',
'refund_refusal_explanation' => '<string>',
'service_date' => '<string>',
'uncategorized_attachment' => [
'direct_upload_id' => '<string>',
'id' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.whop.com/api/v1/disputes/{id}"
payload := strings.NewReader("{\n \"evidence\": {\n \"access_activity_log\": \"<string>\",\n \"billing_address\": \"<string>\",\n \"cancellation_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"cancellation_policy_disclosure\": \"<string>\",\n \"customer_communication_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"customer_email_address\": \"<string>\",\n \"customer_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"product_description\": \"<string>\",\n \"refund_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"refund_policy_disclosure\": \"<string>\",\n \"refund_refusal_explanation\": \"<string>\",\n \"service_date\": \"<string>\",\n \"uncategorized_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n }\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.whop.com/api/v1/disputes/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"evidence\": {\n \"access_activity_log\": \"<string>\",\n \"billing_address\": \"<string>\",\n \"cancellation_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"cancellation_policy_disclosure\": \"<string>\",\n \"customer_communication_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"customer_email_address\": \"<string>\",\n \"customer_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"product_description\": \"<string>\",\n \"refund_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"refund_policy_disclosure\": \"<string>\",\n \"refund_refusal_explanation\": \"<string>\",\n \"service_date\": \"<string>\",\n \"uncategorized_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.whop.com/api/v1/disputes/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"evidence\": {\n \"access_activity_log\": \"<string>\",\n \"billing_address\": \"<string>\",\n \"cancellation_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"cancellation_policy_disclosure\": \"<string>\",\n \"customer_communication_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"customer_email_address\": \"<string>\",\n \"customer_name\": \"<string>\",\n \"notes\": \"<string>\",\n \"product_description\": \"<string>\",\n \"refund_policy_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n },\n \"refund_policy_disclosure\": \"<string>\",\n \"refund_refusal_explanation\": \"<string>\",\n \"service_date\": \"<string>\",\n \"uncategorized_attachment\": {\n \"direct_upload_id\": \"<string>\",\n \"id\": \"<string>\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"account_id": "<string>",
"amount": 123,
"buyer": {
"email": "<string>",
"member_id": "<string>",
"name": "<string>",
"user_id": "<string>",
"username": "<string>"
},
"created_at": "<string>",
"currency": "<string>",
"evidence": {
"access_activity_log": "<string>",
"billing_address": "<string>",
"cancellation_policy_attachment": {
"content_type": "<string>",
"filename": "<string>",
"id": "<string>",
"platform": true,
"url": "<string>"
},
"cancellation_policy_disclosure": "<string>",
"customer_communication_attachment": {
"content_type": "<string>",
"filename": "<string>",
"id": "<string>",
"platform": true,
"url": "<string>"
},
"customer_email_address": "<string>",
"customer_name": "<string>",
"notes": "<string>",
"product_description": "<string>",
"refund_policy_attachment": {
"content_type": "<string>",
"filename": "<string>",
"id": "<string>",
"platform": true,
"url": "<string>"
},
"refund_policy_disclosure": "<string>",
"refund_refusal_explanation": "<string>",
"service_date": "<string>",
"uncategorized_attachment": {
"content_type": "<string>",
"filename": "<string>",
"id": "<string>",
"platform": true,
"url": "<string>"
}
},
"evidence_due_at": "<string>",
"evidence_editable": true,
"evidence_locked_reason": "submitted",
"evidence_submitted_at": "<string>",
"id": "<string>",
"inquiry": true,
"issuer_comments": [
{
"received_at": "<string>",
"text": "<string>"
}
],
"payment": {
"amount": 123,
"card_brand": "<string>",
"card_last4": "<string>",
"created_at": "<string>",
"currency": "<string>",
"id": "<string>",
"payment_method_type": "<string>",
"payment_processor": "<string>"
},
"plan_id": "<string>",
"product_id": "<string>",
"rapid_dispute_resolution": true,
"reason": "fraudulent",
"reason_code": "<string>",
"status": "needs_response",
"updated_at": "<string>"
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}Authorizations
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
Pins the request to a dated API version.
"2026-08-05-1"
Path Parameters
The dispute ID (dspt_ tag).
Body
The evidence packet to send to the processor. Only the fields you provide are changed.
Show child attributes
Show child attributes
Response
dispute updated
The account the dispute was filed against, prefixed biz_.
The disputed amount, in whole units of currency.
The customer who filed the dispute.
Show child attributes
Show child attributes
When the dispute was opened, as an ISO 8601 timestamp.
Three-letter ISO currency code of the disputed amount.
The evidence packet sent to the processor to contest the dispute.
Show child attributes
Show child attributes
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.
Whether evidence can still be changed and submitted.
Why evidence can no longer be edited. null while evidence_editable is true.
submitted, response_window_closed, not_contestable, null "submitted"
When the evidence was submitted to the processor, as an ISO 8601 timestamp.
Dispute ID, prefixed dspt_.
Whether this is a pre-dispute inquiry rather than a formal chargeback. Inquiries follow the same lifecycle but move no funds unless one escalates.
Show child attributes
Show child attributes
The payment being disputed.
Show child attributes
Show child attributes
The plan the disputed payment was made on, prefixed plan_.
The product the disputed payment was for, prefixed prod_.
Whether Visa Rapid Dispute Resolution settled this automatically. These refund the customer without an evidence round.
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.
fraudulent, unrecognized, declined_authorization, product_not_received, product_unacceptable, subscription_canceled, credit_not_processed, duplicate, processing_error, documentation_request, bank_cannot_process, other "fraudulent"
The raw card-network or processor reason code, such as 10.4.
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.
needs_response, under_review, won, lost, closed "needs_response"
When the dispute was last changed, as an ISO 8601 timestamp.

