curl --request POST \
--url https://api.example.com/api/v1/chargeback/update \
--header 'Content-Type: application/json' \
--data '
{
"merchantId": 1000000201,
"chargebackId": "<string>",
"message": {
"notes": "<string>",
"documents": "1766043193910/receipt.pdf,1766043201234/tracking.png"
},
"evidence": {
"othersText": "<string>",
"othersFile": "1766043210001/signature.jpg"
}
}
'import requests
url = "https://api.example.com/api/v1/chargeback/update"
payload = {
"merchantId": 1000000201,
"chargebackId": "<string>",
"message": {
"notes": "<string>",
"documents": "1766043193910/receipt.pdf,1766043201234/tracking.png"
},
"evidence": {
"othersText": "<string>",
"othersFile": "1766043210001/signature.jpg"
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
merchantId: 1000000201,
chargebackId: '<string>',
message: {
notes: '<string>',
documents: '1766043193910/receipt.pdf,1766043201234/tracking.png'
},
evidence: {othersText: '<string>', othersFile: '1766043210001/signature.jpg'}
})
};
fetch('https://api.example.com/api/v1/chargeback/update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/chargeback/update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'merchantId' => 1000000201,
'chargebackId' => '<string>',
'message' => [
'notes' => '<string>',
'documents' => '1766043193910/receipt.pdf,1766043201234/tracking.png'
],
'evidence' => [
'othersText' => '<string>',
'othersFile' => '1766043210001/signature.jpg'
]
]),
CURLOPT_HTTPHEADER => [
"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.example.com/api/v1/chargeback/update"
payload := strings.NewReader("{\n \"merchantId\": 1000000201,\n \"chargebackId\": \"<string>\",\n \"message\": {\n \"notes\": \"<string>\",\n \"documents\": \"1766043193910/receipt.pdf,1766043201234/tracking.png\"\n },\n \"evidence\": {\n \"othersText\": \"<string>\",\n \"othersFile\": \"1766043210001/signature.jpg\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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.post("https://api.example.com/api/v1/chargeback/update")
.header("Content-Type", "application/json")
.body("{\n \"merchantId\": 1000000201,\n \"chargebackId\": \"<string>\",\n \"message\": {\n \"notes\": \"<string>\",\n \"documents\": \"1766043193910/receipt.pdf,1766043201234/tracking.png\"\n },\n \"evidence\": {\n \"othersText\": \"<string>\",\n \"othersFile\": \"1766043210001/signature.jpg\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/chargeback/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"merchantId\": 1000000201,\n \"chargebackId\": \"<string>\",\n \"message\": {\n \"notes\": \"<string>\",\n \"documents\": \"1766043193910/receipt.pdf,1766043201234/tracking.png\"\n },\n \"evidence\": {\n \"othersText\": \"<string>\",\n \"othersFile\": \"1766043210001/signature.jpg\"\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "success",
"data": {
"chargebackId": "<string>",
"originalOrderId": "<string>",
"originalPaymentRequestId": "<string>",
"merchantId": "<string>",
"merchantOrderId": "<string>",
"lifeCycle": "<string>",
"relevantChargebackId": "<string>",
"chargebackStatus": "<string>",
"amount": "<string>",
"currency": "<string>",
"feeAmount": "<string>",
"feeCurrency": "<string>",
"reasonCode": "<string>",
"reason": "<string>",
"description": "<string>",
"chargebackDateTime": "<string>",
"expiryDateTime": "<string>",
"merchantUserId": "<string>",
"subscriptionInfo": {
"subscriptionId": "<string>",
"period": "<string>",
"merchantRequest": "<string>",
"subscriptionRequest": "<string>"
},
"message": {
"messageId": "<string>",
"notes": "<string>",
"documents": "1766043193910/receipt.pdf,1766043201234/tracking.png"
},
"evidence": {}
}
}Chargeback update
Submit defense evidence in First Cycle, or defend the case in Second Cycle. Note: in First Cycle at least one evidence file is required, supplied through message.documents or evidence.othersFile; in Second Cycle the call itself defends the case and evidence is not accepted. On success the status becomes UNDER_REVIEW.
curl --request POST \
--url https://api.example.com/api/v1/chargeback/update \
--header 'Content-Type: application/json' \
--data '
{
"merchantId": 1000000201,
"chargebackId": "<string>",
"message": {
"notes": "<string>",
"documents": "1766043193910/receipt.pdf,1766043201234/tracking.png"
},
"evidence": {
"othersText": "<string>",
"othersFile": "1766043210001/signature.jpg"
}
}
'import requests
url = "https://api.example.com/api/v1/chargeback/update"
payload = {
"merchantId": 1000000201,
"chargebackId": "<string>",
"message": {
"notes": "<string>",
"documents": "1766043193910/receipt.pdf,1766043201234/tracking.png"
},
"evidence": {
"othersText": "<string>",
"othersFile": "1766043210001/signature.jpg"
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
merchantId: 1000000201,
chargebackId: '<string>',
message: {
notes: '<string>',
documents: '1766043193910/receipt.pdf,1766043201234/tracking.png'
},
evidence: {othersText: '<string>', othersFile: '1766043210001/signature.jpg'}
})
};
fetch('https://api.example.com/api/v1/chargeback/update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/chargeback/update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'merchantId' => 1000000201,
'chargebackId' => '<string>',
'message' => [
'notes' => '<string>',
'documents' => '1766043193910/receipt.pdf,1766043201234/tracking.png'
],
'evidence' => [
'othersText' => '<string>',
'othersFile' => '1766043210001/signature.jpg'
]
]),
CURLOPT_HTTPHEADER => [
"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.example.com/api/v1/chargeback/update"
payload := strings.NewReader("{\n \"merchantId\": 1000000201,\n \"chargebackId\": \"<string>\",\n \"message\": {\n \"notes\": \"<string>\",\n \"documents\": \"1766043193910/receipt.pdf,1766043201234/tracking.png\"\n },\n \"evidence\": {\n \"othersText\": \"<string>\",\n \"othersFile\": \"1766043210001/signature.jpg\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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.post("https://api.example.com/api/v1/chargeback/update")
.header("Content-Type", "application/json")
.body("{\n \"merchantId\": 1000000201,\n \"chargebackId\": \"<string>\",\n \"message\": {\n \"notes\": \"<string>\",\n \"documents\": \"1766043193910/receipt.pdf,1766043201234/tracking.png\"\n },\n \"evidence\": {\n \"othersText\": \"<string>\",\n \"othersFile\": \"1766043210001/signature.jpg\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/chargeback/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"merchantId\": 1000000201,\n \"chargebackId\": \"<string>\",\n \"message\": {\n \"notes\": \"<string>\",\n \"documents\": \"1766043193910/receipt.pdf,1766043201234/tracking.png\"\n },\n \"evidence\": {\n \"othersText\": \"<string>\",\n \"othersFile\": \"1766043210001/signature.jpg\"\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "success",
"data": {
"chargebackId": "<string>",
"originalOrderId": "<string>",
"originalPaymentRequestId": "<string>",
"merchantId": "<string>",
"merchantOrderId": "<string>",
"lifeCycle": "<string>",
"relevantChargebackId": "<string>",
"chargebackStatus": "<string>",
"amount": "<string>",
"currency": "<string>",
"feeAmount": "<string>",
"feeCurrency": "<string>",
"reasonCode": "<string>",
"reason": "<string>",
"description": "<string>",
"chargebackDateTime": "<string>",
"expiryDateTime": "<string>",
"merchantUserId": "<string>",
"subscriptionInfo": {
"subscriptionId": "<string>",
"period": "<string>",
"merchantRequest": "<string>",
"subscriptionRequest": "<string>"
},
"message": {
"messageId": "<string>",
"notes": "<string>",
"documents": "1766043193910/receipt.pdf,1766043201234/tracking.png"
},
"evidence": {}
}
}Body
Chargeback evidence submission request. This API serves two scenarios depending on the chargeback's lifeCycle: FIRST_CYCLE (status ACTION_REQUIRED): submit defense evidence. At least one evidence file is required — supply it through message.documents or evidence.othersFile. SECOND_CYCLE (status SECOND_CYCLE_RESPONSE_REQUIRED, Pre-Arbitration): calling this API — even with message and evidence omitted — defends the case. Evidence submission is not supported in Second Cycle, so message and evidence are ignored. On success the chargeback status becomes UNDER_REVIEW. A successful response means the evidence has passed basic validation and has been accepted by Waffo; Waffo then forwards it to the payment channel for review according to the channel's rules. Calls after expiryDateTime are rejected.
Merchant Id assigned by Waffo
641000000201
Waffo chargeback order Id
32Message submitted together with the evidence. message.documents carries the evidence attachments; in FIRST_CYCLE it satisfies the at-least-one-evidence-file requirement, as does evidence.othersFile. Ignored in SECOND_CYCLE.
Show child attributes
Show child attributes
Additional free-form evidence. Fields are merged per field: a field with a non-blank value overwrites the previously submitted value, and a field that is omitted or blank leaves the previously submitted value unchanged. Repeated calls therefore replace a field's content rather than appending to it. Ignored in SECOND_CYCLE.
Show child attributes
Show child attributes
Response
OK
response data
0
"success"
Chargeback detail response. Returned by the chargeback inquiry / update / accept APIs, and used as the result object of the CHARGEBACK_NOTIFICATION webhook. It extends the chargeback list item with the message and evidence objects, which the list API does not return.
Show child attributes
Show child attributes
Was this page helpful?