Private-Merchant-Id). Nunca la expongas en código de cliente o de frontend: llama siempre al endpoint de token desde tu backend.POST /card/v1/tokens desde tu backend con los datos de la tarjeta y el monto de la transacción. La respuesta devuelve un token de un solo uso, válido para un único cargo.{
"card": {
"name": "Camila Rodríguez",
"number": "5451951574925480",
"expiryMonth": "08",
"expiryYear": "28",
"cvv": "121"
},
"totalAmount": 150000,
"currency": "COP"
}⚠️ Expiración del token: Los tokens expiran en poco tiempo. Úsalos de inmediato: no los guardes para usarlos después.
POST /card/v1/charges con el token y el desglose del monto. Incluye contactDetails y, opcionalmente, orderDetails y productDetails para el scoring antifraude.{
"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"
}
}ticketNumber y un transactionReference.transactionStatus: "APPROVAL" significa que el cargo fue autorizado.{
"ticketNumber": "922513792073660814",
"transactionReference": "6f16659e-b711-4995-a9ae-161aecbd6521"
}"fullResponse": "v2" en tu request de cargo.| Moneda | Código |
|---|---|
| Peso colombiano | COP |
| Valor | Descripción |
|---|---|
CC | Cédula de Ciudadanía 🇨🇴 |
NIT | Número de Identificación Tributaria 🇨🇴 |
CE | Cédula de Extranjería 🇨🇴 |
TI | Tarjeta de Identidad 🇨🇴 |
PP | Pasaporte 🇨🇴 |
GET /card/v1/deferred/{bin}type del diferido:[
{
"months": ["2", "3", "4", "5", "6", "7"],
"monthsOfGrace": [],
"type": "all"
}
]months como campo de primer nivel en el body del cargo (no dentro del objeto deferred):{
"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"
}
}POST /card/v1/preAuthorization: reserva fondos en la tarjeta. Devuelve un ticketNumber.POST /card/v1/reauthorization: extiende la ventana de la autorización o ajusta el monto reservado. Envía el ticketNumber original.POST /card/v1/capture: captura el monto reservado (o una parte). Envía el ticketNumber original.DELETE /v1/charges/{ticketNumber}: cancela la autorización y libera los fondos reservados.| Operación | Endpoint | Notas |
|---|---|---|
| Void | DELETE /v1/charges/{ticketNumber} | Anula una transacción. Admite anulación total y parcial. |
| Refund | DELETE /v1/refund/{ticketNumber} | Devuelve los fondos al tarjetahabiente. Admite reembolso total y parcial. |
amount en el body del request con el monto parcial.transactionMode)transactionMode en la solicitud de token para flujos recurrentes o validación de tarjeta con monto cero:| Valor | Descripción |
|---|---|
initialRecurrence | Marca la primera transacción de una serie recurrente. |
subsequentRecurrence | Cargos recurrentes posteriores: no se requiere CVV una vez procesado un initialRecurrence. |
accountValidation | Validación de tarjeta con monto cero. Confirma que la tarjeta es válida sin cobrarla. |
POST /card/v2/charges acepta los datos de la tarjeta directamente en el body del request, sin necesidad de una llamada previa de token. Útil para integraciones servidor a servidor donde ya tienes los datos de la tarjeta.webhooks en tu request de cargo o de preautorización para recibir notificaciones en tiempo real:{
"webhooks": ["https://yoursite.com/kushki/notify"]
}POST a cada URL cuando cambia el estado de la transacción.| Modo | Descripción |
|---|---|
| Insecure 3DS | Kushki maneja el flujo 3DS a través de kushki.js. Incluye el jwt que obtienes de la librería al solicitar el token. |
| Motor 3DS propio | Operas tu propio servidor 3DS. Incluye los campos con el resultado de la autenticación en threeDomainSecure — cavv, eci y specificationVersion para Visa; directoryServerTransactionID, eci, ucaf, specificationVersion y collectionIndicator para Mastercard. |
05 y 06 son seguros; 07 es riesgoso.01 y 02 son seguros; 00 es riesgoso.acceptRisk: true. Al hacerlo, el comercio asume la responsabilidad ante contracargos.isNetworkToken: true en tu request de token o de cargo sin token e incluye el objeto networkToken con los metadatos adicionales:| Campo | Descripción |
|---|---|
deviceType | Tipo de dispositivo que origina la transacción tokenizada |
requestorId | ID único que la red de tarjetas asigna al solicitante del token |
source | Origen del token |
walletId | Identificador de la wallet digital: "01" para Apple Pay, "04" para otras wallets |
authenticationLevel | Nivel de autenticación realizado durante el aprovisionamiento del token |
mvv | Merchant Verification Value de 10 dígitos (solo transacciones Visa) |
cryptogram en el objeto card cuando el network token traiga un criptograma de la wallet digital o del servicio de tokens del emisor. El valor debe tener entre 20 y 28 caracteres alfanuméricos.⚠️ BETA: Esta funcionalidad está disponible en Colombia. Contacta a tu ejecutivo de cuenta de Kushki antes de habilitarla.
GET /card/v1/bin/{bin} y GET /deferred/v2/bin/{bin} devuelven los metadatos de la tarjeta (banco, marca, tipo de tarjeta, país emisor) para un BIN dado. Úsalos para determinar la elegibilidad de diferido y mostrar el logo de la marca en el checkout.totalAmount: 0. El flujo de token ejecuta una validación con monto cero contra la tarjeta.https://api.kushkipagos.com/¿Tienes una sugerencia sobre esta documentación? Escríbenos.