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
      • Cancel Transaction
    • 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
    • Error Catalog
    • Release notes
    • Transaction Examples
    • Webhooks
    • Cloud Services
      • Payment
        • 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)
        • Search
          • Transaction Search
      • Print
        • Create Print Job
        • Get Print Job Status
    • Local Services
      • Payment
        • 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
        • 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
    • One-time Payments
      • Single payment
    • Two-step Payments
      • Authorization and capture
    • Card Information
      • Get BIN Info
      • BIN info V2
      • Request deferred options
    • Voids & Refunds
      • Void & Reverse
      • Refund a transaction
    • Query Transactions
      • Transaction Search
    • Webhooks
      • Introduction
      • Good Practices
      • Webhooks-Card Payments
      • Webhooks-Refunds
      • Check your webhooks
    • Chargebacks
      • Query Chargebacks
      • Request Chargeback Export
  • 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
    • TransactionResponse
    • PrintJobRequest
    • card
    • amount
    • one-and-two-step-payment-3
    • SubscriptionTransaction
    • networkToken
    • ChargebackItem
    • SettlementRecord
    • RawResponse
    • CommandText
    • ErrorResponse
    • currency
    • webhooksItem
    • ErrorResponse400
    • SettlementResponse
    • CardData
    • CommandColumns
    • extra_taxes
    • Amount
    • ErrorResponse401
    • LinkFailure
    • ColumnItem
    • pos_details
    • extraTaxes
    • ErrorResponse403
    • CommandDivider
    • card_details
    • enc_tlv
    • TransactionEvent
    • Deferred
    • Country
    • payment_method
    • ErrorResponse500
    • CommandFeed
    • deferred
    • TransactionStatus
    • CommandSpace
    • contact_details
    • ReadingType
    • ContactDetails
    • CommandCut
    • sub_merchant
    • FailureReason
    • documentType
    • Subscription
    • CommandImage
    • metadata
    • EventTerminal
    • orderDetails
    • Language
    • TransactionSearchRequest
    • CommandQR
    • EventOperation
    • Shipping Address
    • payment_submethod
    • CommandBarcode
    • EventAmount
    • Billing-Address
    • EventExtraTaxes
    • PrintJobAccepted
    • SubscriptionUpdate
    • PrinterError
    • EventMetadata
    • threeDomainSecure
    • SubscriptionAdjustmentRequest
    • AmountWithTaxes
    • PrintJobStatus
    • PrintJobStatusRequest
    • product
    • webhooks
    • AmountCore
    • headers
    • ExtraTaxes
    • PrintWebhookPayload
    • Metadata
    • webhooksChargeback
    • citMit
    • AmountWithTip
    • network
    • TransactionSearchBody
    • TransactionSearchOnlineBody
    • binInfo
    • AmountWithOptionalTip
    • TransactionSearchLocalBody
    • messageFields
    • TransactionEvent_2
    • UnexpectedErrorResponse
    • FailureReason_2
    • transactionType
    • ExternalReferenceId
    • EventTerminal_2
    • ExternalSubscriptionId
    • EventOperation_2
    • EventAmount_2
    • EventExtraTaxes_2
    • EventMetadata_2
    • SettlementTicketRequest
    • Amount-old
    • currency
    • extraTaxes2
    • currency
    • ErrorResponse
    • TransactionEvent_23
    • TransactionStatus4
    • ReadingType5
    • FailureReason_26
    • EventTerminal_27
    • EventOperation_28
    • EventAmount_29
    • EventMetadata_210
    • EventExtraTaxes_211
    • PrintWebhookPayload12
    • TransactionEvent13
    • FailureReason14
    • EventTerminal15
    • EventOperation16
    • EventAmount17
    • EventMetadata18
    • EventExtraTaxes19
BienvenidaPerú 🇵🇪México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴
Chile 🇨🇱
BienvenidaPerú 🇵🇪México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴
Chile 🇨🇱
  1. Colombia 🇨🇴

API Raw Card Present

The Card Present Raw API gives you direct, low-level access to Kushki's payment infrastructure for processing face-to-face card transactions in Colombia. You own the full integration stack — terminal firmware, DUKPT encryption, card reading, and request construction — and get maximum flexibility in return.
A single base URL and a single main endpoint cover the whole payment lifecycle: one-time charges, two-step authorize-and-capture, reversals, voids, refunds, and transaction queries — across chip (ICC), magnetic stripe (MCR), and contactless (NFC) reading channels.

Available operations#

One-Time Payments
Immediate charges — single, deferred, with cashback, or with tip — in a single API call.
Two-Step Payments
Place a hold (pre-authorization), then capture when ready. Supports reauthorization.
Voids & Refunds
Reverse a transaction with an unknown outcome, void it the same day, or refund a settled payment — full or partial.
Query Transactions
Search and paginate through POS terminal transactions with filters by date, BIN, card digits, or reference.

How it works#

All Card Present operations are sent to the same endpoint and share a common request structure built around four objects: the transaction intent, the amount, the card data, and the terminal details.
{
  "transaction_type": "charge",
  "transaction_mode": "Authorization",
  "country": "COL",
  "client_transaction_id": "6680eadc-6c8d-44aa-8ca0-18e061c1472a",
  "amount": {
    "currency": "COP",
    "subtotal_iva": 0,
    "subtotal_iva0": 50000,
    "iva": 0,
    "tip": 0
  },
  "card_details": {
    "reading_type": "ICC",
    "enc_tlv": "<encrypted-tlv>",
    "pin_ksn": "<ksn-value>",
    "tracks": {
      "enc_track2": "<encrypted-track2>",
      "track_ksn": "<ksn-value>"
    }
  },
  "cvm_type": "pin",
  "contact_details": {
    "document_type": "0",
    "document_number": "1234567890",
    "first_name": "Andrés",
    "last_name": "Martínez",
    "second_last_name": "Rojas",
    "email": "user@example.com",
    "phone_number": "+573912345678"
  },
  "pos_details": {
    "brand": "SUNMI",
    "model": "P2-EU",
    "version": "Kushki SunmiV1.1.28",
    "has_print": true,
    "terminal_id": "PB04209860189",
    "location": {
      "latitude": 4.7110,
      "longitude": -74.0721
    }
  }
}
Required at the root: amount, card_details, client_transaction_id, country, pos_details, contact_details, transaction_type, and cvm_type.

Key concepts#

Currency#

Colombia uses COP (Colombian Peso). Amounts are sent in whole pesos — no decimals.
"amount": {
  "currency": "COP",
  "subtotal_iva": 0,
  "subtotal_iva0": 50000,
  "iva": 0
}
Keep in mind!
Do not pad amounts with 00 to simulate cents — 50000 is fifty thousand pesos, not five hundred. Padding would charge your customer 100× the intended amount.
Taxes travel inside amount: iva, subtotal_iva, subtotal_iva0, and the optional extra_taxes object (iac, ice, airport_tax, travel_agency). Set to 0 any tax that does not apply to the transaction.

Reading channels#

Set card_details.reading_type to indicate how the card was presented at the terminal.
ValueChannelRequired card data
ICCChip (EMV)enc_tlv, pin_ksn, tracks.enc_track2, tracks.track_ksn
MCRMagnetic stripetracks.enc_track1, tracks.enc_track2
NFCContactlessenc_tlv, tracks.enc_track2, tracks.track_ksn

Cardholder verification (cvm_type)#

ValueMeaning
pinOnline PIN — encrypted PIN block sent in card_details.pin_block
signatureSignature at the terminal
noneNo CVM (e.g., low-value or contactless transactions)

Cardholder identification (contact_details)#

contact_details is required in Colombia, and document_type is the only mandatory field inside it.
document_typeMeaning
-1No document is sent — document_number is not required
0DNI — document_number is required (Colombia only)
1Passport — document_number is required (Colombia only)
document_number accepts up to 11 characters. second_last_name applies only in Colombia. phone_number follows the E.164 standard (+573912345678).

Transaction types and modes#

FieldAllowed values
transaction_typecharge, preAuth, capture, reAuthorization, refund
transaction_modeAuthorization, Reverse, Void

Deferred charges#

To defer a payment, send is_deferred: true and the deferred object with the number of installments agreed with the cardholder:
"is_deferred": true,
"deferred": {
  "months": "10"
}
WARNING
Colombia does not use credit_type or graceMonths — those belong to Cuotas Comercio in Chile and MSI in Mexico. Sending only months is enough.

Cashback#

Colombia supports cashback at the time of a card-present payment. Send is_cashback: true and the amount in cashback_amount.
Important
Cashback works only with local cards.
Cashback is not supported for contactless transactions — make sure reading_type is not NFC.

Tips#

Tips are charged inline with the payment: include the value in amount.tip on the original charge. There is no separate post-tip operation in Colombia.

Reversal, void, and refund#

Which operation applies depends on the day and time the original transaction and the cancellation request are processed.
OperationWhen it applies
ReversalThe processing time was exceeded and the outcome of the charge is unknown (e.g., a timeout). Same day only, before 23:59 — wait at least 1 minute after the transaction before reversing. Send transaction_mode: "Reverse" and the original client_transaction_id.
VoidThe transaction is known to be approved and is cancelled the same day, before 23:59 (approximate) — the exact cutoff depends on the processor. Up to 3 attempts are made; once approved, the charge disappears from the cardholder's statement. Send transaction_mode: "Void" and the original transaction_reference.
RefundRequested after the void cutoff, on a different day, or after the 3 void attempts were exhausted. Maximum 120 days from the original transaction. Partial refunds are supported by including the amount object.
Refunds are the only operation sent to a different path:
WARNING
Cardless operations (omit_card: true) are not available in Colombia. They are generally available in Chile and in Beta in Mexico and Peru. Every void, reversal, refund, capture, and reauthorization in Colombia requires reading the card.

Idempotency#

Every request must include a unique client_transaction_id (UUID v4). Reusing the same ID on a retry is safe — Kushki returns the result of the original transaction instead of creating a duplicate.

Integration models#

ModelDescriptionRequired fields
AcquirerDirect integration — the merchant is registered with KushkiStandard request body
AggregatorMarketplace / payment facilitator — sub-merchants transact under your umbrellaAdd the sub_merchant object to the request

Aggregator — sub_merchant object#

"sub_merchant": {
  "mcc": "5411",
  "id_affiliation": "987654321",
  "soft_descriptor": "Mi Comercio Colombia",
  "city": "Bogotá",
  "country_ans": "COL",
  "zip_code": "110221",
  "address": "Cra. 7 #71-52",
  "social_reason": "Mi Comercio Colombia S.A.S.",
  "code": "SUB001COL"
}
mcc is a 4-character Merchant Category Code, country_ans follows ISO 3166-1 alpha-3, and social_reason applies only to Visa transactions.

Encryption#

Card data — TLV, track data, and PIN blocks — must be encrypted with the DUKPT (Derived Unique Key Per Transaction) protocol before being sent to the API. Track data must be encrypted in hexadecimal format, replacing = with a capital D. Kushki and your organization exchange Base Derivation Keys (BDK) through a secure Key Encryption Key (KEK) ceremony before going live.
See Key Exchange Process for the step-by-step procedure.

Webhooks#

Kushki sends POST notifications to your configured endpoint for every Card Present event: charges, pre-authorizations, captures, reversals, voids, and refunds.
WARNING
Card Present webhooks can only be configured through the Console (Developers > Webhooks). Webhook setup via API is not supported.
See Webhooks — Introduction for authentication headers, signature verification, and static IPs.

Authentication#

Every request must include your merchant credential in the header:
OperationHeader
Charges, pre-authorizations, captures, reversals, voids, refundsPrivate-Credential-Id: <your-private-credential>
Query transactions (analytics)Private-Credential-Id: <your-private-credential>

Environments#

🟢 Production
🧪 Sandbox (UAT)
🔬 Visa / MC Certification
https://api.kushkipagos.com/

Additional resources#

Amount Object
Full field reference for the amount object — IVA, subtotals, tip, and extra taxes.
Key Exchange Process
DUKPT/KEK ceremony required before processing live transactions.
Test Data
Amounts and card scenarios for sandbox testing in Colombia.
Error Catalog
HTTP status codes and ISO error codes for Visa and Mastercard.
Good Practices
Security and integration best practices for Card Present.
Release Notes
Version history and changelog for the Card Present API in Colombia.

Got a suggestion on this documentation? Contact us.
Modified at 2026-08-26 03:49:22
Previous
Print Job Webhook (inbound — implemented by your POS)
Next
Release Notes
Built with