curl --request POST \
--url https://b2b-api-sandbox.easyonramp.com/api/v1/cards/transactions/{transactionId}/dispute \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"disputeType": "fraud",
"disputeReasonCode": "otherFraudCardAbsent",
"textEvidence": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
disputeType: 'fraud',
disputeReasonCode: 'otherFraudCardAbsent',
textEvidence: '<string>'
})
};
fetch('https://b2b-api-sandbox.easyonramp.com/api/v1/cards/transactions/{transactionId}/dispute', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://b2b-api-sandbox.easyonramp.com/api/v1/cards/transactions/{transactionId}/dispute"
payload = {
"disputeType": "fraud",
"disputeReasonCode": "otherFraudCardAbsent",
"textEvidence": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://b2b-api-sandbox.easyonramp.com/api/v1/cards/transactions/{transactionId}/dispute"
payload := strings.NewReader("{\n \"disputeType\": \"fraud\",\n \"disputeReasonCode\": \"otherFraudCardAbsent\",\n \"textEvidence\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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))
}{
"id": "880e8400-e29b-41d4-a716-446655440099",
"transactionId": "770e8400-e29b-41d4-a716-446655440011",
"status": "pending",
"disputeAmount": 123,
"createdAt": "<string>",
"reviewedBy": "rain",
"disputeType": "fraud",
"disputeReasonCode": "emvLiabilityShiftCounterfeitFraud",
"textEvidence": "<string>",
"currency": "<string>",
"updatedAt": "<string>",
"resolvedAt": "<string>",
"filedWithNetworkAt": "<string>",
"hasFileEvidence": true,
"attachmentCount": 1
}Create a dispute for a transaction
File a dispute for a settled card transaction that belongs to your business. The transaction id is the id from GET /cards/transactions or the transactionId from a card.transaction webhook. The transaction must be completed, have a posted time, and have a non-zero amount. The disputed amount is the full transaction amount. When disputeType and disputeReasonCode are both sent, they must agree.
curl --request POST \
--url https://b2b-api-sandbox.easyonramp.com/api/v1/cards/transactions/{transactionId}/dispute \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"disputeType": "fraud",
"disputeReasonCode": "otherFraudCardAbsent",
"textEvidence": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
disputeType: 'fraud',
disputeReasonCode: 'otherFraudCardAbsent',
textEvidence: '<string>'
})
};
fetch('https://b2b-api-sandbox.easyonramp.com/api/v1/cards/transactions/{transactionId}/dispute', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://b2b-api-sandbox.easyonramp.com/api/v1/cards/transactions/{transactionId}/dispute"
payload = {
"disputeType": "fraud",
"disputeReasonCode": "otherFraudCardAbsent",
"textEvidence": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://b2b-api-sandbox.easyonramp.com/api/v1/cards/transactions/{transactionId}/dispute"
payload := strings.NewReader("{\n \"disputeType\": \"fraud\",\n \"disputeReasonCode\": \"otherFraudCardAbsent\",\n \"textEvidence\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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))
}{
"id": "880e8400-e29b-41d4-a716-446655440099",
"transactionId": "770e8400-e29b-41d4-a716-446655440011",
"status": "pending",
"disputeAmount": 123,
"createdAt": "<string>",
"reviewedBy": "rain",
"disputeType": "fraud",
"disputeReasonCode": "emvLiabilityShiftCounterfeitFraud",
"textEvidence": "<string>",
"currency": "<string>",
"updatedAt": "<string>",
"resolvedAt": "<string>",
"filedWithNetworkAt": "<string>",
"hasFileEvidence": true,
"attachmentCount": 1
}Authorizations
Bearer JWT issued to your business account during onboarding
Path Parameters
Body
Broad dispute category. When omitted, the card issuer derives it from disputeReasonCode.
fraud, creditNotProcessed, serviceNotReceived, merchandiseIssue, other "fraud"
Reason code for the dispute. When both this and disputeType are sent, they must agree.
emvLiabilityShiftCounterfeitFraud, emvLiabilityShiftNonCounterfeitFraud, otherFraudCardPresent, otherFraudCardAbsent, visaFraudMonitoringProgram, cardRecoveryBulletin, declinedAuthorization, noAuthorization, incorrectTransactionCode, incorrectCurrency, incorrectAccountNumber, incorrectAmount, duplicateProcessing, invalidData, merchandiseServicesNotReceived, cancelledRecurringTransaction, notAsDescribedOrDefective, counterfeitMerchandise, misrepresentation, creditNotProcessed, cancelledMerchandiseServices, originalCreditTransactionNotAccepted, nonReceiptOfCashAtm "otherFraudCardAbsent"
Written evidence for the dispute
65535Response
"880e8400-e29b-41d4-a716-446655440099"
Transaction id from the request path
"770e8400-e29b-41d4-a716-446655440011"
pending, inReview, accepted, rejected, canceled, resolvedByMerchant Disputed amount in cents
rain, network fraud, creditNotProcessed, serviceNotReceived, merchandiseIssue, other emvLiabilityShiftCounterfeitFraud, emvLiabilityShiftNonCounterfeitFraud, otherFraudCardPresent, otherFraudCardAbsent, visaFraudMonitoringProgram, cardRecoveryBulletin, declinedAuthorization, noAuthorization, incorrectTransactionCode, incorrectCurrency, incorrectAccountNumber, incorrectAmount, duplicateProcessing, invalidData, merchandiseServicesNotReceived, cancelledRecurringTransaction, notAsDescribedOrDefective, counterfeitMerchandise, misrepresentation, creditNotProcessed, cancelledMerchandiseServices, originalCreditTransactionNotAccepted, nonReceiptOfCashAtm Lowercase ISO-4217 currency code
x >= 0