Contest Dispute
To contest the Dispute using disputedId and contestAmount
Environment
| Environment | Http Method | API |
|---|---|---|
Sandbox | POST | https://api-preprod.phonepe.com/apis/pg-sandbox/v1/disputes/{disputeId}/contest |
Production | POST | https://api.phonepe.com/apis/pg/v1/disputes/{disputeId}/contest |
Request
Request Headers
| Header Name | Header Value |
|---|---|
Content-Type | application/json |
Authorization | O-Bearer <access_token> |
Request Sample
{
"type" : "FULL_CONTEST" or "PARTIAL_CONTEST",
"contestAmount": 500
}Request Parameters
| Request Parameter | Type | Description |
|---|---|---|
type | ENUM | Type of the contest. Note: the possible value could be “FULL_CONTEST” or “PARTIAL_CONTEST” if FULL_CONTEST given we are not checking contest amount, we will assume the merchant done contest for the amount equal to dispute amount |
contestAmount | LONG | The amount for which the user wants to contest (in Paise) Note: This should be greater than 0 and lesser or equal to dispute amount |
Response
Response Parameter
{
"merchantId": "merchantId",
"disputeId": "D29238",
"merchantOrderId": "MO2327",
"orderId": "OMO241",
"transactionId": "OM944",
"transactionCompletedAt": <epoch-timestamp>,
"transactionAmount": 1000,
"disputeAmount": 500,
"refundAmount": 0,
"contestAmount": 500,
"status": "UNDER_REVIEW",
"stage": "CHARGEBACK",
"dueDate": <epoch-timestamp>,
"createdAt": <epoch-timestamp>,
"updatedAt": <epoch-timestamp>,
"evidences": {
"explanationLetter": [{
"evidenceId": "D1",
"label" : "dummmy"
}],
"customerRecallLetter": [],
"serviceConfirmation":[],
"refundConfirmation": [],
"serviceCancellation": [],
"deliveryProof": [],
"shippingProof": [],
"accessActivityLog":[]
}
}Request Parameters
| Parameter Name | Type | Description |
|---|---|---|
merchantId | String | Unique MerchantID assigned to the merchant by PhonePeNote: merchantId length will be less than 38 characters. |
disputeId | String | Unique DisputeId assigned to a dispute |
merchantOrderId | String | Unique merchant order id generated by merchant |
orderId | String | PhonePe generated order Id |
transactionId | String | Unique transaction id generated by phonepe |
transactionCompletedAt | Long | Epoch timestamp of the transaction completion time (in milliseconds) |
transactionAmount | Long | Amount of the transaction |
disputeAmount | Long | Amount for which dispute is raised, will be lesser than or equal to transactionAmount |
refundAmount | Long | After the status of dispute moved to LOST or WON, The amount that is given back to the customer |
contestAmount | Long | Amount for which merchant does the contest |
status | Enum | Status of the dispute Note: The value could be “ACTION_REQUIRED”, “UNDER_REVIEW”, “WON” or “LOST” |
stage | Enum | Stage of the dispute Note: The value could be “CHARGEBACK” or “PRE_ARBITRATION” |
dueDate | Long | Epoch timestamp the last date to respond for a dispute for merchant (in milliseconds) |
createdAt | Long | Epoch timestamp, Creation date of the dispute (in milliseconds) |
updatedAt | Long | Epoch timestamp, Last updated date of a dispute (in milliseconds) |
evidences | Object | Map of String and List containing the type as key and List of evidence object as value that merchant uploaded by upload evidence api |
⚠️ Dispute Status Action Rules!
A dispute can be accepted only when its status is ACTION_REQUIRED. If the status is different, the API will return a 409 error.
Error Scenarios
| Error Scenario | Response Code | Response |
| Dispute not found | 404 | { “message”: “Dispute Not Found”, “code”: “DISPUTE_NOT_FOUND” } |
| When you are contesting again or you have accepted the dispute than contesting it | 409 | { “message”: “Transition not allowed”, “code”: “INVALID_TRANSITION” } |
| Any issue at PhonePe end | 500 | { “message”: “Something went wrong, please try again”, “code”: “SOMETHING_WENT_WRONG” } |
| Contest amount is greater than dispute amount | 400 | { “message”: “Contested amount cannot be greater than disputed amount”, “code”: “INVALID_CONTESTED_AMOUNT” } |
| Contest amount is not positive | 400 | { “message”: “Contest amount must be greater than zero”, “code”: “CONTESTED_AMOUNT_NOT_POSITIVE” } |