Saltearse al contenido

Checkout Sessions

Una CheckoutSession representa un cobro que el comprador completa en una página hospedada por INGALCA. Ver la guía: Checkout hospedado.

El objeto CheckoutSession

{
"id": "cs_9f3a2b1c...",
"url": "https://api.pay.ingalca.com/v1/checkout/cs_9f3a2b1c...",
"status": "open",
"reference": "ORDEN-1042",
"environment": "test",
"amount": "110000.00",
"currency": "PYG",
"methods": ["dinelco", "transferencia"],
"description": "Entradas Torneopolis",
"line_items": [
{ "name": "Entrada General", "quantity": 2, "unit_amount": 50000 }
],
"success_url": "https://tuweb.com/gracias",
"cancel_url": "https://tuweb.com/carrito",
"metadata": { "order_id": 1042 },
"expires_at": "2026-08-04T16:00:00+00:00",
"created_at": "2026-08-04T15:00:00+00:00"
}

Solo se obtiene en la respuesta del POST: no existe GET /v1/checkout-sessions/{id} ni un listado. Guardá el id cuando creás la sesión. Para consultar el estado del cobro, mirá los Payments ligados a ella o esperá el webhook.

Estados (status)

EstadoSignificado
openEsperando que el comprador pague.
completedUn pago de la sesión se confirmó. La página deja de aceptar pagos.
expiredVenció (expires_at) sin pago confirmado.
cancelledReservado. Hoy ninguna operación deja una sesión en este estado (no hay endpoint de cancelación).

Crear una sesión

POST /v1/checkout-sessions — ver el detalle de campos y ejemplo en la guía.

Respuesta 201 en creación, 200 en replay idempotente.

Idempotencia

Reenviar el mismo reference (por tenant + environment) devuelve la sesión existente con 200 mientras esa sesión siga open y sin vencer. Si ya venció, se completó o se cerró, se crea una sesión nueva con 201 — que es lo que querés: el comprador vuelve a intentar sobre una URL viva.

La página hospedada

GET /v1/checkout/{id} es la página que ve el comprador (no una API JSON). Redirigí su browser ahí usando el campo url. Es pública: la autoriza el id de la sesión mientras esté open y no vencida.

Una vez completed / expired / cancelled responde 410 con una página que le explica al comprador qué pasó y lo devuelve a tu cancel_url (o success_url si la sesión se completó). Ver Expiración.

Relación con Payment

Cuando el comprador elige un método, se crea un Payment ligado a la sesión. En el webhook y en el objeto Payment, el reference es el de la sesión (tu orden), y aparece checkout_session_id. Una sesión puede tener varios intentos (cada uno su payment_id); conciliá por reference y deduplicá por X-Ingalca-Event-Id.