Retrieve Rapid Dispute Resolutions via API
Retrieve pre-dispute data using the RDR API to stay ahead of chargebacks and improve resolution efficiency.
Learn how to use the Rapid Dispute Resolution (RDR) API to retrieve and manage data about pre-dispute events initiated through Visa’s Verifi platform. RDR helps reduce chargebacks by allowing merchants to auto-accept liability and automatically refund the cardholder.
You can retrieve RDR data:
- By ARN or original transaction unique ID
- As a full list of RDR events per transaction
- For a date range (paginated)
What is Rapid Dispute Resolution?
Rapid Dispute Resolution (RDR) is Visa’s pre-dispute program, now fully integrated into VROL and mandatory for issuers before a chargeback can be raised. You can enroll via Verifi and define auto-liability acceptance rules. If an RDR match occurs and liability is accepted, the cardholder is refunded and the funds are withdrawn from the acquirer account. By enabling RDR, you can effectively avoid chargebacks and reduce the risk of breaching the thresholds set by the Visa Acquirer Monitoring Program (VAMP).
Retrieve a single Rapid Dispute Resolution
You can retrieve a single RDR by providing either:
- The
ARN
(Acquirer Reference Number), or - The
original_transaction_unique_id
Request parameters
Parameter | Required | Format | Description |
---|---|---|---|
arn |
Yes* | string (255) | Acquirer Reference Number of the chargeback |
original_transaction_unique_id |
Yes* | string (255) | Unique ID of the original transaction |
Request example
<rapid_dispute_resolution_request>
<arn>74537604221431003881865</arn>
</rapid_dispute_resolution_request>
Retrieve all RDR events for a transaction
To retrieve all RDR events related to a single transaction (e.g. RDR, RDR reversal, RDR transfers), use the
Request example
<rapid_dispute_resolution_request>
<original_transaction_unique_id>53b1f5eacc9e4d3a3afebb4e993fe962</original_transaction_unique_id>
<mode>list</mode>
</rapid_dispute_resolution_request>
Retrieve Rapid Dispute Resolutions by date range
Use this method to retrieve all RDR events posted within a specified date range. The results are paginated (up to 100 entries per page).
Request parameters
Parameter | Required | Format | Description |
---|---|---|---|
start_date |
Yes | yyyy-mm-dd | Start of the requested date range |
end_date |
No | yyyy-mm-dd | End of the requested date range |
import_date |
No | yyyy-mm-dd | Optional filter by RDR import date |
page |
No | integer | Page number (default: 1) |
per_page |
No | integer | Results per page (default: 100) |
externally_processed |
No | string | Filter by processing source: genesis, external, or all |
processing_type |
No | string | Filter by channel: card_present, card_not_present, or all |
Request example
<rapid_dispute_resolution_request>
<start_date>2025-05-01</start_date>
<end_date>2025-05-31</end_date>
<processing_type>card_not_present</processing_type>
<page>1</page>
</rapid_dispute_resolution_request>
XML response example
<rapid_dispute_resolution_response>
<type>RDR Pre-dispute</type>
<post_date>2025-05-12</post_date>
<reason_code>4855</reason_code>
<reason_description>Non-receipt of merchandise</reason_description>
<rdr_amount>300.00</rdr_amount>
<rdr_currency>EUR</rdr_currency>
<card_number>554960******5069</card_number>
<arn>74537604221431003881865</arn>
<card_brand>master</card_brand>
<customer_email>john_doe@example.com</customer_email>
<customer_phone>3598851248512</customer_phone>
<transaction_type>sale3d</transaction_type>
<original_transaction_unique_id>f9634ec5e7db…</original_transaction_unique_id>
<original_transaction_amount>200.00</original_transaction_amount>
<original_transaction_currency>EUR</original_transaction_currency>
<original_transaction_merchant_transaction_id>12345</original_transaction_merchant_transaction_id>
</rapid_dispute_resolution_response>
Response parameters
Parameter | Format | Description |
---|---|---|
type |
string | RDR event type (e.g. RDR Pre-dispute) |
post_date |
string | Date the RDR event was posted |
reason_code |
string | RDR reason code |
reason_description |
string | Description of the reason code |
rdr_amount |
float | Disputed amount as reported by issuer |
rdr_currency |
string (3) | Currency of the disputed amount (ISO 4217) |
card_number |
string | Masked card number |
arn |
string | Acquirer Reference Number |
card_brand |
string | Card scheme (Visa, Mastercard) |
customer_email |
string | Email address of the cardholder |
customer_phone |
integer | Phone number of the cardholder |
transaction_type |
string | Transaction type (e.g. sale3d) |
original_transaction_unique_id |
string | Unique ID of the original transaction |
original_transaction_amount |
string | Amount of the original transaction |
original_transaction_currency |
string | Currency of the original transaction |
original_transaction_merchant_transaction_id |
string | Merchant reference ID |
RDR event types
Type | Description |
---|---|
RDR Pre-dispute | Initial RDR before a chargeback is raised |
RDR Pre-dispute Reversal | Issuer reverses a previously accepted RDR |
RDR Transfer to Payment Account Retail | Funds transferred from merchant account to issuer |
RDR Transfer to Merchant Hold Account | Funds withdrawn from merchant hold account |
RDR Transfer to Write-off Acq | Acquirer assumes loss for the RDR |
RDR Transfer to Write-off SP | Service Provider assumes loss for the RDR |
Error response
If no RDR is found for the given ARN or unique ID, the API returns the following:
<rapid_dispute_resolution_response>
<status>error</status>
<code>471</code>
<message>Rapid Dispute Resolution not found!</message>
<technical_message>Rapid Dispute Resolution by the given criteria cannot be found!</technical_message>
</rapid_dispute_resolution_response>