1. Kushki One
  • API Docs Colombia 🇨🇴
  • Online Payments
    • Release Notes
    • Card Payments
      • Request a card token
      • Make a charge or deferred charge
      • Create payment (tokenless)
      • Void a transaction
      • Refund a transaction
      • Request deferred options
      • Authorize payments
      • Preauthorization (tokenless)
      • Reauthorize payments
      • Capture an authorized payment
      • Verify Account
      • Validate OTP
      • Bin Info
      • BIN info V2
    • One-Click & Scheduled Payments
      • Request a recurring charge token
      • Create a recurring charge
      • Make an One-click payment
      • Update recurring charge card data
      • Cancel a recurring charge
      • Update a recurring charge
      • Add a temporary charge or discount
      • Authorize payments
      • Capture an authorized payment
      • Get recurring charge Info
    • Chargebacks
      • Query chargebacks
      • Request chargeback export
    • 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
      • Delete a cash in transaction
      • Update a cash in transaction
    • Cash-out
      • Request a cash out token
      • Init Transaction
      • Transaction Status
      • Update a cash out transaction
      • Delete a cash out transaction
    • Smartlinks-v2
      • Create a Smartlink
      • Get a Smartlink
      • Update a Smartlink
      • Delete a smartlink
    • Analytics
      • Get transactions list v1
      • Get transactions list v2
    • Gateway-status
      • Get gateway status
      • Get platform status
    • Payment Credentials
      • Create a credential
      • Search credentials
      • Advanced search
      • Delete credential
      • Regenerate a credential
      • Activate or deactivate
      • Update credential
    • Payment Button
      • Create a payment button
    • Settlement
      • Query settlement
    • Subscription Transactions
      • Get subscription transactions
  • Kushki One
    • Cloud Services
      • Payment
        • Charge
        • Authorization (Pre-auth)
        • Capture
        • Re-authorization
        • Post-tip
        • Void
        • Refund
        • Abort
        • Transaction Search
      • Print
        • Create Print Job
        • Get Print Job Status
    • Local Services
      • Payment
        • Charge
        • Authorization (Pre-auth)
        • Capture
        • Re-authorization
        • Post-tip
        • Void
        • Refund
        • Abort
        • Transaction Search — Online
        • Transaction Search — Local
      • Print
        • Create Print Job
        • Get Print Job Status
        • Print Job Webhook (inbound — implemented by your POS)
  • API RAW CARD PRESENT PAYMENTS
    • Release Notes
    • Error Catalog
    • The Amount Object
    • Key Exchange Process
    • Test data
    • Card Information
      • Get BIN Info
      • Balance inquiries
      • BIN info V2
      • Request deferred options
    • One-time Payments
      • Single payment
    • Two-step Payments
      • Authorization and capture
    • Voids & Refunds
      • Void & Reverse
      • Refund a transaction
    • Query Transactions
      • Transaction Search
    • Webhooks
      • Introduction
      • Good Practices
      • Webhooks-Card Payments
      • Webhooks-Refunds
      • Check your webhooks
  • Appian - Submerchant Register
    • Submerchant Validation in Batch
    • Query submerchant status by requestId/submerchantId
    • Get submerchantIds
    • Get credentials for submerchants
  • Schemas
    • RequestBodies
      • one-and-two-step-payment
    • SubscriptionTransactionsResponse
    • Card
    • Channel
    • Amount-cash-in
    • ChargebackListResponse
    • SettlementDateRangeRequest
    • AmountWithTaxes
    • PrintJobRequest
    • card
    • SubscriptionTransaction
    • networkToken
    • ChargebackItem
    • SettlementTicketRequest
    • AmountCore
    • CommandText
    • amount
    • ErrorResponse
    • currency
    • webhooksItem
    • ErrorResponse400
    • SettlementResponse
    • ExtraTaxes
    • CommandColumns
    • extra_taxes
    • Amount
    • ErrorResponse401
    • SettlementRecord
    • ColumnItem
    • pos_details
    • extraTaxes
    • ErrorResponse403
    • TransactionResponse
    • CommandDivider
    • card_details
    • Deferred
    • Country
    • payment_method
    • ErrorResponse500
    • RawResponse
    • CommandFeed
    • enc_tlv
    • Metadata
    • CardData
    • CommandSpace
    • contact_details
    • ContactDetails
    • AmountWithTip
    • CommandCut
    • deferred
    • sub_merchant
    • documentType
    • Subscription
    • LinkFailure
    • CommandImage
    • metadata
    • orderDetails
    • Language
    • TransactionSearchRequest
    • CommandQR
    • Shipping Address
    • payment_submethod
    • CommandBarcode
    • Billing-Address
    • PrinterError
    • product
    • SubscriptionUpdate
    • PrintJobStatus
    • threeDomainSecure
    • SubscriptionAdjustmentRequest
    • PrintWebhookPayload
    • webhooks
    • headers
    • webhooksChargeback
    • citMit
    • network
    • binInfo
    • messageFields
    • UnexpectedErrorResponse
    • transactionType
    • ExternalReferenceId
    • ExternalSubscriptionId
BienvenidaPerú 🇵🇪México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴
Chile 🇨🇱
BienvenidaPerú 🇵🇪México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴
Chile 🇨🇱
  1. Kushki One

Local Services

Kushki ONE Local Services let your POS communicate directly with the SmartPOS terminal over your local LAN or Wi-Fi. Your server calls the terminal's IP address, the terminal processes the request using its EMV kernel and acquirer connection, and returns the result synchronously.
Beta
Kushki ONE Local Services are in Beta phase for Colombia 🇨🇴. Contact your account manager before deploying to production.
Three APIs are available in Local Network mode:
APIWhat it doesAuth
Payments APICard payments — charge, pre-auth, capture, void, refund, and moreHMAC-SHA256 (Business-Code)
Transaction SearchQuery transactions from the backend (online) or from terminal storage (offline)HMAC-SHA256 (Business-Code)
Print APISend structured receipt jobs to the terminal's thermal printerNone

Terminal setup#

Before making API calls, configure the terminal in DMS:
SettingDescription
Static IP / DHCP reservationAssign a fixed IP to the terminal on your local network
PortDefault 6868 — configurable in DMS
CurrencySet at terminal level — not sent in the request body
Tips & cashbackConfigured in DMS (v1.2.0+) — not sent in the request body
Base URL:
http://{terminalIp}:{port}
Default example: http://192.168.1.50:6868

Payments API#

Available operations#

Charge
Single or deferred card charge in one step. Tip and cashback are configured in DMS.
Authorization
Place a hold on the card without capturing funds. Use before Capture or Re-authorization.
Capture
Capture a previously authorized amount. Maximum = 110% of total authorized (including re-authorizations). One capture per authorization cycle.
Re-authorization
Extend or increase an existing authorization before capture. Debit cards: 7-day limit. Credit cards: 28-day limit.
Void
Cancel an authorization or same-day charge before settlement. Colombia cutoff: 23:59 local time.
Refund
Refund a settled transaction — full or partial. Requires transaction_reference from the original charge or authorization response.
Abort
Cancel a transaction currently in progress on the terminal (e.g., customer walks away mid-flow).
POS Tip
Display a tip entry screen on the terminal and retrieve the amount the customer selected before charging.

Payment request structure#

All payment operations use the same endpoint. transaction_type and transaction_mode determine the operation:
{
  "transaction_type": "charge",
  "transaction_mode": "Authorization",
  "client_transaction_id": "550e8400-e29b-41d4-a716-446655440000",
  "amount": {
    "iva": 19000,
    "subtotal_iva": 100000,
    "subtotal_iva0": 0
  }
}
INFO
The amount object does not include a currency field — currency is configured at the terminal level in DMS.

Key concepts#

transaction_reference — save it always#

Every approved charge or authorization response includes a rawResponse.transaction_reference. Persist this value — it is required to void, refund, capture, or re-authorize that transaction.

Void cutoff — Colombia#

CountryCutoff
Colombia 🇨🇴23:59 local time
Peru20:59 local time
Chile23:59 local time
Void requests submitted after the cutoff are rejected. Use Refund instead for same-day transactions past the cutoff.

Pre-authorization lifecycle#

Card typeMaximum holdCapture limit
Debit7 days110% of total authorized
Credit28 days110% of total authorized
Only one capture is allowed per authorization cycle. Multiple re-authorizations are permitted before capture.

Idempotency#

Every request must include a unique client_transaction_id (UUID v4). Reusing the same ID on a retry returns the original result without creating a duplicate.

Tips, cashback, and installments#

As of v1.2.0, tip and cashback amounts are configured in DMS and entered by the customer on the terminal natively — they are not sent in the request body. Installment options are also configured per terminal in DMS.

Transaction Search#

Local Network mode provides two transaction search endpoints — choose based on your connectivity situation:
Transaction Search (Online)
Queries Kushki's acquirer backend. Returns full transaction history with all statuses and amounts. Requires internet connectivity.
Transaction Search (Local)
Queries transactions stored on the terminal itself. Works offline — no internet required. Limited to the terminal's local storage window.

Online vs Local — when to use each#

OnlineLocal
SourceKushki acquirer backendTerminal storage
Works offline❌✅
Full history✅Limited to terminal storage window
Use caseReconciliation, reporting, end-of-daySame-day recovery, offline fallback

Request structure (Online)#

{
  "from": "2026-01-01T00:00:00",
  "to": "2026-01-31T23:59:59",
  "page": 1,
  "page_size": 50
}

Request structure (Local)#

{
  "from": "2026-01-01T00:00:00",
  "to": "2026-01-01T23:59:59",
  "page": 1,
  "page_size": 50
}

Print API#

Control the terminal's thermal printer directly over the local network. Print jobs are asynchronous — the terminal returns 202 Accepted immediately and delivers the final status via webhook or polling.
INFO
The Print API does not require authentication — requests are trusted based on local network access.

Available operations#

Create Print Job
Send an ordered commands array to the terminal's thermal printer. Returns 202 immediately — printing executes asynchronously.
Get Print Job Status
Poll the current status of a queued print job using print_job_id. Returns PENDING, COMPLETED, or FAILED.
Print Job Webhook
Endpoint in your POS system that receives the async result when a job finishes. The terminal POSTs here when the job completes or fails. Implement this to avoid polling.

Print request structure#

{
  "printJobId": "RECEIPT-20260101-001",
  "webhookUrl": "https://pos.micomercio.co/webhooks/print",
  "skipIfBusy": false,
  "commands": [
    { "type": "text",    "text": "MI COMERCIO COLOMBIA\n", "align": "CENTER", "size": 32, "bold": true },
    { "type": "text",    "text": "NIT: 900.123.456-7\n",   "align": "CENTER", "size": 20 },
    { "type": "divider", "dividerType": "SOLID" },
    { "type": "columns", "columns": [
        { "text": "Producto A", "weight": 2, "align": "LEFT" },
        { "text": "$ 30.000",   "weight": 1, "align": "RIGHT" }
    ]},
    { "type": "divider", "dividerType": "DOTTED" },
    { "type": "columns", "columns": [
        { "text": "TOTAL",    "weight": 2, "align": "LEFT" },
        { "text": "$ 30.000", "weight": 1, "align": "RIGHT" }
    ]},
    { "type": "text", "text": "APROBADO\n", "align": "CENTER", "size": 28, "bold": true },
    { "type": "qr",  "content": "https://micomercio.co/factura/001", "dotSize": 6, "align": "CENTER" },
    { "type": "feed", "lines": 4 },
    { "type": "cut" }
  ]
}

Print command types#

typeDescription
textText line — size, alignment, bold, italic, underline
columnsMulti-column row with proportional widths — ideal for item/price lines
dividerFull-width separator: SOLID, DOTTED, or EMPTY
feedAdvance paper N blank lines
spaceInsert pixel-precise vertical whitespace
cutTrigger the auto-cutter (silently ignored on cutterless terminals)
imagePrint a Base64-encoded PNG/JPG — typically for merchant logos (max 384 px wide)
qrGenerate a QR code natively in hardware
barcodeGenerate a CODE128 barcode natively in hardware

Print best practices#

PracticeReason
Always end with feed (≥ 3 lines) + cutEnsures content clears the tear edge before cutting
Always set printJobIdEnables idempotent retries — terminal deduplicates by this ID
Set skipIfBusy: false for payment receiptsPrevents a busy queue from silently discarding a receipt
Use BINARIZATION algorithm for logosSharper edges on monochrome thermal paper
Use qr / barcode over image for codesNative hardware generation is faster and higher density

Print webhook payload#

When the job finishes, the terminal POSTs to your webhookUrl:
{
  "printJobId": "RECEIPT-20260101-001",
  "status": "COMPLETED",
  "externalReference": "Order-4421"
}
On failure:
{
  "printJobId": "RECEIPT-20260101-001",
  "status": "FAILED",
  "externalReference": "Order-4421",
  "errorCode": "OUT_OF_PAPER",
  "errorMessage": "The printer is out of paper. Insert a roll and try again."
}
Your webhook endpoint must return HTTP 2xx. If the webhook does not arrive within ~60 seconds, use GET /terminal/v1/print_job?print_job_id={id} as fallback.

Authentication#

APIHeaderKey
Payments APIAuthorization + timestampBusiness-Code
Transaction SearchAuthorization + timestampBusiness-Code
Print API—No authentication required
Sign the raw request body bytes using HMAC-SHA256. The key is your Business-Code.
WARNING
timestamp must be in milliseconds (13 digits). A 10-digit seconds value will be rejected.
The signing key for Local mode is Business-Code — different from Cloud mode, which uses Private-Credential-Id.

Environments#

🔌 Local Network
http://{terminalIp}:6868
Connect directly to your terminal's IP address. There is no separate UAT URL — use a designated test terminal.

Got a suggestion on this documentation? Contact us.
Modified at 2026-07-10 16:02:50
Previous
Get Print Job Status
Next
Payment
Built with