Raise a Dispute
Raises a formal dispute for a specific transaction on behalf of a cardholder. The dispute is submitted to the card network for investigation and resolution.
How It Works
- Identify the Transaction: Get the transaction details from the Transaction History API
- Select Reason Code: Use the Fetch Reason Codes API to get applicable codes for the card network
- Submit Dispute: Call this API with the transaction details and reason code
- Track Status: A complaint ID is returned for tracking; use webhooks for status updates
Key Business Rules
- Each transaction can only be disputed once (duplicate disputes are rejected)
- The
reasonIdmust be valid for the card's network type - The
customerIdentificationIdshould be the cardholder's entity ID or unique customer ID - Transaction details (
transactionDtls) must include the original transaction identifier (tranId) - The dispute amount can be equal to or less than the original transaction amount
- Disputes must be raised within the network-specific time limit (typically 120 days from transaction)
Required Fields in Transaction Details
The transactionDtls object requires at minimum:
tranId: Original transaction ID (from transaction history)tranAmt: Original transaction amountdisputeAmt: Amount being disputed (≤ transaction amount)custMobile: Cardholder's mobile numberentityId: Cardholder's entity IDkitNo: Card kit number
Authorization
bearerAuth tenantId JWT Bearer token from the Authentication API
In: header
Your unique tenant identifier assigned during onboarding
In: header
Header Parameters
Your unique tenant identifier
Request Body
application/json
Dispute details including reason code and original transaction information
Required. The entity ID or unique customer identifier of the cardholder filing the dispute. This links the dispute to the correct customer record.
1 <= lengthFree-text description of the dispute from the cardholder's perspective. Include details like what happened, when it was noticed, and any communication with the merchant.
Required. The reason code ID from the Fetch Reason Codes API. Must be a valid
reason code for the specified network. Example: 40 for "Merchandise/Services Not Received" (VISA).
Required. The card network identifier: 1=VISA, 2=RuPay, 3=UPI, 4=NETC, 5=NFS, 6=Mastercard. Must match the network of the card used in the original transaction.
Optional external ticket/reference number from your helpdesk or CRM system. Useful for cross-referencing the dispute with your internal support workflow.
Complaint identifier associated with the dispute
Current status of the dispute
Required. Details of the original transaction being disputed. Most fields can be obtained from the Transaction History API response.
Reference transactions related to the dispute (e.g., partial refunds)
Client identifier for the dispute
Card network configuration for the dispute
"VISA" | "RUPAY" | "UPI" | "NFS" | "NETC" | "MASTERCARD"Set to true to use the enhanced reconciliation payload format.
Recommended for new integrations.
Cardholder's mobile number (optional, for additional validation)
Response Body
application/json
application/json
application/json
curl -X POST "https://sandbox-api.m2pprepaid.com/prepaid/corporate/v1/disputes/" \ -H "X-TENANT-ID: ACME_CORP" \ -H "Content-Type: application/json" \ -d '{ "customerIdentificationId": "798782647420001622070825", "description": "Paid at store but goods were never delivered", "reasonId": 40, "networkId": 1, "incomingTicketId": "TICKET_2024_001", "enableNewReconPayload": true, "transactionDtls": { "entityId": "798782647420001622070825", "kitNo": "910000031", "tranId": "702959034", "tranAmt": "2500.00", "disputeAmt": "2500.00", "disputeCurrency": "356", "transactionCurrency": "356", "channel": "POS", "merchantName": "ABC Electronics Store", "custMobile": "9876543210", "custEmailId": "rajesh.kumar@email.com", "txnOn": "2025-01-15 10:30:00", "maskedCardNumber": "5231XXXXXXXX0015", "rrn": "682246275971" } }'{
"result": [
{
"id": 136,
"complaintId": "24112515053662",
"disputeAmount": "2500.00",
"disputeCurrency": "356",
"reasonId": 40,
"networkId": 1,
"actionEntry": 1,
"expiryDate": "2026-02-22 09:35:36",
"raisedDate": "2025-11-24 09:35:36"
}
],
"pagination": null
}{
"type": "https://www.m2pfintech.com/problem/problem-with-message",
"title": "Bad Request",
"status": 400,
"detail": "customerIdentificationId: must not be empty",
"message": "error.http.400"
}A dispute has already been raised for this transaction
{
"type": "https://www.m2pfintech.com/problem/problem-with-message",
"title": "Duplicate Dispute Transaction Registration Attempt!",
"status": 409,
"detail": "Duplicate Dispute Transaction Registration Attempt!",
"message": "error.business",
"businessCode": "50009"
}Fetch Dispute Reason Codes by Client and Network POST
Fetches dispute reason codes filtered by client ID and network.
Upload Dispute Document POST
Uploads a supporting document for an existing dispute. Accepts file uploads via multipart form data. ### Supported File Types - PDF, JPEG, PNG - Maximum file size: 10 MB
