1. Colombia 🇨🇴
  • 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. Colombia 🇨🇴

Kushki One

Kushki ONE is a semi-integrated payment solution for Sunmi SmartPOS terminals (P3, P2 SE). Your POS system sends commands to the terminal via HTTP — either through Kushki's cloud infrastructure or directly over your local network — and the terminal handles card reading, PIN entry, EMV processing, and thermal printing natively.
Beta
Kushki ONE is currently in Beta phase. Contact your account manager to request access before deploying to production.

Connectivity modes#

Kushki ONE supports two integration modes. Choose based on your infrastructure:
Cloud ModeLocal Network Mode
Your server connects tocloudt.kushkipagos.comTerminal IP directly
Terminal identified bySerial number in URL pathIP address + port 6868
Works without internet❌✅ (local connection)
Print auth required✅ HMAC-SHA256❌
Payment auth keyPrivate-Credential-IdBusiness-Code

Payment operations#

The following operations are available in both Cloud and Local modes.
Charge
Single or deferred card charge in one step. Supports tip and cashback (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 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.

Transaction search#

OperationAvailable inSourceWorks offline
Transaction SearchCloud + LocalKushki acquirer backend❌
Transaction Search (Local)Local onlyTerminal storage✅
The local search endpoint queries transactions stored on the terminal itself — useful as an offline fallback or for same-day recovery.

Print operations#

Both Cloud and Local modes support thermal printer control. Print jobs are asynchronous — the terminal returns 202 Accepted immediately and delivers the final status via webhook or polling.
Create Print Job
Send an ordered commands array describing the receipt layout. The terminal queues and executes it asynchronously.
Get Print Job Status
Poll the current status of a queued job using printJobId. Returns PENDING, COMPLETED, or FAILED.
Print Job Webhook
The terminal POSTs to your webhookUrl when the job finishes. Implement this in your POS to avoid polling. (Local mode only)

Print command types#

Every print job is an ordered commands array. The type field on each object determines how it renders:
typeDescription
textText line — configurable 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
qrGenerate a QR code natively in hardware
barcodeGenerate a CODE128 barcode natively in hardware
{
  "printJobId": "RECEIPT-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": "S/ 30.00", "weight": 1, "align": "RIGHT" }
    ]},
    { "type": "text", "text": "APROBADO\n", "align": "CENTER", "size": 28, "bold": true },
    { "type": "qr", "content": "https://micomercio.co/factura/4421", "dotSize": 6, "align": "CENTER" },
    { "type": "feed", "lines": 4 },
    { "type": "cut" }
  ]
}

How it works#

All payment responses are synchronous — the terminal returns the result only once the EMV transaction is complete. Print jobs are asynchronous — the terminal responds immediately and you receive the result later.
── Payment flow ──────────────────────────────────────
1. POST /terminal/v1/[serial/]sync
   → Terminal reads card, processes EMV
   ← Returns result synchronously

2. Save rawResponse.transaction_reference
   → Required for void, refund, capture, re_authorization

── Print flow ────────────────────────────────────────
3. POST /terminal/v1/[serial/]sync/print/job  (Cloud)
   POST /terminal/v1/print                    (Local)
   ← 202 Accepted, status: PENDING

4. Terminal POSTs to webhookUrl  — OR —  you poll job_status
   ← status: COMPLETED | FAILED

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 later.

Idempotency#

Every payment request must include a unique client_transaction_id (UUID v4). Reusing the same ID on a retry is safe — the terminal returns the original result without creating a duplicate.
Print jobs use printJobId for the same purpose. If omitted, the terminal auto-generates a UUID.

Void cutoff — Colombia#

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

Amount object#

The amount field does not include a currency — currency is configured at the terminal level in DMS.
"amount": {
  "iva": 0,
  "subtotal_iva": 0,
  "subtotal_iva0": 500
}

Tips, cashback, and installments#

As of v1.2.0, tip and cashback amounts are configured in DMS and displayed by the terminal natively — they are no longer sent in the request body. Installment (deferred) options are also configured per terminal in DMS.

Terminal setup#

Terminals are enrolled and configured through Kushki's Device Management System (DMS):
SettingDescription
CurrencySet at terminal level — not in request body
Tips & cashbackConfigured in DMS (v1.2.0+)
Local IPAssign a static IP or DHCP reservation
PortDefault 6868 (configurable in DMS)
Serial numberUsed to identify terminal in Cloud mode URL

Supported hardware#

TerminalChip (ICC)Mag Stripe (MCR)Contactless (NFC)Thermal Printer
Sunmi P3✅✅✅✅ (384 px)
Sunmi P2 SE✅✅✅✅ (384 px)

Authentication#

Both modes use HMAC-SHA256 — different from the Online Payments Private-Merchant-Id header.
ModeSigning key
Cloud (Payment + Print)Private-Credential-Id
Local (Payment only)Business-Code
Local (Print)No authentication required
WARNING
timestamp must be in milliseconds (13 digits). Seconds (10 digits) will be rejected.

Environments#

🟢 Production (Cloud)
🧪 Sandbox (Cloud)
🔌 Local Network
https://cloudt.kushkipagos.com

Got a suggestion on this documentation? Contact us.
Modified at 2026-06-02 17:33:06
Previous
Get subscription transactions
Next
Cloud Services
Built with