Learn about the HTTP error responses returned from Plural APIs.
Plural aims to process all the API requests successfully to provide the optimal user experience. Each API request can either return a successful response or a failed response. Successful API responses are indicated by an HTTP status code in the 2XX range. Any status code outside of the 2XX range signifies a failed request. Common reasons for API call failures include human input errors, network issues, and intermittent connectivity problems.
The error response helps to:
- Identify and examine the causes of failure.
- Identifying measures to resolve the unsuccessful response.
The table below lists the various HTTP response codes we return to indicate successful or failed API calls.
HTTP Status Code | Description | Next Step |
---|---|---|
2XX | Successful API request. | |
4XX | Failed API Request. This is because of the error in the information provided by you. Example:
| When these error messages are returned check and correct the information passed in the API request. |
5XX | Failed API request. This is returned when:
| Try after some time. |
Error Structure
The error response contains the code
and message
parameters in the error response. These parameters helps to identify reasons for the error.
The table below gives a brief description of the various parameters returned in the error message with all non-2XX HTTP status codes.
Parameter | Type | Description |
---|---|---|
code | string | Short code for the error returned. Possible values:
|
message | string | Corresponding error message for the code. Example: Amount must be an Integer value greater than or equal to 1 |
Shown below are the sample error response for 400 HTTP status code.
{
"code": "INVALID_REQUEST",
"message": "Amount must be an Integer value greater than or equal to 1"
}
{
"code": "INVALID_REQUEST",
"message": "Amount must be an Integer value less than or equal to 100000000"
}
{
"code": "INVALID_REQUEST",
"message": "Merchant Order Reference must not be empty"
}
{
"code": "INVALID_REQUEST",
"message": "Merchant Order Reference must be less than or equal to 50 characters"
}
{
"code": "INVALID_REQUEST",
"message": "Payment method is missing/invalid"
}
Shown below are the sample error response for 401 HTTP status code.
{
"code":"UNAUTHORIZED",
"message":"Unauthorized"
}
Shown below are the sample error response for 422 HTTP status code.
{
"code": "PAYMENT_RATE_LIMIT",
"message": "Failure due to request velocity or limit checks"
}
{
"code": "CARD_EXPIRED",
"message": "Payment Instrument has expired"
}
{
"code": "RISK_CHECK_FAILED",
"message": "Payment Instrument suspected to be used fraudulently"
}
Shown below are the sample error response for 500 HTTP status code.
{
"code": "INTERNAL_ERROR",
"message": "Internal Server Error"
}
{
"code": "INTERNAL_ERROR",
"message": "Payment processor is unavailable"
}
Common Error Codes
The below table lists all the possible error codes returned in our API responses.
Status Code | Error Code | Error Source | Error Description |
---|---|---|---|
422 | AMOUNT_LIMIT_EXCEEDED | ACQUIRER | The transaction was declined because the specified amount exceeds allowed limits |
422 | AMOUNT_LIMIT_EXCEEDED | ACQUIRER | Amount exceeds allowed limit |
422 | AMOUNT_LIMIT_EXCEEDED | MERCHANT | Requested refund amount is greater than eligible amount |
422 | AMOUNT_LIMIT_EXCEEDED | MERCHANT | Requested refund amount is greater than captured amount |
422 | AMOUNT_LIMIT_EXCEEDED | MERCHANT | Requested split refund amount with blank status is greater than eligible amount |
422 | CARD_EXPIRED | ACQUIRER | Specified card is not allowed for this transaction because it has expired |
422 | CARD_LOST | ACQUIRER | Specified card is not allowed for this transaction because it was flagged as lost. |
422 | CARD_NOT_ALLOWED | ACQUIRER | Payment Instrument is restricted to perform the relevant operation |
422 | CARD_NOT_ALLOWED | ACQUIRER | Specified card is not allowed for this transaction. |
422 | CARD_STOLEN | ACQUIRER | Specified card is not allowed for this transaction because it was flagged as stolen |
422 | CARD_VERIFICATION_FAILED | ACQUIRER | Invalid CVV specified on the card payment option |
422 | DUPLICATE_REQUEST | ACQUIRER | The request has already been processed |
422 | DUPLICATE_REQUEST | ACQUIRER | The request was rejected because the client has sent too many requests in a given time window |
422 | DUPLICATE_REQUEST | INTERNAL | The request has already been processed |
422 | DUPLICATE_REQUEST | ACQUIRER | The request has already been processed. |
422 | DUPLICATE_REQUEST | INTERNAL | Duplicate payment id found |
422 | DUPLICATE_REQUEST | INTERNAL | Release instruction already received |
422 | DUPLICATE_REQUEST | MERCHANT | Duplicate payment reference received |
422 | DUPLICATE_REQUEST | MERCHANT | Duplicate Merchant Reference ID received |
422 | DUPLICATE_REQUEST | MERCHANT | Another payment already in process. Please retry in some time |
422 | DUPLICATE_REQUEST | MERCHANT | Cancel request already received |
422 | INSUFFICIENT_FUNDS | ACQUIRER | Insufficient funds to proceed with payment using the specified payment option |
422 | INSUFFICIENT_FUNDS | ACQUIRER | Insufficient funds to proceed with payment using the specified payment option. |
500 | INTERNAL_ERROR | INTERNAL | Internal server error. The request cannot be processed at this time |
500 | INTERNAL_ERROR | INTERNAL | Could not fetch merchant details |
500 | INTERNAL_ERROR | INTERNAL | Could not find merchant |
500 | INTERNAL_ERROR | INTERNAL | Could not fetch acquirer details |
500 | INTERNAL_ERROR | INTERNAL | Could not fetch merchant hierarchy details |
500 | INTERNAL_ERROR | INTERNAL | Invalid merchant acquirer configuration |
500 | INTERNAL_ERROR | INTERNAL | Could not fetch merchant convenience fee details |
500 | INTERNAL_ERROR | INTERNAL | Could not find merchant convenience fee details |
500 | INTERNAL_ERROR | INTERNAL | Internal Server Error |
500 | INTERNAL_ERROR | INTERNAL | Payment processor is unavailable |
500 | INTERNAL_ERROR | INTERNAL | Could not fetch order details |
500 | INTERNAL_ERROR | INTERNAL | Parent payment auth failed |
500 | INTERNAL_ERROR | INTERNAL | Fetch bin details failure |
500 | INTERNAL_ERROR | INTERNAL | No Bin Details Found |
500 | INTERNAL_ERROR | INTERNAL | Could not create a transaction |
500 | INTERNAL_ERROR | INTERNAL | Could not create an authentication |
500 | INTERNAL_ERROR | INTERNAL | Authentication timed out |
500 | INTERNAL_ERROR | INTERNAL | Could not create an authorization |
500 | INTERNAL_ERROR | INTERNAL | Authorization timed out |
500 | INTERNAL_ERROR | INTERNAL | Could not create a void request |
500 | INTERNAL_ERROR | INTERNAL | Void Timed out |
500 | INTERNAL_ERROR | INTERNAL | Capture payment could not be processed |
500 | INTERNAL_ERROR | INTERNAL | Capture Payment Timed out |
500 | INTERNAL_ERROR | INTERNAL | Refund Payment Timed out |
500 | INTERNAL_ERROR | INTERNAL | Refund payment could not be processed |
500 | INTERNAL_ERROR | INTERNAL | Inquire payment timed out |
500 | INTERNAL_ERROR | INTERNAL | Cancel Payment timed out |
500 | INTERNAL_ERROR | INTERNAL | Unable to initiate refund |
500 | INTERNAL_ERROR | INTERNAL | Unable to process refund |
500 | INTERNAL_ERROR | INTERNAL | Could not fetch merchant convenience configuration |
500 | INTERNAL_ERROR | INTERNAL | Could not fetch subscription details |
500 | INTERNAL_ERROR | INTERNAL | Could not generate otp |
500 | INTERNAL_ERROR | INTERNAL | Could not submit otp |
500 | INTERNAL_ERROR | INTERNAL | Could not resend otp |
500 | INTERNAL_ERROR | INTERNAL | Could not fetch otp config details |
500 | INTERNAL_ERROR | INTERNAL | Internal Error |
400 | INVALID_REQUEST | ACQUIRER | The request does not follow the expected contract and cannot be processed. This may be due to malformed request, invalid or missing parameters |
400 | INVALID_REQUEST | INTERNAL | The request does not follow the expected contract and cannot be processed. This may be due to malformed request, invalid or missing parameters |
400 | INVALID_REQUEST | ACQUIRER | The request does not follow the expected contract and cannot be processed. This may be due to malformed request, invalid or missing parameters |
400 | INVALID_REQUEST | MERCHANT | Could not find Split Merchant Details |
400 | INVALID_REQUEST | INTERNAL | Settlement Details not found |
400 | INVALID_REQUEST | MERCHANT | Update Request is invalid |
400 | INVALID_REQUEST | MERCHANT | Merchant Payment Reference is Missing |
400 | INVALID_REQUEST | INTERNAL | Offer Validation Failed |
400 | INVALID_REQUEST | MERCHANT | Merchant ID is missing in headers |
400 | INVALID_REQUEST | MERCHANT | Order ID is invalid |
400 | INVALID_REQUEST | MERCHANT | Settlement ID is invalid |
400 | INVALID_REQUEST | INTERNAL | Could not find merchant |
400 | INVALID_REQUEST | MERCHANT | Invalid Merchant Order Reference |
400 | INVALID_REQUEST | MERCHANT | Invalid Order Amount Details |
400 | INVALID_REQUEST | MERCHANT | Notes must be less than or equal to 100 characters |
400 | INVALID_REQUEST | MERCHANT | Invalid Product Details |
400 | INVALID_REQUEST | MERCHANT | Invalid Paymode Mode List |
400 | INVALID_REQUEST | MERCHANT | Invalid Redirect Url |
400 | INVALID_REQUEST | MERCHANT | Invalid Customer Details |
400 | INVALID_REQUEST | MERCHANT | Invalid Split Details |
400 | INVALID_REQUEST | MERCHANT | Invalid Payment Amount Details |
400 | INVALID_REQUEST | MERCHANT | Invalid Payment Option Object |
400 | INVALID_REQUEST | MERCHANT | Invalid Card Details |
400 | INVALID_REQUEST | MERCHANT | Pay By Points is Disabled |
400 | INVALID_REQUEST | MERCHANT | Invalid Card Token Details |
400 | INVALID_REQUEST | MERCHANT | Invalid UPI Payment Details |
400 | INVALID_REQUEST | MERCHANT | Invalid Convenience Fee Details |
400 | INVALID_REQUEST | MERCHANT | Invalid Merchant Capture Reference |
400 | INVALID_REQUEST | MERCHANT | Invalid Merchant Refund Reference |
400 | INVALID_REQUEST | MERCHANT | Invalid Refund Request Data |
400 | INVALID_REQUEST | MERCHANT | Invalid Process Details |
400 | INVALID_REQUEST | MERCHANT | OrderId is invalid |
400 | INVALID_REQUEST | MERCHANT | Invalid Amount Details |
400 | INVALID_REQUEST | MERCHANT | Payment method is required when network type is provided |
400 | INVALID_REQUEST | MERCHANT | Product mismatch from the order |
400 | INVALID_REQUEST | MERCHANT | Refund request is invalid |
400 | INVALID_REQUEST | MERCHANT | The payment method is not enabled for this payment |
400 | INVALID_REQUEST | MERCHANT | Invalid payment request |
400 | INVALID_REQUEST | MERCHANT | No valid payment methods are available for this order |
400 | INVALID_REQUEST | MERCHANT | Requested release amount is greater than the eligible amount |
400 | INVALID_REQUEST | MERCHANT | Currency is invalid |
400 | INVALID_REQUEST | MERCHANT | Partner Merchant Id does not match the parent orders Partner Merchant Id. |
400 | INVALID_REQUEST | MERCHANT | Payment method is invalid or empty |
400 | INVALID_REQUEST | MERCHANT | Payment Amount is invalid or empty |
400 | INVALID_REQUEST | MERCHANT | Payment currency is invalid or empty |
400 | INVALID_REQUEST | MERCHANT | Request Type is missing in Mandate Info |
400 | INVALID_REQUEST | MERCHANT | Card details not found. Please create payment first. |
400 | INVALID_REQUEST | MERCHANT | Browser details not found. Native-OTP feature is only eligible for payments created with browser detail |
400 | INVALID_REQUEST | MERCHANT | Invalid dcc payment request |
422 | INVALID_USER_ACCOUNT | ACQUIRER | Relevant User Account not active/valid |
422 | INVALID_USER_ACCOUNT | ACQUIRER | Relevant User Account not active/valid |
422 | ISSUER_NOT_SUPPORTED | ACQUIRER | The specified issuer is not supported for this operation |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Invalid Merchant or merchant not permitted related operation |
422 | OPERATION_NOT_ALLOWED | INTERNAL | The specified operation cannot be made because required precondition has failed. |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Convenience fee not configured for merchant |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Invalid convenience fee applied with payment |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Convenience fee is configured for this payment method but missing in request |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Incorrect payment amount |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Order might have already processed |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Authorization is not allowed |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Payment can not be captured |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Partial Capture is not allowed for split payments |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Order cannot be cancelled |
422 | OPERATION_NOT_ALLOWED | MERCHANT | PreAuth disabled for Merchant |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Split Settlement Amount is not equal to Order Amount |
422 | OPERATION_NOT_ALLOWED | INTERNAL | The order is not in processed state |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Payments limit reached on this order |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Save Card feature not enabled for merchant |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Merchant is not allowed to create split settlement orders |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Payments cannot be cancelled |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Refund not allowed on this order |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Force refund not allowed on this payment |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Convenience fee configuration not enabled for merchant |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Refund not applicable for the issuer, Please contact with the bank |
422 | OPERATION_NOT_ALLOWED | MERCHANT | subsequent refund requests on this order must include split info as specified by the initial refund requ |
422 | OPERATION_NOT_ALLOWED | MERCHANT | plit info is not permitted for refund requests on this order as the initial refund request did not contain i |
422 | OPERATION_NOT_ALLOWED | MERCHANT | The order is not a split settlement order, providing split info in the refund request is not allowed |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Settlement Details not found, please provide valid parent order settlement id |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Sum of all splits Amount is not equal to Order Amount |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Split merchant id should be same as parent order split merchant id |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Refund request with DO_NOT_RECOVER status already received on this parent order split settlement id |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Requested split refund amount with DO_NOT_RECOVER status is not equal to the eligible amount |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Requested parent split is on HOLD state, can not refund with DO_NOT_RECOVER status |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Requested parent split is not released, can not refund with blank status |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Multiple splits on same parent order split settlement id with same status is not allowed |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Refund not allowed for this order as the parent order exceeds the allowed timeframe. |
422 | OPERATION_NOT_ALLOWED | MERCHANT | The order is not CHARGE type |
422 | OPERATION_NOT_ALLOWED | INTERNAL | Partial refund not allowed for this payment mode |
422 | OPERATION_NOT_ALLOWED | MERCHANT | OTP already generated |
422 | OPERATION_NOT_ALLOWED | MERCHANT | OTP not yet generated. Please generate OTP first. |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Could not perform the requested operation. Please call generate OTP before proceeding |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Native OTP feature is not enabled for the merchant |
422 | OPERATION_NOT_ALLOWED | MERCHANT | Native OTP feature is not enabled for the payment |
422 | ORDER_CANCELLED | ACQUIRER | The order has already been cancelled and cannot be modified further. |
422 | ORDER_CANCELLED | INTERNAL | Cancelled due to Late Auth Expiry |
404 | ORDER_NOT_FOUND | INTERNAL | No order with specified order-id exists in the system |
404 | ORDER_NOT_FOUND | MERCHANT | Parent order not found. Ensure that order has been created before proceeding with payment |
404 | ORDER_NOT_FOUND | INTERNAL | Order not found |
422 | PAYMENT_DECLINED | ACQUIRER | The payment was declined by the acquirer. |
422 | PAYMENT_DECLINED | ACQUIRER | The payment was declined by the acquirer |
422 | PAYMENT_DECLINED | INTERNAL | The payment was declined by the acquirer |
422 | PAYMENT_EXPIRED | ACQUIRER | The payment has expired and cannot be modified further |
422 | PAYMENT_NOT_AUTHORIZED | INTERNAL | The payment requires authorization before it can be processed |
422 | PAYMENT_PENDING | ACQUIRER | The payment is pending and requires authorization before it can be processed |
422 | PAYMENT_PENDING | INTERNAL | Refund is pending |
422 | PAYMENT_RATE_LIMIT | ACQUIRER | e payment was declined because too many payments were attempted using the specified payment opti |
422 | RISK_CHECK_FAILED | ACQUIRER | The payment was declined after a risk check |
422 | RISK_CHECK_FAILED | INTERNAL | Payment has been blocked based on the risk check |
422 | TIMED_OUT | ACQUIRER | The request timed out. Please try again latet. |
422 | TIMED_OUT | ACQUIRER | The request timed out. Please try again later |
422 | TIMED_OUT | ACQUIRER | The request timed out. Please try again later |
422 | USER_AUTHENTICATION_FAILED | ACQUIRER | User Authentication Failed, Please try again with valid parameters. |
422 | USER_AUTHENTICATION_FAILED | INTERNAL | User Authentication Failed, Please try again with valid parameters |
Note:
- For the unstructured error returned from Plural, the response may not always include a corresponding code and message. In such cases, refer to the HTTP status codes to determine the status of the API request.