Private-Merchant-Id). Never expose it in client-side or frontend code — always call the token endpoint from your backend.POST /cash/v1/tokens with the customer's personal details and the total amount. Kushki returns a single-use token that expires in 30 minutes.{
"name": "Carlos",
"lastName": "Ramirez",
"identification": "12345678",
"documentType": "DNI",
"email": "user@example.com",
"totalAmount": 500,
"currency": "PEN",
"description": "Order #1234"
}{
"token": "b209ff69ae02be9bc0e58dee225fd8f5"
}POST /cash/v1/charges/init with the token and the amount breakdown. Kushki returns a PIN that the customer uses to pay at the collection point, plus a receipt URL.{
"token": "b209ff69ae02be9bc0e58dee225fd8f5",
"amount": {
"currency": "PEN",
"subtotalIva": 0,
"subtotalIva0": 500,
"iva": 0,
"ice": 0
},
"expirationDate": "2026-06-10 00:00:00",
"fullResponse": "v2"
}{
"pin": "7929926379",
"ticketNumber": "193222411482",
"transactionReference": "fa3cb92f-f53f-46e8-a9f9-0c40e9ae2df2",
"pdfUrl": "https://api.kushkipagos.com/cash/v1/charges/193222411482/receipt"
}pin and pdfUrl (receipt) with your customer. The PIN is valid until expirationDate (default 7 days; maximum 15 days in Peru).GET /cash/v1/status/{ticketNumber} to confirm the final status of the transaction.{
"ticketNumber": "2347529752172881",
"status": "approvedTransaction",
"totalAmount": 500,
"currency": "PEN",
"merchantName": "Mi Comercio Perú",
"name": "Carlos",
"lastName": "Ramirez",
"documentType": "DNI",
"identification": "12345678",
"pin": "7929926379"
}| Field | Required | Description |
|---|---|---|
name | Yes | Customer's first name. |
lastName | Yes | Customer's last name. |
identification | Yes | Customer's document number. |
documentType | Yes | DNI, CE, PAS, or RUC. |
totalAmount | Yes | Total amount to collect. |
currency | Yes | PEN or USD. |
email | No | Customer's email address. |
description | No | Payment description. |
| Field | Required | Description |
|---|---|---|
token | Yes | One-time token from the token endpoint. |
amount | Yes | Amount object — see Amount breakdown. |
expirationDate | No | PIN expiry date in YYYY-MM-DD HH:mm:ss (UTC). Must be at least one day after creation. Default: 7 days; max 15 days in Peru. |
webhooks | No | Array of URLs to notify when the customer pays. |
fullResponse | No | Pass "v2" for full transaction details in the response. |
metadata | No | Custom key-value pairs for your own tracking. |
{
"currency": "PEN",
"subtotalIva": 0,
"subtotalIva0": 500,
"iva": 0,
"ice": 0
}| Field | Required | Description |
|---|---|---|
currency | Yes | PEN or USD. |
subtotalIva | Yes | Subtotal subject to VAT. Set to 0 if no taxes apply. |
subtotalIva0 | Yes | Subtotal not subject to VAT (tax-exempt amount). |
iva | Yes | VAT amount. Set to 0 if no taxes apply. |
ice | Yes | ICE (Impuesto a Consumos Especiales). Set to 0 if not applicable. |
| Value | Description |
|---|---|
DNI | Documento Nacional de Identidad 🇵🇪 |
CE | Carné de Extranjería 🇵🇪 |
PAS | Pasaporte 🇵🇪 |
RUC | Registro Único de Contribuyentes 🇵🇪 |
webhooks array in your init request to receive a notification when the customer completes payment:{
"webhooks": ["https://yoursite.com/kushki/notify"]
}identification values to simulate different transaction outcomes:identification | Simulated outcome |
|---|---|
| Any valid value | Successful transaction |
9999999999 | Initialized (pending payment) |
1000000000 | Declined transaction |
https://api.kushkipagos.com/Got a suggestion on this documentation? Contact us.