Crear sesión de checkout
Crea una sesión de checkout (cargo único) y el payment intent asociado. Devuelve checkout_url para Checkout.js o pay.kuti.pe.
POSThttps://api.kuti.pe/v1/checkout-sessions
Autoriza con secret o publishable key. amount.currency: solo PEN por ahora. Idempotency-Key recomendada. El checkout_url ya incluye el client_secret para abrir el modal/embed.
Parámetros del body
Campo
Descripción
amountobjectrequerido
Monto a cobrar.
amountstringrequerido
Decimal como string.Ej:
249.90currencystringrequerido
Solo PEN por ahora.Ej:
PENpayment_method_typesarrayrequerido
INTEROPERABLE_QR y/o BANK_TRANSFER.Ej:
["INTEROPERABLE_QR", "BANK_TRANSFER"]customerobjectopcional
Opcional — misma forma que POST /customers, todo opcional (con solo correo o teléfono se crea un cliente sin nombre). Orden: id (cus_… existente) → external_id → documento → crea uno. Si envías id, se ignora el resto.
idstringopcional
Customer existente (cus_…). Preferido si ya lo creaste con POST /customers.Ej:
cus_01J8Z3K4M5N6P7Q8R9S0T1U2V3external_idstringopcional
Id en tu sistema.Ej:
cust_erp_4821first_namestringopcional
Nombres.Ej:
Maríalast_namestringopcional
Apellidos.Ej:
Lópezdocumentobjectopcional
Documento { type, number, country } — type opcional (se deduce del número). Reutiliza al cliente si ya existe.
emailstringopcional
Correo.Ej:
maria@example.comphonestringopcional
E.164.Ej:
+51987654321custom_fieldsobjectopcional
Campos personalizados que definiste en Ajustes → Clientes → Campos (ver Campos de cliente). Objeto { key: valor }: texto, número como texto ("12.5"), fecha "YYYY-MM-DD", hora "HH:mm", true/false, key de opción (SELECT; también acepta la etiqueta) o lista de keys (MULTISELECT). Una key desconocida o un valor inválido devuelve 422 con el detalle custom_fields.<key>.Ej:
{"grade": "quinto", "student_code": "2026-00781"}descriptionstringopcional
Texto del cobro.Ej:
Pedido #1042external_referencestringopcional
Referencia en tu sistema.Ej:
order-1042success_urlstringopcional
URL a la que redirigir tras pagar (opcional).Ej:
https://tienda.pe/pago/okexpires_atstringopcional
Vencimiento (UTC ISO-8601).
metadataobjectopcional
Pares string→string libres.
Language
Credentials
Header
Authorization
Secret key de developer · ejemplos con SDK oficial
API Request
$ npm install @kuti-pe/node
import { KutiClient } from "@kuti-pe/node";
const kuti = new KutiClient({ secretKey: process.env.KUTI_SECRET_KEY! });
const session = await kuti.checkoutSessions.create(
{
amount: { amount: "249.90", currency: "PEN" },
paymentMethodTypes: ["INTEROPERABLE_QR","BANK_TRANSFER"],
customer: { firstName: "María", lastName: "López", email: "maria@example.com", phone: "+51987654321" },
description: "Pedido #1042",
externalReference: "order-1042",
},
{ idempotencyKey: "550e8400-e29b-41d4-a716-446655440030" },
);
console.log(session.checkoutUrl);SDK oficial · guía en /sdks
Response
Elige un ejemplo de respuesta:
application/json
201Created
{
"success": true,
"data": {
"id": "cs_01J8Z3K4M5N6P7Q8R9S0T1U2V3",
"merchant_id": "mer_01J8Z3K4M5N6P7Q8R9S0T1U2V3",
"payment_intent_id": "pi_01J8Z3K4M5N6P7Q8R9S0T1U2V3",
"amount": {
"amount": "249.90",
"currency": "PEN"
},
"status": "OPEN",
"description": "Pedido #1042",
"client_secret": "cs_secret_ab12cd34ef56",
"checkout_url": "https://pay.kuti.pe/embed?cs=cs_secret_ab12cd34ef56",
"payment_method": {
"qr": {
"type": "INTEROPERABLE_QR",
"payload": "00020101021226...",
"expires_at": "2026-09-05T23:59:59Z"
},
"payment_code": {
"type": "BANK_TRANSFER",
"code": "41041172",
"expires_at": "2026-09-05T23:59:59Z"
}
},
"created_at": "2026-09-04T10:48:59.556906Z"
}
}