1. Kushki One
  • API Docs Peru 🇵🇪
  • Online Payments
    • Release Notes
    • Card Payments
      • Request a card token
      • Make a charge or deferred charge
      • Preauthorization (tokenless)
      • Create payment (tokenless)
      • Void a transaction
      • Refund a transaction
      • Verify Account
      • Request deferred options
      • Authorize payments
      • Reauthorize payments
      • Capture an authorized payment
      • Validate OTP
      • Bin Info V2
      • Bin Info
    • One-Click & Scheduled Payments
      • Request a recurring charge token
      • Create a recurring charge
      • Update recurring charge card data
      • Make an One-click payment
      • Cancel a recurring charge
      • Update a recurring charge
      • Add a temporary charge or discount
      • Authorize payments
      • Capture an authorized payment
      • Get recurring charge Info
    • Card Out
      • Get Card Payout Token
      • Get Subscription Token
      • Push funds
      • Push Funds in subscriptions
      • Get transaction status
      • Delete Subscription
    • Transfer In
      • Get Bank List
      • Request a Transfer In token
      • Init Transaction
      • Get Status
    • Transfer Out
      • Get Bank List
      • Get Bank List V2
      • Request a Transfer Out token
      • Init Transaction
      • Get Status
      • Balance for Payouts
    • Cash In
      • Request a cash in token
      • Init Transaction
      • Transaction Status
    • Smartlinks V2
      • Create a Smartlink
      • Update a Smartlink
      • Get a Smartlink
      • Delete a smartlink
    • Analytics
      • Get transactions list v1
      • Get transactions list v2
    • Chargebacks
      • Query Chargebacks
      • Request Chargeback Export
    • Gateway Status
      • Get gateway status
    • Payment Credentials
      • Create a credential
      • Search credentials
      • Advanced search
      • Activate or deactivate
      • Delete credential
      • Update credential
      • Regenerate a credential
    • Payment Button
      • Create a payment button
    • Platform Status
      • Get platform status
    • Subscription Transactions
      • Get subscription transactions
    • Settlement
      • Query settlement
  • Card Present Payments (API Raw)
    • Release notes
    • Key Exchange Process
    • Test data
    • Kushki Error Catalog for POS transactions
    • The Amount Object
    • One-time Payments
      • Balance inquiries
    • Two-step Payments
      • Authorization and capture
    • Voids & Refunds
      • Refund a transaction
      • Void & Reverse
    • Card information
      • Get BIN Info
      • Bin Info V2
      • Request deferred options
      • Balance inquiries
    • Query Transactions
      • Transaction Search
    • Webhooks
      • Introduction
      • Good practices
      • Refunds
      • Card Payments
      • Check your webhooks
    • Chargebacks
      • Query Chargebacks
      • Request Chargeback Export
  • Kushki One
    • Error Catalog
    • Release notes
    • Transaction Examples
    • Webhooks
    • Cloud Services
      • Payment Cloud
        • Sync
          • Charge
          • Authorization (Pre-auth)
          • Capture
          • Re-authorization
          • Post-tip
          • Refund
          • Abort
          • Void
        • Async
          • Charge (Async)
          • Authorization — Pre-auth (Async)
          • Capture (Async)
          • Re-authorization (Async)
          • Post-tip (Async)
          • Void (Async)
        • Search
          • Transaction Search
      • Print Cloud
        • Create Print Job
        • Get Print Job Status
    • Local Services
      • Payment Local
        • Sync
          • Charge
          • Authorization (Pre-auth)
          • Capture
          • Re-authorization
          • Post-tip
          • Void
          • Refund
          • Abort
        • Async
          • Charge (Async)
          • Authorization — Pre-auth (Async)
          • Capture (Async)
          • Re-authorization (Async)
          • Post-tip (Async)
          • Void (Async)
          • Abort (Async)
        • Search
          • Transaction Search — Online
          • Transaction Search — Local
      • Print Local
        • Create Print Job
        • Get Print Job Status
        • Print Job Webhook (inbound — implemented by your POS)
  • Appian - Submerchant Register
    • Submerchant Validation in Batch
    • Query submerchant status by requestId/submerchantId
    • Get submerchantIds
    • Get credentials for submerchants
  • Schemas
    • Shared
      • ErrorResponse
      • BadRequestResponse
      • InvalidBinResponse
      • payment_method
      • payment_submethod
      • messageFields
      • Channel
    • Amount & Taxes
      • Amount-cash-in
      • GetConfigurationRequest
    • Identity & Contact
      • Shipping Address
    • Card & Payments
      • ChargesVoidCardResponse
      • Promotions
      • Submerchant
    • Subscriptions
      • SubscriptionUpdate
      • SubscriptionAdjustmentRequest
      • SubscriptionTransactionsResponse
    • Webhooks
    • Analytics
      • AnalyticsTransactionItem
      • AnalyticsListResponse
    • Settlement
      • SettlementDateRangeRequest
      • SettlementTicketRequest
      • SettlementResponse
    • Chargebacks
      • ChargebackListResponse
      • ChargebackSearchRequest
    • Cash
      • CashChargeInitRequest
      • CashStatusResponse
    • Transfer
      • TransferTokenRequest
      • TransferInitRequest
      • TransferStatusResponse
    • Payouts
      • PayoutsWebhooksItem
    • Smart Link
      • SmartLinkAmount
    • Terminal
      • TerminalContactDetails
      • TerminalCardDetails
      • TerminalPosDetails
      • TransactionSearchRequest
      • TerminalCardData
    • RequestBodies
      • one-and-two-step-payment
    • SettlementDateRangeRequest
    • SubscriptionTransactionsResponse
    • card-old
    • AmountWithTaxes-old
    • Card
    • TransactionResponse
    • PrintJobRequest
    • metadata
    • one-and-two-step-payment
    • Shipping Address
    • transactionType
    • ChargebackItem-old
    • SubscriptionTransaction
    • amount
    • AmountCore-old
    • CommandText-old
    • networkToken
    • Language
    • extra_taxes
    • card_details
    • CommandText
    • RawResponse
    • currency
    • ErrorResponse400-old
    • webhooksItem
    • ErrorResponse
    • SettlementResponse
    • extra_taxes-old
    • ExtraTaxes-old
    • CommandColumns-old
    • currency
    • card
    • CommandColumns
    • CardData
    • orderDetails-old
    • Country
    • ErrorResponse401-old
    • SettlementRecord
    • pos_details-old
    • ColumnItem-old
    • Amount
    • LinkFailure
    • amount
    • ColumnItem
    • documentType
    • extraTaxes-old
    • ErrorResponse403-old
    • card_details-old
    • TransactionResponse-old
    • CommandDivider-old
    • extraTaxes
    • enc_tlv
    • CommandDivider
    • TransactionEvent
    • payment_method
    • ErrorResponse500-old
    • threeDomainSecure
    • enc_tlv
    • RawResponse-old
    • CommandFeed-old
    • Deferred
    • pos_details
    • deferred
    • CommandFeed
    • TransactionStatus
    • binInfo
    • contact_details-old
    • CardData-old
    • CommandSpace-old
    • contact_details
    • CommandSpace
    • ReadingType
    • Billing-Address-old
    • Deferred-old
    • deferred-old
    • sub_merchant
    • AmountWithTip-old
    • CommandCut-old
    • sub_merchant
    • CommandCut
    • FailureReason
    • headers
    • Amount-old
    • metadata
    • LinkFailure-old
    • CommandImage-old
    • CommandImage
    • EventTerminal
    • ContactDetails-old
    • SubscriptionUpdate
    • TransactionSearchRequest-old
    • CommandQR-old
    • orderDetails
    • Subscription
    • CommandQR
    • EventOperation
    • payment_submethod
    • citMit
    • SubscriptionAdjustmentRequest
    • CommandBarcode-old
    • Shipping Address
    • CommandBarcode
    • EventAmount
    • messageFields
    • PrinterError-old
    • Billing Address
    • EventExtraTaxes
    • PrintJobAccepted
    • webhooksChargeback
    • Language
    • PrintJobStatus-old
    • PrinterError
    • EventMetadata
    • webhooks
    • networkToken-old
    • PrintWebhookPayload-old
    • threeDomainSecure
    • AmountWithTaxes
    • PrintJobStatus
    • PrintJobStatusRequest
    • webhooks
    • AmountCore
    • product-old
    • headers
    • PrintWebhookPayload
    • ExtraTaxes
    • Metadata
    • webhooksChargeback
    • UnexpectedErrorResponse-old
    • citMit
    • AmountWithTip
    • network
    • TransactionSearchBody
    • TransactionSearchOnlineBody
    • Card-old-old
    • binInfo
    • AmountWithOptionalTip
    • TransactionSearchLocalBody
    • messageFields
    • TransactionEvent_2
    • Promotions-old
    • UnexpectedErrorResponse
    • FailureReason_2
    • transactionType
    • EventTerminal_2
    • EventOperation_2
    • InvalidBinResponse-old
    • EventAmount_2
    • EventExtraTaxes_2
    • EventMetadata_2
    • currency
    • Amount-CL-old
    • SettlementTicketRequest
    • metadata
    • payment_method
    • currency
    • currency
    • Submerchant
    • Shipping Address
    • GetConfigurationRequest-old
    • BadRequestResponse
    • ContactDetails
    • product
    • TransactionEvent_21
    • TransactionStatus2
    • ReadingType3
    • FailureReason_24
    • EventTerminal_25
    • EventOperation_26
    • EventAmount_27
    • EventMetadata_28
    • EventExtraTaxes_29
    • PrintWebhookPayload10
    • TransactionEvent11
    • FailureReason12
    • EventTerminal13
    • EventOperation14
    • EventAmount15
    • EventMetadata16
    • EventExtraTaxes17
BienvenidaPerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
BienvenidaPerú 🇵🇪
México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴Chile 🇨🇱
  1. Kushki One

Error Catalog

Beta — Early Access
Kushki ONE is currently in Beta for Peru 🇵🇪. Endpoints, parameters and response structures may change without prior notice. Do not deploy to production without coordinating with the Kushki integration team.
Kushki ONE Connect simplifies error handling with a single structured JSON model that standardizes every failure response — regardless of whether the problem originated in the terminal, a validation, authentication, or the acquirer. This lets you build more robust integrations, automate recovery flows, and stop relying solely on HTTP status codes.
This catalog is your primary diagnostic tool. It covers the error model structure, per-category code catalogs, how we map third-party rejections, and a quick-reference troubleshooting guide.

All errors share the same response structure. Always evaluate type first to classify the failure source, then look up the corresponding code.
FieldTypeAlways presentDescription
typeString✅Error category. Identifies the failure source. See Section 2.
codeString✅Unique error code. Format: prefix + number (e.g. PAR-001, TER-002, ACQ-13).
paramString❌The exact field or parameter that caused the error. Used primarily in PARAMETER errors.
messageString✅Human-readable description of the failure reason.
objectObject❌Traceability data. Includes client_transaction_id, terminal_id and serial_number when applicable.
INFO
HTTP status code: the HTTP status is consistent with the type in the body. For ACQUIRER errors, the original HTTP status 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": "c5a3f3be-9d6f-4d39-8af5-58dbb589af69",
    "terminal_id": "172653",
    "serial_number": "PJ715652"
  }
}

2. Error categories (type field)#

typeOriginDescription
PARAMETERValidationIncorrect field submission: empty required fields, wrong type, or invalid format.
TERMINALTerminalPhysical terminal cannot accept the requested operation: busy, offline, not linked, incompatible mode.
AUTHENTICATIONSecurityUnable to authenticate the caller, or insufficient permissions to execute the action.
NOT_FOUNDRoutingService or endpoint not found. Invalid URL.
ACQUIRERAcquirerErrors related to transaction processing or authorization by the Kushki acquirer. Code prefixed ACQ-.
INTERNALApplicationUnexpected errors: services down, internal application errors.
CONFIGURATIONDMS configurationThe requested operation is not enabled, or exceeds the configured limits for this terminal in DMS.
TERMINAL-PRINTERHardwareErrors from the integrated thermal printer (no paper, cover open, paper jam, etc.).
MANUFACTURERHardware SDKErrors from the manufacturer SDK (Sunmi, Landi). Code prefixed MAN-.

3. Validation errors — type: "PARAMETER"#

Generated when the request contains fields with incorrect format, out-of-range values, or missing required fields. The param field identifies the specific field that caused the error. All PARAMETER errors are 100% preventable by validating the payload before calling the API.
codeDescriptionMessage templateExample
PAR-001Required field not sent.Field {{field}} is required.Field amount.subtotal_iva0 is required.
PAR-002Field of incorrect type.Field {{field}} must be a/an {{type}}Field amount.subtotal_iva must be an integer.
PAR-002Field with incorrect format or invalid value.Field {{field}} must satisfy: {{condition}}Field amount.iva must satisfy: value >= 0.

3.1 System format codes#

codeDescription
BAD_FORMATJSON/JVM parse error. The request body is not valid JSON, or contains an incorrect data type in a field.
BUSYThe terminal is processing another request. Retry once the terminal becomes available.

3.2 Amount and payment field validators#

CodeFieldError messageApplies to
2001amount.currencyInvalid currency. Expected: PENAll
2002amount.ivaamount.iva cannot be negativeAll
2003amount.subtotalIvaamount.subtotalIva cannot be negativeAll
2004amount.subtotalIva0amount.subtotalIva0 cannot be negativeAll
2005amount.tipamount.tip cannot be negativepos_tip and /async/charge
2006airportTaxairportTax cannot be negativeAll
2007iaciac cannot be negativeAll
2008iceice cannot be negativeAll
2009travelAgencytravelAgency cannot be negativeAll
2012deferredMonthsdeferredMonths must be > 0 when isDeferred is trueAll
2013cashbackAmountcashbackAmount must be > 0 when isCashback is truepos_tip and /async/charge
tip and cashback_amount are not accepted everywhere
amount.tip (code 2005) and cashback_amount (code 2013) are accepted by pos_tip and by /async/charge only. The sync charge and both variants of authorization do not carry them — sending them there is a validation error. Tip and cashback additionally require the matching capability enabled in DMS; see Section 9.
INFO
The currency in Peru is PEN. It is not sent in the payload — it comes from the terminal's DMS configuration, so a 2001 means the terminal is configured for a different market than the one you are integrating.

3.3 Transaction identifier validators#

CodeFieldError message
2010clientTransactionIdclientTransactionId must be a valid UUID format
2011clientTransactionIdclientTransactionId is required
2014transactionReferencetransactionReference must be a valid UUID format
2015transactionReferencetransactionReference is required

3.4 Pagination and date validators#

CodeFieldError message
2016pagepage must be greater than 0
2017sizesize must be greater than 0
2018sizesize must not exceed 500
2019start_datestart_date cannot be negative
2020end_dateend_date cannot be negative
2021start_datestart_date must be before end_date
INFO
Date filters in transaction search are Unix timestamps interpreted in the terminal's local time — America/Lima for Peru. See Transaction Search.

3.5 Configuration validators#

CodeFieldError message
2022envenv is required
2023privateCredentialIdprivateCredentialId is required
2024countrycountry is required
2025pinTimeOutpinTimeOut cannot be negative
2026cardDetectTimeOutcardDetectTimeOut cannot be negative
2027pinKeyIndexpinKeyIndex cannot be negative
2028dataKeyIndexdataKeyIndex cannot be negative
2029timeoutSecondstimeoutSeconds cannot be negative
2030maxChipRetriesmaxChipRetries cannot be negative
2031countryCodecountryCode must be 3 uppercase letters or 3-4 digits (ISO 3166-1)
2032currencyCodecurrencyCode must be 3 uppercase letters or 3-4 digits (ISO 4217)
2033merchantIdmerchantId cannot be blank
2034terminalIdterminalId cannot be blank
2035terminalTypeterminalType cannot exceed 2 characters
2036CardInputAt least one card input method (ICC, NFC, MSR) must be enabled
2037timeoutSecondstimeoutSeconds cannot exceed 300 seconds (5 minutes)
INFO
These are DMS configuration fields, validated when a terminal is provisioned. privateCredentialId is a terminal configuration value — it is never used to sign requests. The signing key is the Business-Code.

4. Terminal errors — type: "TERMINAL"#

Generated when the physical terminal cannot accept the requested operation. Unlike hardware errors, these indicate a state or connectivity problem with the terminal, not a component failure.
codeDescriptionMessage templateExample
TER-001Terminal 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-002Terminal 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-003Terminal busy processing a transaction.Terminal {{serial_number}} is busy processing transaction (client_transaction_id: {{id}}).Terminal SN71652 is busy processing transaction (client_transaction_id: c5a3f3be-9d6f-4d39-8af5-58dbb589af69).
TER-004Terminal busy with a non-payment action.Terminal {{serial_number}} is busy executing action {{action}}.Terminal JH152353 is busy executing action PRINT.
TER-005Terminal 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-006Terminal not enabled for that operation type.The terminal is not allowed to process {{type}}.The terminal is not allowed to process TIP.
INFO
The terminal handles one transaction at a time. TER-003 and TER-004 are the expected answer when your POS sends a second command before the first completes — wait, or call abort.

5. Authentication errors — type: "AUTHENTICATION"#

Generated when credentials are invalid or lack sufficient permissions to execute the requested action.
codeDescriptionMessage
AUTH-001Credentials cannot be authenticated.Invalid or expired credentials
AUTH-002Credentials are valid but lack permission for the action.Your credentials are valid but do not grant access to this resource.
{
  "type": "AUTHENTICATION",
  "code": "AUTH-001",
  "message": "Invalid or expired credentials"
}
The most common causes of AUTH-001 are a body re-serialized after signing, a timestamp outside the ±5 minute window, and signing with the private_credential_id instead of the Business-Code. See Required headers.
Security
Never log the full value of the Authorization header in production. Only log its presence or absence for diagnostic purposes.

6. Routing and internal errors#

type: "NOT_FOUND"#

codeDescriptionMessage templateExample
NF-001Service or endpoint not found.Service not found: {{url}}Service not found: https://cloudt.kushkipagos.com/cobrar

type: "INTERNAL"#

codeDescriptionMessage
INT-001Unexpected server or application error.Internal server error.

7. Acquirer errors — type: "ACQUIRER"#

Errors originating from the Kushki acquirer are encapsulated under type: "ACQUIRER" using the following mapping rule.

Mapping rule#

code: original Kushki code prefixed with ACQ-. Example: code "13" → ACQ-13.
message: same message originally returned by Kushki.
object: includes at least client_transaction_id, terminal_id and serial_number when applicable.
HTTP status: the original HTTP status 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 response from Kushki ONE Connect:
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": "c5a3f3be-9d6f-4d39-8af5-58dbb589af69",
    "terminal_id": "172653",
    "serial_number": "PJ715652"
  }
}
INFO
ACQ-13 in a PEN market is very often a minor-unit mistake rather than a real acquirer problem — check the amount against Building the amount before escalating.

8. Manufacturer errors — type: "MANUFACTURER"#

Errors from the manufacturer SDK (Sunmi, Landi) are encapsulated under type: "MANUFACTURER" with code MAN-{manufacturer_code}. Sunmi SDK codes are negative, so the resulting code carries two hyphens.

Mapping rule#

code: manufacturer SDK code prefixed with MAN-. Example: code "-2001" → MAN--2001.
message: original message from the manufacturer SDK.
object: includes client_transaction_id, terminal_id and serial_number when applicable.
{
  "type": "MANUFACTURER",
  "code": "MAN--2001",
  "message": "Have no card",
  "object": {
    "client_transaction_id": "c5a3f3be-9d6f-4d39-8af5-58dbb589af69",
    "terminal_id": "172653",
    "serial_number": "SN816265"
  }
}
INFO
Sunmi SDK codes are read-only. They are intended for diagnostic and logging purposes only.

Most frequent Sunmi codes in production#

codeDescriptionRecommended action
MAN--2001Have no cardCustomer did not present the card. Request retry.
MAN--2002Multiple cardsMore than one card in the NFC field. Ask the customer to remove additional cards.
MAN--2581User canceledCustomer canceled. Handle as an expected cancellation.
MAN--2582MSR or IC interruptedRead interrupted. Ask the customer not to remove the card until the terminal prompts them.
MAN--3023DUKPT overflowDUKPT counter exhausted. Key re-injection required. Contact support.
MAN--4104Card is lockedCard blocked. Customer must contact their bank.
MAN--4111Card expiredCard expired. Inform the customer.
MAN--4120Amount exceeds contactless limitAmount exceeds the NFC limit. Use chip (ICC).
MAN--50020PIN entry cancelCustomer canceled PIN entry. Handle as cancellation.
MAN--60001Input PIN timeoutCustomer did not enter PIN in time. Request retry.
INFO
For the complete Sunmi code catalog by functional range (card reading, cryptography, EMV, PIN, Android permissions), ask your Kushki integration team for the full Sunmi Error Catalog.

9. Configuration errors — type: "CONFIGURATION"#

Generated when the requested operation is not enabled for this terminal in DMS, or when the sent amount exceeds configured limits. Unlike PARAMETER errors, these are not fixed by modifying the payload — they require a configuration change by the Kushki Operations team.
codeCauseRecommended action
-4001Tip is not enabled in the terminal configuration.Contact Kushki Operations to enable tip functionality in DMS.
-4002Cashback is not enabled in the terminal configuration.Contact Kushki Operations to enable cashback functionality in DMS.
-4003Cashback amount exceeds the configured maximum limit.Inform the customer of the available limit. Do not retry with the same amount.
-4006Transaction amount exceeds the configured maximum for this payment type.Inform the customer. Contact Kushki Operations if the limit needs adjustment.
{
  "type": "CONFIGURATION",
  "code": "-4001",
  "message": "Tip is not enabled",
  "object": {
    "client_transaction_id": "c5a3f3be-9d6f-4d39-8af5-58dbb589af69",
    "terminal_id": "172653",
    "serial_number": "SN816265"
  }
}
INFO
These errors are not resolved in code. A CONFIGURATION error means the feature exists but is not active for this terminal. The fix always goes through DMS — not through modifying the request. Note that when a capability is simply absent the terminal may also ignore the field rather than reject the call, so do not rely on a tip being applied without checking the response.

10. Printer errors — type: "TERMINAL-PRINTER"#

Errors generated by the integrated thermal printer hardware. These codes are standardized regardless of the terminal manufacturer, and they also arrive on the print webhook as errorCode.
codeCauseRecommended action for the operator
OUT_OF_PAPERNo paper roll loaded.Insert a new roll and retry.
COVER_OPENPaper compartment cover is open.Close the cover firmly.
COVER_INCOMPLETECover improperly closed, or roller not applying pressure.Open and close again, ensuring the roller latches correctly.
PAPER_JAMPaper jammed in the mechanism.Remove the jammed paper and close. Insert a new roll.
BUSYQueue occupied with skipIfBusy: true.Retry in a few seconds.
PRINTER_HOTThermal printhead overheated.Wait 2–3 minutes and retry.
MOTOR_HOTFeed motor overheated.Wait for cool-down.
CUTTER_ERRORAuto-cutter blade jammed.Requires technical service intervention.
OFFLINEModule not responding to the Android system.Restart the terminal.

11. Quick diagnostic guide#

When you receive an error, follow these recommendations:
type is AUTHENTICATION? → Verify credentials (AUTH-001) or permissions (AUTH-002). Check that you signed with the Business-Code and did not re-serialize the body.
type is PARAMETER? → Review the field indicated in param. Add validation in the POS before calling the API.
type is PARAMETER, code is 2001? → The terminal is configured for a currency other than PEN. Escalate to Kushki Operations; this is not fixable from the payload.
type is TERMINAL, code is TER-002? → Terminal is offline. Check network connectivity.
type is TERMINAL, code is TER-003 or TER-004? → Terminal is busy. Wait for the current operation to finish, or use abort.
type is TERMINAL, code is TER-006? → Feature not enabled on this terminal. Contact Kushki Operations.
type is TERMINAL-PRINTER? → Physical hardware condition. Show the message to the operator with resolution instructions.
type is MANUFACTURER, code starts with MAN--200? → Card read problem. Ask the customer to retry.
type is MANUFACTURER, code is MAN--50020 or MAN--60001? → Customer canceled or did not enter PIN. Treat as an expected cancellation.
type is ACQUIRER? → Processor rejection. Show the message to the customer. Log the code (e.g. ACQ-13) with the client_transaction_id for support.
type is INTERNAL or NOT_FOUND? → Log the full payload and escalate to Kushki technical support.
type is CONFIGURATION? → Feature not enabled, or amount exceeds a configured limit. Do not retry with the same payload. Contact Kushki Operations to adjust the DMS configuration.
INFO
Best practice: always log type + code + message + object.client_transaction_id + timestamp in your logging system. This information is essential for fast diagnosis.

Errors delivered on the webhook#

On an async operation, a failure does not arrive as an HTTP error — it arrives as an event. TERMINAL_REJECTED and DECLINED carry a failure_reason object with the same type, code and message documented above:
{
  "status": "TERMINAL_REJECTED",
  "previous_status": "CARD_PRESENTED",
  "failure_reason": {
    "type": "MANUFACTURER",
    "code": "MAN--60001",
    "message": "Input PIN timeout"
  }
}
Resolve failure_reason.code against this catalog exactly as you would an HTTP error body. See Webhooks.

Related#

Webhooks
Where failure_reason arrives, and how to build an idempotent consumer.
Transaction Examples
Copy-ready requests, and the amount conversion rules for PEN.

Got a suggestion on this documentation? Contact us.
Modified at 2026-08-24 16:20:23
Previous
Kushki One
Next
Release notes
Built with