La aceptación de estas transacciones depende enteramente de la lógica de riesgo y políticas del emisor.
| Aplica en | Disponible | Implementación |
|---|---|---|
| Colombia 🇨🇴 México 🇲🇽 Chile 🇨🇱 Perú 🇵🇪 | ☑ Adquirente ☐ Agregador | API |
NOTA: Es requerido validar si este servicio está disponible para tu comercio y activarlo bajo demanda antes de poder usarlo.
{
"card": {
"name": "John Doe",
"number": "5451951574925480",
"expiryMonth": "05",
"expiryYear": "30"
},
"totalAmount": 50,
"currency": "PEN"
}externalSubscriptionID con el id de la suscripción de tu motor externo con una longitud igual o menor a 20 caracteres alfanuméricos, de esta forma Kushki identificará que corresponde a una subscripción administrada por un motor externo. Este parámetro lo envías al realizar el charge{
"token": "{{token}}",
"amount": {
"subtotalIva": 0,
"subtotalIva0": 50,
"ice": 0,
"iva": 0,
"currency": "PEN",
"extraTaxes": {
"iac": 0,
"tasaAeroportuaria": 0,
"agenciaDeViaje": 0
}
},
"metadata": {
"contractID": "157AB"
},
"contactDetails": {
"documentType": "PAS",
"documentNumber": "1234567890",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"phoneNumber": "+513912345678"
},
"orderDetails": {
"siteDomain": "example.com",
"shippingDetails": {
"name": "John Doe",
"phone": "+513912345678",
"address": "Av. Simón Bolivar 1515",
"city": "Lima",
"region": "Pueblo Libre",
"country": "Perú",
"zipcode": "15084"
},
"billingDetails": {
"name": "John Doe",
"phone": "+593912345678",
"address": "Av. Simón Bolivar 1515",
"city": "Lima",
"region": "Pueblo Libre",
"country": "Perú",
"zipCode": "15084"
}
},
"productDetails": {
"product": [
{
"id": "198952AB",
"title": "eBook Digital Services",
"price": 30,
"sku": "10101042",
"quantity": 1
},
{
"id": "198953AB",
"title": "eBook Virtual Selling",
"price": 20,
"sku": "004834GQ",
"quantity": 1
}
]
},
"fullResponse": "v2",
"externalSubscriptionID": "SUB1228930920"
}externalSubscriptionID| Aplica en | Disponible | Implementación |
|---|---|---|
| Colombia 🇨🇴 México 🇲🇽 Chile 🇨🇱 Perú 🇵🇪 | ☑ Adquiriencia ☐ Agregador | API |
initialRecurrence), es necesario enviar todos los datos transaccionales de la tarjeta, incluyendo el cvv y el campo transactionMode con el valor de initialRecurrence para generar un token el cuál podrá ser usado posteriormente para realizar un cargo. "card": {
"name": "John Doe",
"number": "5451951574925480",
"expiryMonth": "05",
"expiryYear": "30",
"cvv": "123"
},
"totalAmount": 50,
"currency": "PEN",
"transactionMode": "initialRecurrence"
}transactionReference en caso de una transacción aprobada ya que será requerido para realizar posteriores cargos sin cvv.{
"token": "{{token}}",
"amount": {
"subtotalIva": 0,
"subtotalIva0": 50,
"ice": 0,
"iva": 0,
"currency": "PEN",
"extraTaxes": {
"iac": 0,
"tasaAeroportuaria": 0,
"agenciaDeViaje": 0
}
},
"metadata": {
"contractID": "157AB"
},
"contactDetails": {
"documentType": "PAS",
"documentNumber": "1234567890",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"phoneNumber": "+513912345678"
},
"orderDetails": {
"siteDomain": "example.com",
"shippingDetails": {
"name": "John Doe",
"phone": "+513912345678",
"address": "Av. Simón Bolivar 1515",
"city": "Lima",
"region": "Pueblo Libre",
"country": "Perú",
"zipcode": "15084"
},
"billingDetails": {
"name": "John Doe",
"phone": "+593912345678",
"address": "Av. Simón Bolivar 1515",
"city": "Lima",
"region": "Pueblo Libre",
"country": "Perú",
"zipCode": "15084"
}
},
"productDetails": {
"product": [
{
"id": "198952AB",
"title": "eBook Digital Services",
"price": 30,
"sku": "10101042",
"quantity": 1
},
{
"id": "198953AB",
"title": "eBook Virtual Selling",
"price": 20,
"sku": "004834GQ",
"quantity": 1
}
]
},
"fullResponse": "v2"
}validateOnly en la raíz del charge del paso anterior. Kushki procesa un micro-cobro configurable por comercio y lo anula automáticamente; no se retiene ningún monto en la tarjeta del titular.validateOnly solo aplica al cargo de la recurrencia inicial (paso 3). No lo envíes en cargos de recurrencia subsecuente (paso 5).{
"token": "{{token}}",
"validateOnly": true,
"amount": {
"subtotalIva": 0,
"subtotalIva0": 50,
"ice": 0,
"iva": 0,
"currency": "MXN",
"extraTaxes": {
"iac": 0,
"tasaAeroportuaria": 0,
"agenciaDeViaje": 0
}
},
"metadata": {
"contractID": "157AB"
},
"contactDetails": {
"documentType": "PAS",
"documentNumber": "1234567890",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"phoneNumber": "+513912345678"
},
"orderDetails": {
"siteDomain": "example.com",
"shippingDetails": {
"name": "John Doe",
"phone": "+513912345678",
"address": "Av. Simón Bolivar 1515",
"city": "Lima",
"region": "Pueblo Libre",
"country": "Perú",
"zipcode": "15084"
},
"billingDetails": {
"name": "John Doe",
"phone": "+593912345678",
"address": "Av. Simón Bolivar 1515",
"city": "Lima",
"region": "Pueblo Libre",
"country": "Perú",
"zipCode": "15084"
}
},
"productDetails": {
"product": [
{
"id": "198952AB",
"title": "eBook Digital Services",
"price": 30,
"sku": "10101042",
"quantity": 1
},
{
"id": "198953AB",
"title": "eBook Virtual Selling",
"price": 20,
"sku": "004834GQ",
"quantity": 1
}
]
},
"fullResponse": "v2"
}validateOnly debe enviarse exactamente en camelCase. Si lo envías como validateonly (minúsculas), el cargo se procesa como un cargo normal y la anulación automática del micro-cobro no se activa.transactionMode con el valor de subsequentRecurrence para generar un token el cuál podrá ser usado posteriormente para realizar un cargo.{
"card": {
"name": "John Doe",
"number": "5451951574925480",
"expiryMonth": "05",
"expiryYear": "30"
},
"totalAmount": 50,
"currency": "PEN",
"transactionMode": "subsequentRecurrence"
}initialRecurrenceReference con el valor del transactionReference obtenido en la respuesta del paso 3 al realizar el charge.{
"token": "{{token}}",
"amount": {
"subtotalIva": 0,
"subtotalIva0": 50,
"ice": 0,
"iva": 0,
"currency": "PEN",
"extraTaxes": {
"iac": 0,
"tasaAeroportuaria": 0,
"agenciaDeViaje": 0
}
},
"metadata": {
"contractID": "157AB"
},
"contactDetails": {
"documentType": "PAS",
"documentNumber": "1234567890",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"phoneNumber": "+513912345678"
},
"orderDetails": {
"siteDomain": "example.com",
"shippingDetails": {
"name": "John Doe",
"phone": "+513912345678",
"address": "Av. Simón Bolivar 1515",
"city": "Lima",
"region": "Pueblo Libre",
"country": "Perú",
"zipcode": "15084"
},
"billingDetails": {
"name": "John Doe",
"phone": "+593912345678",
"address": "Av. Simón Bolivar 1515",
"city": "Lima",
"region": "Pueblo Libre",
"country": "Perú",
"zipCode": "15084"
}
},
"productDetails": {
"product": [
{
"id": "198952AB",
"title": "eBook Digital Services",
"price": 30,
"sku": "10101042",
"quantity": 1
},
{
"id": "198953AB",
"title": "eBook Virtual Selling",
"price": 20,
"sku": "004834GQ",
"quantity": 1
}
]
},
"fullResponse": "v2",
"initialRecurrenceReference": "6c21b4b4-d78d-4e50-8f89-b9f81b0ff509"
}storeCredential para que Kushki registre explícitamente el consentimiento del titular para almacenar su tarjeta y usarla en cobros futuros. La diferencia clave frente al flujo anterior es que el initialRecurrenceReference se envía en el token de la recurrencia subsecuente, y no en el charge.storeCredential: true junto con transactionMode: "initialRecurrence" al generar el token.{
"card": {
"name": "John Doe",
"number": "5451951574925480",
"expiryMonth": "05",
"expiryYear": "30",
"cvv": "123"
},
"totalAmount": 50,
"currency": "PEN",
"transactionMode": "initialRecurrence",
"storeCredential": true
}transactionReference de la respuesta.storeCredential: true, transactionMode: "subsequentRecurrence" y initialRecurrenceReference con el transactionReference guardado, esta vez dentro de la solicitud del token — no en el charge.card — Kushki usa la tarjeta ya registrada mediante initialRecurrenceReference.{
"totalAmount": 50,
"currency": "PEN",
"transactionMode": "subsequentRecurrence",
"storeCredential": true,
"initialRecurrenceReference": "6c21b4b4-d78d-4e50-8f89-b9f81b0ff509"
}initialRecurrenceReference en el charge.storeCredential debe enviarse exactamente en camelCase. Si el token inicial se envía con la grafía incorrecta (storecredential), un token de recurrencia subsecuente que lo referencie fallará con el error {"code": "K105", "message": "Decrypt error"}.