Error codes v1
The payment service returns both its own errors and Bank errors.
The format of the response with the error is the same and includes the errorCode and errorMessage fields.
For example:
{
"errorCode": "8",
"errorMessage": "Card data is incorrect"
}To determine whether the error belongs to the Payment service or the Bank, check the errorCode:
- values greater than 90 or alphanumeric codes like AA-000 are for Payment service errors;
- values less than 90 are for Bank errors.
errorCode=0 indicates that the operation was carried out without technical errors or failures both in the Payment service and in the Bank. However, this does not guarantee that the operation in the bank was completed successfully.
In many cases, the bank's processing center returns its own operation execution code. This code is included in the Payment service response as the actionCode parameter. It may indicate that the requested operation was not executed by the bank's processing, even if errorCode=0.
The processing center's response codes (actionCode) are listed here.
Payment service Errors. Numeric error codes
| HTTP code | Error code | Error message | Description |
|---|---|---|---|
| 400 | 94 | Order has been expired in Router at {@mdOrder_expiryDate} | The order expired in the Payment service before it was routed to any bank |
| 400 | 95 | Order {@orderNumber} already exists in {@gw_id} but likely was created bypassing router. Payment declined by router. | After selecting a bank during order routing, the Payment service checks that an order with such a number does not yet exist in the bank. However, the bank reports that such an order already exists there. |
| 400 | 97 | You should request QR code first before calling this method | Attempt to call QR code status or reject it before QR code registration |
| 400 | 97 | Order {@orderNumber} was already processed in {@gw_id} and cannot be payed again. Please check order status. | The order with the specified number has already been routed to the specified bank. The bank reported that the order has a final status. The Payment service does not accept repeated payment for the order. |
| 400 | 97 | Order has been canceled | The order was explicitly canceled in the Payment service (decline.do, actionCode 4005) |
| 400 | 97 | Order {@orderNumber} is currently being processed | The Payment service has started payment for the specified order to a specific bank, but this operation has not yet been completed. Repeated payments and some other operations with this order are blocked in the Payment service until the bank has completed processing this order. |
| 400 | 98 | Order identification is not provided |
orderNumber or mdOrder (orderId) are missing from the request |
| 400 | 98 | Order not found | Order with the specified number (identifier) not found |
| 400 | 98 | Binding not found in ${gw_arr}. Check bindingId and clientId |
bindingId from the request was not found in banks (list of polled banks) |
| 400 | 98 | Initial recurrent payment (tii=RI) should have [recurringFrequency] and [recurringExpiry] additional json parameters | Incorrect additional parameters in the order |
| 400 | 98 | clientId must be specified for initial recurrent payment |
clientId is required in the request |
| 400 | 98 | Initial installment payment (tii=II) should have [installments], [recurringFrequency] and [recurringExpiry] additional json parameters | Incorrect additional parameters in the order |
| 400 | 98 | clientId must be specified for initial installment payment |
clientId is required in the request |
| 400 | 98 | Initial installment payment should also have both recurringFrequency and recurringExpiry parameters | Incorrect additional parameters in the order |
| 400 | 98 | Both recurringFrequency and recurringExpiry should be specified for initial recurrent or installment payment | Incorrect additional parameters in the order |
| 400 | 98 | clientId must be specified for initial recurrent or installment payment |
clientId is required in the request |
| 400 | 98 | clientId must be specified when using VERIFY feature |
clientId is required in the request |
| 400 | 98 | Order not found in {@gw_target_id} | The bank was unable to return the order status after the payment was routed to that bank |
| 400 | 98 | Order {@orderNumber} already registered | An order with this number has already been registered in the Payment service |
| 400 | 98 | At least one of the specified payment ways is not supported | When registering an order in the Payment service, a payment method was specified that is not supported in the Payment service (CARD, BINDING, SBP_C2B, etc.) |
| 400 | 98 | clientId must be specified when using binding creator merchant | When using this login, you must specify clientId
|
| 400 | 98 | Additional parameters back2app and app2app are mutually exclusive | Incorrect additional parameters in the order for Sberbank Online |
| 400 | 98 | Phone number must be specified when using back2app or app2app additional parameter | Incorrect additional parameters in the order for Sberbank Online |
| 400 | 98 | Phone number does not match required pattern for SBOL payment. Valid formats: +79000000000, 89000000000 | Incorrect additional parameters in the order for Sberbank Online |
| 400 | 98 | Additional parameter app.osType must be either ios or android | Incorrect additional parameters in the order for Sberbank Online |
| 400 | 98 | Additional parameter app.deepLink has incorrect format | Incorrect additional parameters in the order for Sberbank Online |
| 400 | 98 | Binding not found | The specified stored credential is not found |
| 400 | 98 | Incorrect seToken | Incorrect content of seToken |
| 400 | 98 | Request template is not defined for ${routerRequest} | Internal Payment service error. An issue with parsing incoming request |
| 400 | 98 | Request template ${msgType} for ${routerRequest} is not defined in protocol | Internal Payment service error. An issue with parsing incoming request |
| 400 | 98 | ${field} does not match required pattern ${pattern} | Incorrect parameter value in request |
| 400 | 98 | ${field} parameter must be an Array | Incorrect parameter value in request |
| 400 | 98 | ${field} parameter must be an Object | Incorrect parameter value in request |
| 400 | 98 | ${field} parameter must be a number | Incorrect parameter value in request |
| 400 | 98 | ${field} exceeded max length ${maxLength} | Incorrect parameter value in request |
| 400 | 98 | ${field} must be one of ${enumArray} | Incorrect parameter value in request |
| 400 | 98 | ${field} is a required parameter | Incorrect parameter value in request |
| 400 | 98 | Currency [$currency] is not allowed in any bank | Incorrect parameter value in request |
| 401 | 90 | Authentication failed ({@gw_target_id}). Check login and password | Authentication to the specified bank failed |
| 403 | 93 | MirPay link is not available | The MirPay URL was not received from the bank (incorrect configuration of the Partner in the bank) |
| 404 | - | - | No such method |
| 415 | - | - | Incorrect content type for the method |
| 424 | 97 | Order {@orderNumber} was already processed in {@gw_id}. Error checking current order status. Operation declined. | The order with the specified number has already been routed to the specified bank, but the order status could not be obtained from this bank. The request will not be sent to the specified bank. |
| 424 | 99 | Error loading router settings | Incorrect system settings of the Payment service |
| 424 | 99 | System error | Internal error of the Payment service, the reasons may vary. Contact support for details |
| 424 | 99 | Unsupported payment way | The Payment service was unable to determine the payment method (card, setoken, bindingId) |
| 424 | 99 | Authentication failed: no gateways available | Failed to authenticate API user: all banks are inactive |
| 424 | 99 | Failed to decrypt or read seToken | Error decrypting seToken |
| 424 | 99 | Error getting gateway parameters: {@gw_target_id} | Internal Payment service error. Unable to connect with a specific bank |
| 424 | 99 | Gateway settings for ${gw_target_id} not found | Internal Payment service error. Unable to connect with a specific bank |
| 424 | 99 | Gateway settings for ${gw_target_id} are incomplete | Internal Payment service error. Unable to connect with a specific bank |
| 424 | 99 | Unable to load merchant settings | Internal Payment service error. There is a problem with the Partner settings |
| 424 | 99 | Error loading merchant settings. Check router settings are valid and assigned to the merchant | Internal Payment service error. There is a problem with the Partner settings |
| 424 | 99 | Internal error checking hessian response for success: {@service_name} | Internal Payment service error. Unable to parse the bank's response |
| 424 | 99 | Failed to parse incoming request or {@api_pathAndMethod}. Check JSON syntax in request body. | Incorrect JSON in the request |
| 424 | 99 | Response template is not defined for ${routerRequest} | Internal Payment service error. Unable to prepare the response of the Payment service |
| 424 | 99 | Response template ${msgType} for ${routerRequest} is not defined in protocol | Internal Payment service error. Unable to prepare the response of the Payment service |
| 424 | 99 | Mirpay gateway is not specified for merchant {@merchant_name} | Incorrect Partner configuration in the payment service |
| 424 | - | - | Internal unhandled (unexpected) error of the Payment service |
| 424 | 99 | Payment failed | Failed to complete payment |
| 424 | 99 | There was problem processing order in {@gw_id} | An error occurred while calling instantPayment to the bank |
| 424 | 99 | Hessian response was unsuccessful | Internal Payment service error. Unable to parse the bank's response |
| 424 | 99 | Call to bank's gateway service ${context.gw_host:${service} was unsuccessful. Response HTTP code: ${httpCode}, response content type: ${contentType}, error message: none | Internal Payment service error. Unable to parse the bank's response |
| 424 | 99 | Currency conversion failed | Error interacting with currency conversion service |
| 424 | 99 | Target gateway is inactive and no alternate gateways available | The selected bank is currently inactive (disabled), and there are no other active banks left for the Partner that can accept payment for the order. |
| 424 | 99 | Call to service $value returned empty body | Internal Payment service error. Unable to parse the external service response |
| 424 | 99 | Binding data not received from gateway {@binding_gw_id} | The Payment service identified the stored credential as belonging to a specific bank, but the bank did not return the stored credential data |
| 424 | 91 | Timeout when requesting {@service_name} | Timeout on Payment service when requesting to a specific bank |
Payment service Errors. Alphanumeric error code
The exact text of the error is not given, as it can be changed without prior notice. Use the error code for troubleshooting, as it is unique for each cause.
Letters in the code indicate the error type.
BD: stored credential errors
| HTTP code | Error code | Description | Possible reasons |
|---|---|---|---|
| 200 | BD-102 | The stored credentials list in the response to the getBindings.do request may be incomplete because there were errors requesting stored credentials from at least one bank |
The stored credentials service is temporarily unavailable in one or several banks |
| 200 | BD-103 | The bankName and paymentSystem fields in the response to the getBindings.do request may be empty or incorrect because the corresponding service did not return card data. |
Card data service is temporarily unavailable |
| 200 | BD-104 | Both errors BD-102 and BD-103 occurred while collecting the list of stored credentials, i.e. the list of stored credentials may be incomplete and the fields may be incorrect | The stored credentials service is temporarily unavailable in one or more banks and the card data service is unavailable at the same time |
| 400 | BD-201 | SBP subscription with specified bindingId not found (when deactivate SPB subscription) |
|
PM: payment errors
| HTTP code | Error code | Description | Possible reasons |
|---|---|---|---|
| 400 | PM-102 | Payment is prohibited due to specific payment conditions (amount, card issuer, payment method etc.) | There is a rule in the routing table that denies payment with such parameters |
RO: routing errors
| HTTP code | Error code | Description | Possible reasons |
|---|---|---|---|
| 424 | RO-201 | API-method you are calling assumes that order was already routed to a Bank, but it is not | Trying to perform refund or reverse for an order that is not routed to any Bank |
| 424 | RO-202 | Unable to place order in exclusive target bank |
|
| 424 | RO-204 | There are no active Banks to receive SPB payments |
|
| 424 | RO-205 | BNPL module address is not set for target bank | Payment service misconfiguration: BNPL module is not configured for a bank |
VP: Vendor Pays errors
| HTTP code | Error code | Description | Possible reasons |
|---|---|---|---|
| 424 | VP-201 | Unable to route order to T-pay capable Bank | Bank services are unavailable |
| 424 | VP-202 | Unable to receive QR-code from T-pay capable Bank | Bank services are unavailable |
| 424 | VP-203 | Unable to reject Tpay QR-code | Bank services are unavailable |
| 424 | VP-211 | Unable to route order to Yandex Bank | Bank services are unavailable |
| 424 | VP-212 | Unable to receive payment link from Yandex Bank | Bank services are unavailable |
VR: incoming request validation errors
| HTTP code | Error code | Description | Possible reasons |
|---|---|---|---|
| 400 | VR-230 | Incorrect data in orderBundle.orderCreationDate
|
Bad datetime format or date is further than current date |
| 400 | VR-231 | Incorrect data in orderBundle.customerDetails
|
One or more fields in customerDetails is missing or malformed |
| 400 | VR-232 | Incorrect data in orderBundle.customerDetails.deliveryInfo
|
One or more fields in customerDetails.deliveryInfo is missing or malformed |
| 400 | VR-233 | Incorrect data in orderBundle.cartItems.items
|
One or more fields in orderBundle.cartItems.items is missing or malformed |
| 400 | VR-234 |
itemAmount shall be equal to itemPrice multiplied by quantity
|
itemAmount differs from itemPrice x quantity
|
| 400 | VR-235 | Order amount shall be equal to bundle amount | Calculated bundle amount differs from order amount |
| 400 | VR-236 | Incorrect data in orderBundle.cartItems.items.itemAttributes
|
One or more fields in orderBundle.cartItems.items.itemAttributes is missing or malformed |
| 400 | VR-243 | Binding specified in register request is not found | Either bindingId or defaultBindingId parameter was specified in the order registration request, but the corresponding stored credential could not be retrieved. |
| 400 | VR-244 | Binding validation error in register request | Both bindingId and defaultBindingId were specified in the order registration request. Only one of those is allowed. |
| 400 | VR-245 | Incorrect binding type when pay an order | Trying to pay for a eCom order with recurrent or installment stored credential |
| 400 | VR-260 | clientId is required when register with binding |
clientId may become a required field in some circumstances, including: - Registering the order with a stored credential ID - Using the request parameters that indicate that a stored credential will be created. For example, when "feature": ["VERIFY"] is specified or an initiating recurring payment is registered. |
| 400 | VR-306 | Order has been already processed | Trying to perform instantPayment.do again with the same orderNumber or calling instantPayment.do with previously registered orderNumber
|
| 400 | VR-307 | Order has been already processed | Trying to perform recurrentPayment.do again with the same orderNumber or calling recurrentPayment.do with previously registered orderNumber
|
| 400 | VR-351 | Signature verification error: empty request body | The request body is missing. In general, the code 99 Failed to parse incoming request is returned instead of this error |
| 400 | VR-352 | Signature verification error: empty X-Hash header | Request body hash missing |
| 400 | VR-353 | Signature verification error: incorrect X-Hash header | The request hash was generated incorrectly or passed in an invalid encoding. Pass the hash in base64 encoding. |
| 400 | VR-354 | Signature verification error: empty X-Signature header | Request signature missing |
| 400 | VR-355 | Signature verification error: incorrect signature | The request signature is generated incorrectly |
| 424 | VR-356 | Signature verification error: no certificates available to check signature | The Partner does not have any valid certificates to verify the request signature |
| 400 | VR-357 | Signature verification error: incorrect signature format - Base64 expected | The request signature was passed in an invalid format |
| 400 | VR-601 | orderNumber already exists in a Bank but the order was created not by Router. This order cannot be payed in Router. | The Partner registers an order with the same number first directly in the Bank (bypassing the Payment service), then in the Payment service. After choosing a target Bank, the Payment service checks if an order with given orderNumber already exists in that Bank. Normally, it should not. When the order is found, it causes an error. |