curl --request POST \
--url https://sg.sandbox.api.reap.global/disputes/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'Reap-Version: <reap-version>' \
--data '
{
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reason": "FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT",
"amount": 100.5,
"contactEmail": "jsmith@example.com"
}
'const options = {
method: 'POST',
headers: {
'Reap-Version': '<reap-version>',
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
transactionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
reason: 'FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT',
amount: 100.5,
contactEmail: 'jsmith@example.com'
})
};
fetch('https://sg.sandbox.api.reap.global/disputes/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sg.sandbox.api.reap.global/disputes/"
payload = {
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reason": "FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT",
"amount": 100.5,
"contactEmail": "jsmith@example.com"
}
headers = {
"Reap-Version": "<reap-version>",
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cardId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "RECEIVED",
"reason": "FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT",
"category": "FRAUD",
"amount": {
"value": 100.5,
"currency": "<string>"
},
"refundedAmount": {
"value": 100.5,
"currency": "<string>"
},
"cardholder": {
"name": "<string>",
"email": "jsmith@example.com",
"contactEmail": "jsmith@example.com"
},
"resolvedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "CARD_DISPUTE_NOT_SUPPORTED_FOR_SIMULATED_TRANSACTION",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "CARD_DISPUTE_TRANSACTION_NOT_FOUND",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "CARD_DISPUTE_ALREADY_EXISTS",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "CARD_DISPUTE_TRANSACTION_NOT_CLEARED",
"message": "<string>",
"detail": {}
}
}File dispute
Files a dispute against a cleared card transaction. Card, cardholder, and currency are derived from the transaction. Status changes arrive as CARD_DISPUTE_STATUS_UPDATED.
curl --request POST \
--url https://sg.sandbox.api.reap.global/disputes/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'Reap-Version: <reap-version>' \
--data '
{
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reason": "FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT",
"amount": 100.5,
"contactEmail": "jsmith@example.com"
}
'const options = {
method: 'POST',
headers: {
'Reap-Version': '<reap-version>',
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
transactionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
reason: 'FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT',
amount: 100.5,
contactEmail: 'jsmith@example.com'
})
};
fetch('https://sg.sandbox.api.reap.global/disputes/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sg.sandbox.api.reap.global/disputes/"
payload = {
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reason": "FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT",
"amount": 100.5,
"contactEmail": "jsmith@example.com"
}
headers = {
"Reap-Version": "<reap-version>",
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cardId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "RECEIVED",
"reason": "FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT",
"category": "FRAUD",
"amount": {
"value": 100.5,
"currency": "<string>"
},
"refundedAmount": {
"value": 100.5,
"currency": "<string>"
},
"cardholder": {
"name": "<string>",
"email": "jsmith@example.com",
"contactEmail": "jsmith@example.com"
},
"resolvedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "CARD_DISPUTE_NOT_SUPPORTED_FOR_SIMULATED_TRANSACTION",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "CARD_DISPUTE_TRANSACTION_NOT_FOUND",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "CARD_DISPUTE_ALREADY_EXISTS",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "CARD_DISPUTE_TRANSACTION_NOT_CLEARED",
"message": "<string>",
"detail": {}
}
}Authorizations
API key as Bearer token
Headers
API version (YYYY-MM-DD)
2025-02-14 "2025-02-14"
Unique key for safely retrying this request. Up to 255 characters; we recommend a UUIDv4. The first request executes and its response is cached; subsequent requests with the same key replay the cached response (24h retention).
1 - 255Body
File a dispute against a cleared card transaction.
The card transaction being disputed
Why the cardholder is disputing the transaction
FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT, FRAUD_EMV_LIABILITY_SHIFT_NON_COUNTERFEIT, FRAUD_OTHER_CARD_PRESENT, FRAUD_OTHER_CARD_ABSENT, FRAUD_VISA_MONITORING_PROGRAM, AUTHORIZATION_CARD_RECOVERY_BULLETIN, AUTHORIZATION_DECLINED, AUTHORIZATION_NO_AUTH_LATE_PRESENTMENT, PROCESSING_ERROR_INCORRECT_TRANSACTION_CODE, PROCESSING_ERROR_INCORRECT_CURRENCY, PROCESSING_ERROR_INCORRECT_ACCOUNT_NUMBER, PROCESSING_ERROR_INCORRECT_AMOUNT, PROCESSING_ERROR_DUPLICATE_PROCESSING, PROCESSING_ERROR_INVALID_DATA, CONSUMER_MERCHANDISE_NOT_RECEIVED, CONSUMER_CANCELLED_RECURRING, CONSUMER_NOT_AS_DESCRIBED, CONSUMER_COUNTERFEIT_MERCHANDISE, CONSUMER_MISREPRESENTATION, CONSUMER_CREDIT_NOT_PROCESSED, CONSUMER_CANCELLED_MERCHANDISE, CONSUMER_ORIGINAL_CREDIT_NOT_ACCEPTED, CONSUMER_NON_RECEIPT_CASH_ATM "FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT"
Cardholder amount under dispute in the billing currency, including FX and ATM fees. Defaults to the full cleared cardholder amount, and may not exceed it.
100.5
1234.99
Address that receives the dispute outcome. Defaults to the cardholder email on file.
^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$Response
Card dispute resource
Unique dispute identifier
The card transaction being disputed
Card used for the disputed transaction
Current dispute status
RECEIVED, REVIEWING, SUBMITTED, WON, LOST, REFUNDED, DECLINED, CANCELED "RECEIVED"
Why the cardholder is disputing the transaction
FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT, FRAUD_EMV_LIABILITY_SHIFT_NON_COUNTERFEIT, FRAUD_OTHER_CARD_PRESENT, FRAUD_OTHER_CARD_ABSENT, FRAUD_VISA_MONITORING_PROGRAM, AUTHORIZATION_CARD_RECOVERY_BULLETIN, AUTHORIZATION_DECLINED, AUTHORIZATION_NO_AUTH_LATE_PRESENTMENT, PROCESSING_ERROR_INCORRECT_TRANSACTION_CODE, PROCESSING_ERROR_INCORRECT_CURRENCY, PROCESSING_ERROR_INCORRECT_ACCOUNT_NUMBER, PROCESSING_ERROR_INCORRECT_AMOUNT, PROCESSING_ERROR_DUPLICATE_PROCESSING, PROCESSING_ERROR_INVALID_DATA, CONSUMER_MERCHANDISE_NOT_RECEIVED, CONSUMER_CANCELLED_RECURRING, CONSUMER_NOT_AS_DESCRIBED, CONSUMER_COUNTERFEIT_MERCHANDISE, CONSUMER_MISREPRESENTATION, CONSUMER_CREDIT_NOT_PROCESSED, CONSUMER_CANCELLED_MERCHANDISE, CONSUMER_ORIGINAL_CREDIT_NOT_ACCEPTED, CONSUMER_NON_RECEIPT_CASH_ATM "FRAUD_EMV_LIABILITY_SHIFT_COUNTERFEIT"
The grouping the reason belongs to
FRAUD, AUTHORIZATION, PROCESSING_ERROR, CONSUMER "FRAUD"
The cardholder amount under dispute, including FX and ATM fees. May be less than the transaction total.
Show child attributes
Show child attributes
Amount credited to the cardholder when the dispute reaches REFUNDED. Includes the network refund plus a prorated FX markup and ATM variable fee. Does not include the per-withdrawal ATM fixed fee, which stays charged. Null until REFUNDED. May be less than the disputed amount. The same credit is recorded as a DISPUTE_REFUND event on the disputed card transaction and delivered in CARD_TRANSACTION_UPDATED; apply balance changes from that event, not from this field.
Show child attributes
Show child attributes
Cardholder identity on the case
Show child attributes
Show child attributes
When the dispute reached a final status, or null while open
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ISO 8601 timestamp of creation
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ISO 8601 timestamp of last update
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$