Los pagos en dos pasos te permiten separar la autorización (retención) de la captura (cobro). Úsalos cuando necesites confirmar la transacción antes de cobrar: por ejemplo, en check-in, estaciones de servicio u hotelería.Los pagos presenciales están en fase Beta.
Flujo#
1. POST /pos/v1/transaction (transaction_type: "preAuth") → hold funds
2. POST /pos/v1/transaction (transaction_type: "capture") → collect
También puedes reautorizar — extender una retención existente — o anularla antes de la captura.
Paso 1 — Preautorización#
Pon transaction_type: "preAuth" y transaction_mode: "Authorization".{
"transaction_type": "preAuth",
"transaction_mode": "Authorization",
"country": "PER",
"client_transaction_id": "a0e1b2c3-d4e5-6789-abcd-ef0123456789",
"amount": {
"currency": "PEN",
"subtotal_iva": 0,
"subtotal_iva0": 250,
"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",
"pos_details": {
"brand": "SUNMI",
"model": "P2-EU",
"version": "1.1.13",
"has_print": true
}
}
La respuesta devuelve un ticketNumber que necesitarás para el paso de la captura.
Paso 2 — Captura#
Pon transaction_type: "capture" y envía el ticketNumber de la preautorización.{
"transaction_type": "capture",
"transaction_mode": "Authorization",
"country": "PER",
"client_transaction_id": "b1f2c3d4-e5f6-7890-bcde-f01234567890",
"amount": {
"currency": "PEN",
"subtotal_iva": 0,
"subtotal_iva0": 250,
"iva": 0,
"tip": 0
},
"card_details": {
"reading_type": "ICC"
},
"pos_details": {
"brand": "SUNMI",
"model": "P2-EU",
"version": "1.1.13",
"has_print": true
}
}
Reautorización#
Para extender una retención existente, usa transaction_type: "reAuthorization". Envía el ticketNumber original.
Captura / reautorización sin tarjeta#
Para las operaciones sin tarjeta (no se requiere leer la tarjeta física al momento de la captura), pon omit_card: true. Los campos card_details y cvm_type son opcionales en este caso.
Campos del request#
| Campo | Obligatorio | Descripción |
|---|
transaction_type | Sí | "preAuth" para retener, "capture" para cobrar, "reAuthorization" para extender. |
transaction_mode | Sí | "Authorization" para continuar; "Void" para anular una preautorización. |
country | Sí | ISO 3166-1 alpha-3. Debe ser "PER". |
client_transaction_id | Sí | UUID v4 generado por el comercio. Debe ser único por transacción. |
cvm_type | No | Método de verificación del tarjetahabiente: "none", "pin" o "signature". Opcional para operaciones sin tarjeta. |
omit_card | No | true para hacer una captura o reautorización sin tarjeta. |
is_cashback | No | true para incluir un monto de cashback en la captura. |
cashback_amount | No | Obligatorio cuando is_cashback es true. |
metadata | No | Objeto llave-valor con datos adicionales. |
amount#
| Campo | Obligatorio | Descripción |
|---|
currency | Sí | "PEN" o "USD". |
subtotal_iva | Sí | Subtotal afecto a IGV. Ponlo en 0 si no aplica IGV. |
subtotal_iva0 | Sí | Subtotal no afecto a IGV (monto total cuando no hay impuesto). |
iva | Sí | Monto del IGV. Ponlo en 0 si no aplica IGV. |
tip | No | Monto de la propina. |
extra_taxes | No | Impuestos adicionales: airport_tax, iac, ice, travel_agency. |
card_details#
| Campo | Obligatorio | Descripción |
|---|
reading_type | No | "ICC", "MCR" o "NFC". |
enc_tlv | No | Datos TLV cifrados (ICC y NFC). |
pin_block | No | PIN block cifrado para transacciones con PIN en línea. |
pin_ksn | No | KSN del PIN block. |
tracks.enc_track2 | No | Datos del Track 2 cifrados (MCR y NFC). |
tracks.track_ksn | No | KSN del Track 2. |
pos_details#
| Campo | Obligatorio | Descripción |
|---|
brand | No | Marca de la terminal (por ejemplo, "SUNMI"). |
model | No | Modelo de la terminal. |
version | No | Versión del software de la terminal. |
has_print | No | true si la terminal tiene impresora. |
terminal_id | No | ID de la terminal, hasta 15 caracteres. |
connectivity | No | Tipo de conectividad de red. |
serial | No | Número de serie del dispositivo. |
location | No | { "latitude": ..., "longitude": ... } — coordenadas GPS de la terminal. |
Autenticación#
Usar la API#
https://api.kushkipagos.com/
Endpoints disponibles#
Preautorización, captura y reautorización
Retén el saldo de una tarjeta (preAuth), cobra los fondos (capture), extiende una retención (reAuthorization) o anula una preautorización: todo con el mismo endpoint.
¿Tienes una sugerencia sobre esta documentación? Escríbenos.