1. Online Payments
English
  • English
  • Español
  • API Docs Colombia 🇨🇴
  • Online Payments
    • Release Notes
    • Kushki API errors
    • ISO errors
    • 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 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
    • Fraud Report
      • Query fraud alerts
  • Kushki One
    • Release notes
    • Transaction Examples
    • Webhooks
    • Error Catalog
    • Cloud Services
      • Payment
        • Sync
          • Charge
          • Authorization (Pre-auth)
          • Capture
          • Re-authorization
          • Post-tip
          • Void
          • 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
      • Diagnostics
        • Terminal info
        • Connection test
    • Local Services
      • Payment
        • Sync
          • Charge
          • Authorization (Pre-auth)
          • Capture
          • Re-authorization
          • Post-tip
          • Void
          • 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)
      • Diagnostics
        • Terminal info
        • Connection test
  • 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
    • Fraud Report
      • Query fraud alerts
  • Appian - Submerchant Register
    • Release Notes
    • 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
    • PrintJobRequest
    • card
    • amount
    • one-and-two-step-payment-3
    • Card Present (CP)
    • one-and-two-step-payment-3
    • FraudAlertRequest
    • TransactionResponse
    • SubscriptionTransaction
    • networkToken
    • ChargebackItem
    • SettlementRecord
    • CommandText
    • Card Not Present (CNP)
    • FraudAlertResponse
    • RawResponse
    • ErrorResponse
    • currency
    • Deferred
    • webhooksItem
    • ErrorResponse400
    • SettlementResponse
    • CommandColumns
    • extra_taxes
    • FraudAlertRecord
    • CardData
    • Amount
    • ErrorResponse401
    • ColumnItem
    • pos_details
    • ValidationError
    • LinkFailure
    • extraTaxes
    • ErrorResponse403
    • CommandDivider
    • card_details
    • enc_tlv
    • TransactionEvent
    • 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
    • EventMetadata
    • PrinterError
    • threeDomainSecure
    • SubscriptionAdjustmentRequest
    • AmountWithTaxes
    • PrintJobStatus
    • PrintJobStatusRequest
    • product
    • webhooks
    • AmountCore
    • headers
    • ExtraTaxes
    • PrintWebhookPayload
    • Metadata
    • webhooksChargeback
    • citMit
    • AmountWithTip
    • TransactionSearchOnlineBody
    • TransactionSearchBody
    • binInfo
    • AmountWithOptionalTip
    • TransactionSearchLocalBody
    • messageFields
    • TransactionEvent_2
    • UnexpectedErrorResponse
    • FailureReason_2
    • transactionType
    • ExternalReferenceId
    • EventTerminal_2
    • ExternalSubscriptionId
    • EventOperation_2
    • EventAmount_2
    • EventExtraTaxes_2
    • EventMetadata_2
    • SettlementTicketRequest
    • network
    • 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
HomePerú 🇵🇪México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴
Chile 🇨🇱
HomePerú 🇵🇪México 🇲🇽Ecuador 🇪🇨Colombia 🇨🇴
Chile 🇨🇱
Status
Soporte / Support
English
  • English
  • Español
  1. Online Payments

Card Payments

The Card API lets you tokenize card data and process payments securely. All sensitive card information is handled by Kushki — your server only sends the token.
Keep in mind!
Token generation requires your Private Key (Private-Merchant-Id). Never expose it in client-side or frontend code — always call the token endpoint from your backend.

Payment flow#

1
Request a card token
Call POST /card/v1/tokens from your backend with the card data and transaction amount. The response returns a one-time token valid for a single charge.
{
  "card": {
    "name": "Camila Rodríguez",
    "number": "5451951574925480",
    "expiryMonth": "08",
    "expiryYear": "28",
    "cvv": "121"
  },
  "totalAmount": 150000,
  "currency": "COP"
}
⚠️ Token expiry: Tokens expire after a short window. Use them immediately — do not store them for later use.
2
Make a charge
Call POST /card/v1/charges with the token and amount breakdown. Include contactDetails and, optionally, orderDetails and productDetails for fraud scoring.
{
  "token": "f5c64f7ac8ea42d5a58dcdc74de973dc",
  "amount": {
    "subtotalIva": 0,
    "subtotalIva0": 150000,
    "ice": 0,
    "iva": 0,
    "currency": "COP"
  },
  "contactDetails": {
    "documentType": "CC",
    "documentNumber": "1234567890",
    "firstName": "Camila",
    "lastName": "Rodríguez",
    "email": "user@example.com",
    "phoneNumber": "+573001234567"
  }
}
A successful charge returns a ticketNumber and transactionReference.
3
Handle the response
Check transactionStatus — "APPROVAL" means the charge was authorized.
{
  "ticketNumber": "922513792073660814",
  "transactionReference": "6f16659e-b711-4995-a9ae-161aecbd6521"
}
For the full response (card details, bank name, amounts), include "fullResponse": "v2" in your charge request.

Currencies#

Colombia supports one currency:
CurrencyCode
Colombian PesoCOP

Document types#

ValueDescription
CCCédula de Ciudadanía 🇨🇴
NITNúmero de Identificación Tributaria 🇨🇴
CECédula de Extranjería 🇨🇴
TITarjeta de Identidad 🇨🇴
PPPassport 🇨🇴

Deferred charges (Installments)#

Colombia supports deferred payments (cuotas). First call the deferred options endpoint to check which installment plans are available for the customer's card BIN, then include the plan in the charge request.

Step 1 — Check available plans#

GET /card/v1/deferred/{bin}
Response includes available months and the deferred type:
[
  {
    "months": ["2", "3", "4", "5", "6", "7"],
    "monthsOfGrace": [],
    "type": "all"
  }
]

Step 2 — Submit the charge#

Aggregator model
Acquirer model
Send months as a top-level field in the charge body (not inside a deferred object):
{
  "token": "24e5cc0d47fc4b2ab098bdb7d0b94569",
  "amount": {
    "subtotalIva": 0,
    "subtotalIva0": 300000,
    "ice": 0,
    "iva": 0,
    "currency": "COP"
  },
  "months": 3,
  "contactDetails": {
    "documentType": "CC",
    "documentNumber": "1234567890",
    "firstName": "Camila",
    "lastName": "Rodríguez",
    "email": "user@example.com",
    "phoneNumber": "+573001234567"
  }
}

Pre-authorization flow#

Use pre-authorization to reserve funds without capturing them immediately.
1
Authorize
POST /card/v1/preAuthorization — Reserves funds on the card. Returns a ticketNumber.
2
Reauthorize (optional)
POST /card/v1/reauthorization — Extends the authorization window or adjusts the reserved amount. Pass the original ticketNumber.
3
Capture
POST /card/v1/capture — Captures the reserved amount (or a partial amount). Pass the original ticketNumber.
4
Void (if not capturing)
DELETE /v1/charges/{ticketNumber} — Cancels the authorization and releases the reserved funds.

Void and Refund#

OperationEndpointNotes
VoidDELETE /v1/charges/{ticketNumber}Cancel a transaction. Supported: total and partial void.
RefundDELETE /v1/refund/{ticketNumber}Return funds to the cardholder. Supported: total and partial refund.
For a partial void or refund, include the amount object in the request body with the partial amount.

Recurring charges and card validation (transactionMode)#

Include transactionMode in the token request for recurring flows or zero-amount card validation:
ValueDescription
initialRecurrenceMarks the first transaction in a recurring series.
subsequentRecurrenceSubsequent recurring charges — CVV is not required once an initialRecurrence has been processed.
accountValidationZero-amount card validation. Confirms the card is valid without charging it.

Tokenless charge (v2)#

POST /card/v2/charges accepts card data directly in the request body — no prior token call required. Useful for server-to-server integrations where you already hold the card data.

Webhooks#

Include a webhooks array in your charge or pre-auth request to receive real-time notifications:
{
  "webhooks": ["https://yoursite.com/kushki/notify"]
}
Kushki sends a POST to each URL when the transaction status changes.

3D Secure#

Colombia supports two 3DS modes:
ModeDescription
Insecure 3DSKushki handles the 3DS flow through kushki.js. Include the jwt obtained from the library when requesting the token.
Own 3DS engineYou run your own 3DS server. Include the authentication result fields in threeDomainSecure — cavv, eci, and specificationVersion for Visa; directoryServerTransactionID, eci, ucaf, specificationVersion, and collectionIndicator for Mastercard.
ECI values:
Visa — 05 and 06 are secure; 07 is risky.
Mastercard — 01 and 02 are secure; 00 is risky.
To process a risky transaction, also send acceptRisk: true. By doing so the merchant assumes liability for chargebacks.

Network Tokens (BETA)#

For a complete explanation of both ways to use network tokens (bring your own token, or let Kushki create one), see Network Tokens.
Colombia supports processing transactions with network-tokenized cards (tokens provisioned by Visa or Mastercard through digital wallets like Apple Pay).
To use this feature, set isNetworkToken: true in your token or tokenless charge request and include the networkToken object with the additional metadata:
FieldDescription
deviceTypeType of device originating the tokenized transaction
requestorIdUnique ID assigned to the token requestor by the card network
sourceSource of the token
walletIdDigital wallet identifier — "01" for Apple Pay, "04" for other wallets
authenticationLevelAuthentication level performed during token provisioning
mvv10-digit Merchant Verification Value (Visa transactions only)
Also include the cryptogram field on the card object when the network token carries a cryptogram from the digital wallet or issuer token service. The value must be between 20 and 28 alphanumeric characters.
⚠️ BETA: This feature is available in Colombia. Contact your Kushki account manager before enabling it.

BIN info#

GET /card/v1/bin/{bin} and GET /deferred/v2/bin/{bin} return card metadata (bank, brand, card type, issuing country) for a given BIN. Use this to determine deferred eligibility and display the card brand logo at checkout.

Account verification#

To verify a card without charging it, request a token with totalAmount: 0. The token flow runs a zero-amount validation against the card.

Authentication#


Using the API#

🟢 Production
🧪 Sandbox (UAT)
https://api.kushkipagos.com/

Available Endpoints#

Request a Card Token
Tokenize card data. Returns a one-time token for a single charge.
Make a Charge
Charge a card using a token. Supports single charges, deferred installments, 3DS, webhooks, and fraud scoring.
Tokenless Charge (v2)
Submit card data and charge in a single call — no prior token required.
Void a Transaction
Cancel a transaction before settlement. Supports total and partial void.
Refund a Transaction
Return funds to the cardholder. Supports total and partial refund.
Request Deferred Options
Returns available installment plans for a card BIN. Call before submitting a deferred charge.
Pre-Authorization
Reserve funds without capturing immediately.
Tokenless Pre-Authorization (v2)
Pre-authorize with card data directly — no prior token step.
Reauthorize
Extend or adjust a pending authorization.
Capture
Capture a previously authorized amount.
Account Verification
Verify a card with a zero-amount token request.
Validate OTP
Validate a one-time password for OTP-based 3DS flows.
BIN Info
Get card metadata (bank, brand, type, country) by BIN.
BIN Info v2
Extended BIN lookup including deferred eligibility.

Got a suggestion on this documentation? Contact us.
Modified at 2026-10-08 17:04:38
Previous
ISO errors
Next
Request a card token
Built with