Unified Error Catalog — Kushki ONE Connect
We simplify error management in Kushki ONE Connect. In the event of any operation failure, our API returns a structured payload in JSON format (LinkFailure) that standardizes the response regardless of whether the problem originated at the terminal, in validation, in authentication, or at the acquirer. This allows you to build more robust integrations, automate recovery flows, and stop relying exclusively on HTTP Status Codes.
This manual is your primary diagnostic tool. It details the structure of the new data model, the code catalogs by category, how we map third-party rejections, and a quick guide to resolving common problems.
1. Error Models
All errors share the same response structure. The type field should be evaluated first to classify the source of the failure, and then the corresponding code should be consulted.
| Field | Type | Always present | Description |
|---|---|---|---|
type | String | Yes | Error category. Identifies the source of the failure. See Section 3. |
code | String | Yes | Unique error code. Format: prefix + number (e.g., PAR-001, TER-002, ACQ-13). |
param | String | No | The exact field or parameter that caused the error. Primarily used in PARAMETER errors. |
message | String | Yes | Human-readable description of the reason for the failure. |
object | Object | No | Traceability data. Includes client_transaction_id, terminal_id, and serial_number where applicable. |
HTTP Status Code
The HTTP status code is consistent with the body’s type. For ACQUIRER errors, the same HTTP status originally returned by Kushki is preserved.
Canonical example
{"type": "PARAMETER","code": "PAR-003","param": "amount","message": "Amount must be a value greater than 0","object": {"client_transaction_id": "1018282","terminal_id": "172653","serial_number": "PJ715652"}}
2. Error Categories (type field)
| type | Origin | Description |
|---|---|---|
PARAMETER | Validation | Incorrect field submission: missing required fields, wrong type, or invalid format. |
TERMINAL | Terminal | Terminal physical state errors: busy, offline, not linked, incompatible mode. |
AUTHENTICATION | Security | Unable to authenticate the user or insufficient permissions to execute the action. |
NOT_FOUND | Routing | Service or endpoint not found. Invalid URL. |
ACQUIRER | Acquirer | Errors related to transaction processing or authorization by the Kushki acquirer. Code with ACQ- prefix. |
INTERNAL | Application | Unexpected errors: services down, internal application errors. |
CONFIGURATION | DMS Configuration | The requested operation is not enabled or exceeds the limits configured for this terminal in the DMS. |
TERMINAL-PRINTER | Hardware | Errors thrown by the integrated thermal printer (out of paper, cover open, paper jam, etc.). |
MANUFACTURER | Hardware SDK | Errors from the manufacturer SDK (Sunmi, Landi). Code with MAN- prefix. |
3. Validation Errors — type: “PARAMETER”
Generated when the sent request contains incorrectly formatted fields, values out of range, or missing required fields. The param field identifies the specific field that caused the error. All are 100% preventable by validating the payload before calling the API.
| code | Description | Message (template) | Example |
|---|---|---|---|
PAR-001 | Required field was not sent. | Field {{field}} is required. | Field amount.currency is required. |
PAR-002 | Field of incorrect type. | Field {{field}} must be a/an {{type}} | Field amount.subtotal_iva must be an integer. |
PAR-002 | Field with incorrect format or invalid value. | Field {{field}} must satisfy: {{condition}} | Field amount.iva must satisfy: value >= 0. |
3.1 Request Validation Errors - type: “PARAMETER”
When the type is PARAMETER, the code field is always a positive numeric code in the 2001–2037 range. All are preventable by validating the payload in the checkout system before calling the API. There are also two special system format codes.
3.2 System Codes
| code | Error description |
|---|---|
| BAD_FORMAT | JSON/JVM parsing error. The request body is not a valid JSON or contains an incorrect data type in a field. |
| BUSY | The terminal is processing another request. The integrator must retry once the terminal becomes available. |
3.3 Amount and Payment Field Validators (2001–2013)
| Code | Parameter / Object | Error message | Applies to |
|---|---|---|---|
| 2001 | amount.currency | Invalid currency: {value}. Expected one of: [MXN, CLP, PEN, COP] | All |
| 2002 | amount.iva | amount.iva cannot be negative | All |
| 2003 | amount.subtotalIva | amount.subtotalIva cannot be negative | All |
| 2004 | amount.subtotalIva0 | amount.subtotalIva0 cannot be negative | All |
| 2005 | amount.tip | amount.tip cannot be negative | /pos_tip only |
| 2006 | airportTax | airportTax cannot be negative | All |
| 2007 | iac | iac cannot be negative | All |
| 2008 | ice | ice cannot be negative | All |
| 2009 | travelAgency | travelAgency cannot be negative | All |
| 2012 | deferredMonths | deferredMonths must be > 0 when isDeferred is true | All |
| 2013 | cashbackAmount | cashbackAmount must be > 0 when isCashback is true | /pos_tip only |
3.4 Transaction Identifier Validators (2010–2015)
| Code | Parameter / Object | Error message |
|---|---|---|
| 2010 | clientTransactionId | clientTransactionId must be a valid UUID format |
| 2011 | clientTransactionId | clientTransactionId is required |
| 2014 | transactionReference | transactionReference must be a valid UUID format |
| 2015 | transactionReference | transactionReference is required |
3.5 Pagination and Date Validators (2016-2021)
| Code | Parameter / Object | Error message |
|---|---|---|
| 2016 | page | page must be greater than 0 |
| 2017 | size | size must be greater than 0 |
| 2018 | size | size must not exceed 500 |
| 2019 | start_date | start_date cannot be negative |
| 2020 | end_date | end_date cannot be negative |
| 2021 | start_date | start_date must be before end_date |
3.6 Configuration Validators (2022-2037)
| Code | Parameter / Object | Error message |
|---|---|---|
| 2022 | env | env is required |
| 2023 | privateCredentialId | privateCredentialId is required |
| 2024 | country | country is required |
| 2025 | pinTimeOut | pinTimeOut cannot be negative |
| 2026 | cardDetectTimeOut | cardDetectTimeOut cannot be negative |
| 2027 | pinKeyIndex | pinKeyIndex cannot be negative |
| 2028 | dataKeyIndex | dataKeyIndex cannot be negative |
| 2029 | timeoutSeconds | timeoutSeconds cannot be negative |
| 2030 | maxChipRetries | maxChipRetries cannot be negative |
| 2031 | countryCode | countryCode must be 3 uppercase letters or 3-4 digits (ISO 3166-1) |
| 2032 | currencyCode | currencyCode must be 3 uppercase letters or 3-4 digits (ISO 4217) |
| 2033 | merchantId | merchantId cannot be blank |
| 2034 | terminalId | terminalId cannot be blank |
| 2035 | terminalType | terminalType cannot exceed 2 characters |
| 2036 | CardInput | At least one card input method (ICC, NFC, MSR) must be enabled |
| 2037 | timeoutSeconds | timeoutSeconds cannot exceed 300 seconds (5 minutes) |
4. Terminal Errors — type: “TERMINAL”
Generated when the physical terminal cannot accept the requested operation. Unlike hardware errors, these indicate a status or connectivity issue with the terminal, not a component failure.
| code | Description | Message (template) | Example |
|---|---|---|---|
TER-001 | Terminal not linked to the merchant. | Terminal {{serial_number}} does not exist, or is not linked to your account. | Terminal SN816265 does not exist, or is not linked to your account. |
TER-002 | Terminal not responding (offline or off-network). | Terminal {{serial_number}} is not responding. It may be offline or not connected to the local network. | Terminal PB651542 is not responding. It may be offline or not connected to the local network. |
TER-003 | Terminal busy processing a transaction. | Terminal {{serial_number}} is busy processing transaction (client_transaction_id: {{id}}). | Terminal SN71652 is busy processing transaction (client_transaction_id: 8886523). |
TER-004 | Terminal busy with an action other than payment. | Terminal {{serial_number}} is busy executing action {{action}}. | Terminal JH152353 is busy executing action PRINT. |
TER-005 | Terminal in a mode incompatible with the operation. | The terminal is in {{mode}} mode and does not allow the requested action. | The terminal is in STANDALONE mode and does not allow the requested action. |
TER-006 | Terminal not enabled for this type of operation. | The terminal is not allowed to process {{type}}. | The terminal is not allowed to process TIP. |
5. Authentication Errors — type: “AUTHENTICATION”
Generated when credentials are invalid or do not have sufficient permissions to execute the requested action.
| code | Description | Message | Example |
|---|---|---|---|
AUTH-001 | Credentials cannot be authenticated. | Invalid or expired credentials | Invalid or expired credentials |
AUTH-002 | Credentials are valid but without permission for the action. | Your credentials are valid but do not grant access to this resource. | Your credentials are valid but do not grant access to this resource. |
{ "type": "AUTHENTICATION", "code": "AUTH-001", "message": "Invalid or expired credentials" }
6. Routing and Internal Errors
type: “NOT_FOUND”
| code | Description | Message (template) | Example |
|---|---|---|---|
NF-001 | Service or endpoint not found. | Service not found: {{url}} | Service not found: https://api.kushkipagos.com/cobrar |
type: “INTERNAL”
| code | Description | Message | Example |
|---|---|---|---|
INT-001 | Unexpected server or application error. | Internal server error. | Internal server error. |
7. Acquirer Errors — type: “ACQUIRER”
Errors originated by the Kushki acquirer are encapsulated under type: ACQUIRER applying the following mapping rule.
Mapping Rule
- code: Original Kushki code with prefix ”ACQ-”. Example: code ”13” →
ACQ-13. - message: Same as the original message returned by Kushki.
- object: Includes at least the following fields when applicable.
Client_transaction_idterminal_idserial_number
- HTTP status: The same HTTP status originally returned by Kushki is preserved.
Mapping Example
Original Kushki error:
HTTP/1.1 400 Bad Request{"code": "13","message": "Either Invalid amount or Currency conversion field overflow"}
Mapped error — Kushki ONE Connect response:
HTTP/1.1 400 Bad Request{"type": "ACQUIRER","code": "ACQ-13","param": "","message": "Either Invalid amount or Currency conversion field overflow","object": {"client_transaction_id": "1018282","terminal_id": "172653","serial_number": "PJ715652"}}
8. Manufacturer Errors — type: “MANUFACTURER”
Manufacturer SDK errors (Sunmi, Landi) are encapsulated under type: “MANUFACTURER” with code MAN-{manufacturer_code}. Negative codes from the Sunmi SDK are documented exactly as returned by the SDK.
Mapping Rule
- code: Manufacturer SDK code with prefix ”MAN-”. Example: code ”-2001” → MAN—2001.
- message: Original message from the manufacturer SDK.
- object: Includes the following fields when applicable.
Client_transaction_idterminal_idserial_number
{"type": "MANUFACTURER","code": "MAN--2001","message": "Have no card","object": {"client_transaction_id": "c5a3f3be-9d6f-4d39-8af5-58dbb589af69","terminal_id": "172653","serial_number": "SN816265"}}
Most frequent Sunmi codes in production
| code (MAN-) | Description | Recommended action |
|---|---|---|
MAN--2001 | Have no card | The customer did not present the card. Request retry. |
MAN--2002 | Multiple cards | There is more than one card in the NFC field. Ask the customer to remove additional cards. |
MAN--2581 | User canceled | The customer canceled. Handle as an expected cancellation. |
MAN--2582 | MSR or IC interrupted | Reading interrupted. Request not to remove the card until the terminal indicates so. |
MAN--3023 | DUKPT overflow | DUKPT counter exhausted. Requires key reinjection. Contact support. |
MAN--4104 | Card is locked | Card locked. The customer must contact their bank. |
MAN--4111 | Card expired | Card expired. Inform the customer. |
MAN--4120 | Amount exceeds contactless limit | Amount exceeds NFC limit. Use chip (ICC). |
MAN--50020 | PIN entry cancel | The customer canceled PIN entry. Handle as cancellation. |
MAN--60001 | Input PIN timeout | The customer did not enter the PIN in time. Request retry. |
9. Configuration Errors — type: “CONFIGURATION”
Generated when the requested operation is not enabled for this terminal in the
DMS, or when the submitted amount exceeds the configured limits. Unlike
PARAMETER errors, these cannot be fixed by modifying the request payload —
they require a configuration change on the terminal by the Kushki Operations team.
| code | Cause | Recommended action |
|---|---|---|
-4001 | Tip is not enabled in the terminal configuration. | Contact Kushki Operations to enable the tip feature in the DMS. |
-4002 | Cashback is not enabled in the terminal configuration. | Contact Kushki Operations to enable the cashback feature in the DMS. |
-4003 | The requested cashback amount exceeds the configured maximum limit. | Inform the customer of the available limit. Do not retry with the same amount. |
-4006 | The transaction amount exceeds the configured maximum limit for this payment type. | Inform the customer. Contact Kushki Operations if the limit needs to be adjusted. |
{"type": "CONFIGURATION","code": "-4001","message": "Tip is not enabled","object": {"client_transaction_id": "c5a3f3be-9d6f-4d39-8af5-58dbb589af69","terminal_id": "172653","serial_number": "SN816265"}}
10. Quick Diagnostic Guide
When an error is received, follow these recommendations:
- Is type AUTHENTICATION? → Verify credentials (AUTH-001) or permissions (AUTH-002).
- Is type PARAMETER? → Check the field indicated in param. Add validation in the POS before calling the API.
- Is type TERMINAL and code TER-002? → The terminal is offline. Verify network connectivity.
- Is type TERMINAL and code TER-003 or TER-004? → The terminal is busy. Wait for the current operation to finish or use abort.
- Is type TERMINAL and code TER-006? → Functionality not enabled on the terminal. Contact Kushki Operations to enable.
- Is type DEVICE? → Physical hardware condition. Show the message to the operator with resolution instructions.
- Is type MANUFACTURER and code starts with MAN—200? → Card reading problem. Request retry from the customer.
- Is type MANUFACTURER and code is MAN—50020 or MAN—60001? → The customer canceled or did not enter the PIN. Treat as an expected cancellation.
- Is type ACQUIRER? → Processor rejection. Show the message to the customer. Log the code (e.g., ACQ-13) with the client_transaction_id for support.
- Is type INTERNAL or NOT_FOUND? → Log the full payload and escalate to Kushki technical support.
typeisCONFIGURATION? → The feature is not enabled on the terminal or the amount exceeds the configured limit. Do not retry with the same payload. Contact Kushki Operations to adjust the configuration in the DMS.
Chile
Colombia
Ecuador
Mexico