chk_) es una plantilla de cobro reutilizable. Lo defines una sola vez (ítems,
precio, métodos, branding) y publicas la URL cuantas veces quieras — cada acceso de un comprador materializa
una CheckoutSession independiente. Ideal para el link en bio de Instagram,
páginas de captura o cualquier difusión masiva.
Los ejemplos usan el sandbox: API en
https://checkout-api.sandbox.z2pay.com y página en
https://pay.sandbox.z2pay.com. En producción, usa https://checkout-api.z2pay.com y
https://pay.z2pay.com. Todas las solicitudes usan el header x-api-key — consulta
Autenticación.Endpoints
| Método | Ruta | Descripción |
|---|---|---|
POST | /checkout/links | Crea una plantilla de cobro |
GET | /checkout/links | Lista plantillas (paginado) |
GET | /checkout/links/{id} | Obtiene una plantilla por ID |
PUT | /checkout/links/{id} | Actualiza una plantilla |
DELETE | /checkout/links/{id} | Archiva (soft-delete) una plantilla |
El objeto Checkout Link
Nombre interno (≤ 255 caracteres), visible para el seller, no para el comprador. Útil para organizar
la lista en el panel.
Descripción interna (≤ 2000 caracteres).
Identificador URL-friendly. Regex
^[a-z0-9-]+$, 3–100 caracteres. Reservado para una futura
funcionalidad de URL amigable.Por ahora, solo
"payment".Código ISO 4217. Por ahora, solo
"BRL".Idioma de la página:
"pt-BR", "en-US" o "es-ES".Ítems del cobro (≥ 1). La suma de
quantity × unitAmount es el total a cobrar. Ver
Item.Métodos aceptados. Al menos un método debe estar habilitado. Ver
Métodos de pago.
Distribución multi-seller. La suma de los
percentage debe ser exactamente 100. Ver Split.Campos del comprador que serán obligatorios además de los siempre-requeridos. Ver
Required fields.
Campos personalizados (≤ 20) solicitados al comprador. Ver Custom fields.
URL de redirección (≤ 2000) tras el pago aprobado.
URL de redirección (≤ 2000) al cancelar.
Mapa
string → string con datos arbitrarios del seller (opaco para el servidor; se devuelve en los webhooks).Tiempo de validez de la Session desde su creación, en minutos. Mínimo
5, máximo 43200 (30 días).
Por defecto 1440 (24h).Item (CheckoutItem)
Nombre mostrado al comprador (1–255 caracteres).
Descripción mostrada debajo del nombre (≤ 2000 caracteres).
Imagen mostrada junto al ítem. Cualquier URL HTTPS pública (≤ 2000 caracteres).
Cantidad (entero ≥ 1).
Valor unitario en centavos (entero ≥ 1). R$ 99,90 =
9990.Mapa
string → string con identificadores internos del seller (sku, course_id, etc.).Métodos de pago (paymentMethods)
Configuración de tarjeta.
card.enabled (boolean) activa/desactiva. card.installments define las
cuotas (ver abajo). card.multipleCards (boolean) permite dividir el total entre 2 tarjetas.Cuotas.
maxInstallments (1–12, obligatorio), freeInstallments (0–12, por defecto 0, cuotas
iniciales sin interés), interestRate (0–100, tasa mensual en %, ej. 2.99), interestType ("simple"
o "compound", por defecto "compound" = Precio/Tabla).Configuración de PIX.
pix.enabled (boolean) activa/desactiva. pix.expiresIn (60–86400) es la
expiración del código QR en segundos (60s a 24h).Configuración de boleto.
boleto.enabled (boolean) activa/desactiva. boleto.dueDateDays (1–30) es
el número de días hasta el vencimiento.Pago combinado (dividir el total entre métodos/tarjetas).
enabled (boolean, obligatorio),
minAmountPerPayment (centavos, por defecto 1), maxPaymentsCount (2–8, por defecto 4).Split
Distribuye el valor recibido entre múltiples destinatarios (marketplace, socios, plataformas).ID del recipient (
rec_*) que recibe la parte correspondiente.Porcentaje del valor total (0.01–100). Acepta decimales (ej.
33.33).Marca al recipient como responsable de los chargebacks (típicamente el seller principal).
Branding
Color primario en hexadecimal. Regex
^#([0-9a-f]{6}|[0-9a-f]{3})$/i, ej. "#1e3b79" o "#FFF".
Las variaciones (hover, contraste de texto) se calculan automáticamente.Logo del seller mostrado en el header de la página (≤ 2000 caracteres).
Nombre del seller mostrado en la página (≤ 100 caracteres), cuando no hay logo o junto a él.
"single-page" o "step-by-step" — controla el layout del checkout en dispositivos móviles.Favicon de la página, ícono de la pestaña del navegador (≤ 2000 caracteres).
Required fields
Lista de campos del comprador que serán obligatorios además de los siempre-requeridos."email", "document", "phone", "address".
email, document y phone son siempre obligatorios en el momento del confirm, aunque no los
incluyas aquí. Incluir "address" obliga al comprador a completar la dirección completa.Custom fields
Permite solicitar información adicional al comprador (texto, dropdown, checkbox).Identificador interno del campo. Regex
^[a-z][a-z0-9_]*$/i, ≤ 50 caracteres.Label mostrado. String simple (
"Empresa") o mapa por idioma
({ "pt-BR": "Empresa", "en-US": "Company" })."text", "select" o "checkbox".Obligatorio si
type = "select". Acepta strings ("Opción 1") u objetos { value, label } con label
localizable.Si
true, el comprador está obligado a completarlo.Crear Link
201. Soporta idempotencia mediante el header Idempotency-Key
(ver Convenciones).
201):
La
url devuelta es el link de pago listo para compartir. Cada apertura materializa una
Session nueva.Errores comunes
| HTTP | Code | Cuándo |
|---|---|---|
400 | validation_failed | Body malformado (falta items, valor no entero, etc.) |
400 | no_items | Array items vacío |
400 | amount_too_low | La suma de los ítems resulta en 0 |
400 | invalid_splits_sum | Los splits no suman 100 |
401 | unauthenticated | x-api-key ausente, inválido o revocado |
409 | slug_taken | Ya existe un Link con ese slug |
409 | idempotency_conflict | La misma Idempotency-Key fue usada con un body diferente |
Listar Links
Filtra por estado (CSV). Ej.:
?status=active o ?status=active,archived.Búsqueda en
name y description (≤ 255 caracteres).Número de página (≥ 1).
Ítems por página (1–100).
200):
Obtener Link por ID
POST).
200 (encontrado) · 404 (no encontrado).
Actualizar Link
200. Soporta idempotencia mediante Idempotency-Key.
200 (actualizado) · 404 (no encontrado) · 400 (validación).
Archivar Link
/c/chk_...) comenzará a devolver 404 y no podrán crearse nuevas
Sessions a partir de ella. Las Sessions ya creadas continúan funcionando con normalidad. Devuelve 200
con la entidad que contiene deletedAt completado. Soporta idempotencia.
200):
200 (archivado) · 404 (no encontrado).
Galería de ejemplos
Payloads listos paraPOST /checkout/links. Abre la url devuelta para verificar visualmente.
Solo tarjeta (cuotas simples)
Solo tarjeta (cuotas simples)
Solo PIX (expira en 1h)
Solo PIX (expira en 1h)
Solo boleto (vence en 5 días)
Solo boleto (vence en 5 días)
Todos los métodos
Todos los métodos
Múltiples ítems
Múltiples ítems
49900 + 4900 + 3 × 15000).Ítem con imagen y descripción
Ítem con imagen y descripción
Branding (color + logo + nombre)
Branding (color + logo + nombre)
Locale en-US / es-ES
Locale en-US / es-ES
"locale": "es-ES" para la página en español. Toda la página sigue el idioma seleccionado.Dirección obligatoria (required fields)
Dirección obligatoria (required fields)
Custom fields (text + select + checkbox)
Custom fields (text + select + checkbox)
experience_level.Splits 70/30 (marketplace)
Splits 70/30 (marketplace)
Cuotas con interés compuesto
Cuotas con interés compuesto
Success / Cancel URLs
Success / Cancel URLs
successUrl. Puedes usar
{CHECKOUT_SESSION_ID} como marcador de posición — lo reemplazamos por el cs_* antes de redirigir.Kitchen-sink (casi todos los campos)
Kitchen-sink (casi todos los campos)
Ver también
Visión general del Checkout
Conceptos, casos de uso y mapa de endpoints.
Checkout Sessions
Materializa Sessions a partir de un Link.
Webhooks
Eventos
checkout.link.* y checkout.session.*.Errores
Formato de los errores y cómo manejar
400 / 404 / 409.
