To verify your Disputes API integration, you can test a chargeback scenario. First, you create a test payment with a chargeback reason of your choice. Then, you capture that transaction and wait for the webhook. When you receive the webhook, the chargeback is created and you can use the information from your test transaction to test the Disputes API.
If you're looking to test a Klarna dispute scenario, refer to the Klarna dispute guidelines.
-
In your test environment, submit a payment request with the
holderName
set to any of the following values, depending on the scenario you want to simulate:- Chargeback:{reason_code}: A chargeback with a specific reason code. For a list of available reason codes, refer to Dispute reason codes.
You may have to temporarily disable or lower the risk score for the Card/bank account holder name contains a non-alphabetic character risk check.
- Chargeback: A chargeback without an explicit reason code.
- Chargeback Reversed: A ChargebackReversed status without an explicit reason code.
- Second Chargeback: A SecondChargeback status without an explicit reason code.
For example, submit the /payments request below to simulate a chargeback with reason code 10.4:
curl https://checkout-test.adyen.com/v68/payments -H 'x-api-key: YOUR_API_KEY' \ -H 'content-type: application/json' \ -d '{ "amount": { "currency": "EUR", "value": 1000 }, "reference": "YOUR_ORDER_NUMBER", "{hint:If you are using the /authorise endpoint, change the object to card}paymentMethod{/hint}": { "type": "scheme", "encryptedCardNumber": "test_4111111111111111", "encryptedExpiryMonth": "test_03", "encryptedExpiryYear": "test_2030", "encryptedSecurityCode": "test_737", "holderName": "chargeback:10.4" }, "returnUrl": "https://your-company.com/...", "merchantAccount": "YOUR_MERCHANT_ACCOUNT" }'
You receive a response containing
pspReference
, our unique identifier for the payment. - Chargeback:{reason_code}: A chargeback with a specific reason code. For a list of available reason codes, refer to Dispute reason codes.
-
Capture the payment with a /payments/paymentPspReference/captures request, specifying:
paymentPspReference
: ThepspReference
of the payment you're capturing.amount
: Thevalue
andcurrency
specified in the payment request.
curl https://checkout-test.adyen.com/v68/payments/{paymentPspReference}/captures \ -H 'x-api-key: YOUR_API_KEY' \ -H 'content-type: application/json' \ -d '{ "merchantAccount": "YOUR_MERCHANT_ACCOUNT", "amount": { "currency": "EUR", "value": 1000 }, "reference": "YOUR_UNIQUE_REFERENCE" }'
You receive a response containing:
pspReference
: The PSP reference associated with this capture request. Note that this is different from the PSP reference associated with the original payment request.
The payment will then go through SentforSettle, Settled, and finally the Chargeback status. This process can take up to 24 hours to complete.
-
Wait for the webhook. In this example, you will receive a NOTIFICATION_OF_CHARGEBACK. This webhook contains a
pspReference
, which is the unique identifier for the dispute. For example:{ "live":"false", "notificationItems":[ { "NotificationRequestItem":{ "additionalData":{ "chargebackReasonCode":"10.4", "modificationMerchantReferences":"", "chargebackSchemeCode":"visa", "defensePeriodEndsAt":"2021-11-29T01:30:57+01:00", "autoDefended":"false", "defendable" : "true", "disputeStatus":"Undefended" }, "amount":{ "currency":"EUR", "value":1000 }, "eventCode":"NOTIFICATION_OF_CHARGEBACK", "eventDate":"2021-11-11T01:30:57+01:00", "merchantAccountCode":"YOUR_MERCHANT_ACCOUNT", "merchantReference":"YOUR_REFERENCE", "originalReference":"8515785619639602", "paymentMethod":"visa", "pspReference":"9915555555555555", "reason":"Other Fraud-Card Absent Environment", "success":"true" } } ] }
-
After the chargeback is created, use the Disputes API and follow the steps to retrieve defense reasons request, upload dispute defense documents, and defend the dispute.