API Technical Docs

Mantente al día con las innovaciones tecnológicas que están transformando el mercado.

Web Checkout: visión general

Contrato vigente de Web Checkout

POST /v1/checkouts requiere:

  • external_transaction_id: identificador de la transacción en el sistema del comercio.
  • amount: monto.
  • currency: moneda ISO de 3 letras, por ejemplo PEN.

Campos opcionales:

  • payment_method: por defecto qr.
  • payer.first_name y payer.last_name: si el comercio conoce el nombre del pagador/cliente.
  • timeout_seconds: vigencia solicitada por el comercio.

YUPY deriva internamente channel=web y resuelve client, counter, location, instrument y policy. Para correlación comercial del Web Checkout use external_transaction_id; source_reference no debe usarse como un segundo identificador comercial.

Hoy, cuando el comercio envía timeout_seconds, ese valor reemplaza el timeout fijo de policy para esa operación. Cuando exista el motor automático de cálculo de timeout, el valor calculado por YUPY tendrá precedencia.

{
  "external_transaction_id": "TX-12345",
  "amount": "125.50",
  "currency": "PEN",
  "payment_method": "qr",
  "payer": {
    "first_name": "Juan",
    "last_name": "Perez"
  },
  "timeout_seconds": 240
}

Respuesta inmediata HTTP 201

{
  "external_transaction_id": "TX-12345",
  "checkout_uid": "chk_...",
  "checkout_token": "cks_...",
  "checkout_url": "https://api.yupy.us/v1/checkouts/browser#token=...",
  "payment_order_uid": "po_...",
  "status": "pending",
  "amount": "125.50",
  "currency": "PEN",
  "payment_method": "qr",
  "channel": "web",
  "checkout_created_at": "2026-08-28T03:39:50Z",
  "timeout_seconds": 240,
  "delivery": {}
}

Esta respuesta confirma la creación del Checkout y de la Payment Order asociada. Las notificaciones posteriores de estado se documentan por separado.

Estado documental: Implementado y verificado en Producción.

Web Checkout es la experiencia Web temporal de YUPY para presentar y seguir una operación de pago sin obligar al integrador a construir la UI financiera.

Flujo general

Backend del comercio
  → autentica
  → POST /v1/checkouts
  → recibe checkout_url

Frontend
  → YupyCheckout.open(checkout_url)

YUPY
  → resuelve contexto
  → crea Payment Order
  → presenta QR
  → administra presented, timeout y estado
  → devuelve resultado terminal

Qué muestra el Browser Checkout QR

  • branding YUPY;
  • nombre del cliente;
  • monto;
  • QR desde delivery.image_url;
  • cuenta, CCI y empresa cuando existen como datos seguros del instrumento;
  • instrucciones;
  • countdown basado en expires_at;
  • estado;
  • botón Ya pagué.

SDK

<script src="https://api.yupy.us/v1/checkouts/browser/sdk.js"></script>
const result = await YupyCheckout.open(checkoutUrl);

Endpoints internos del Browser

La experiencia alojada utiliza internamente:

POST /v1/checkouts/browser/context
POST /v1/checkouts/browser/presented
POST /v1/checkouts/browser/status
POST /v1/checkouts/browser/simulate-payment   # solo cuando está autorizado

Estos endpoints pertenecen al Browser Checkout y no son la superficie normal de negocio del comercio. El integrador utiliza checkout_url y el SDK.

Presented

Browser registra presentación cuando el QR termina de cargar. Crear checkout no equivale a presentarlo.

Timeout

POO es autoridad. Browser recibe expires_at, muestra el countdown y al llegar a cero consulta nuevamente el estado canónico.

“Ya pagué”

En modo normal, Ya pagué registra en POO la declaración canónica PAYMENT_DECLARED y luego continúa consultando el estado real de la Payment Order. La declaración es no terminal: no marca pagado, no establece confirmed_at y no sustituye la confirmación financiera.

Payment Simulation

YUPY puede habilitar un modo de prueba para un Web Checkout cuando la credencial que lo creó estaba autorizada con payments:simulate.

Browser Context expone únicamente la capacidad segura:

{
  "payment_simulation_enabled": true
}

No expone scopes, Client Secret, Bearer ni payment_order_uid como autoridad del navegador.

Modo Botón Comportamiento
Normal Ya pagué Registra PAYMENT_DECLARED en POO y luego consulta /browser/status; no confirma ni fuerza un terminal.
Simulación autorizada Simular pago La experiencia alojada solicita la simulación autorizada a YUPY y recibe posteriormente el estado canónico.

La operación Browser de simulación recibe únicamente el checkout_token. YUPY resuelve server-side la sesión y su Payment Order. El navegador no envía como autoridad payment_order_uid, client_id, counter_id, result ni un campo libre simulate=true.

Cuando la simulación está autorizada, YUPY aplica al Payment Order Orchestrator el mismo resultado terminal canónico usado por el flujo normal:

pagado

Después vuelve a consultar el estado real del POO y lo entrega al Browser/SDK. No existen estados simulated, simulation_paid, test_paid ni equivalentes.

Importante: Payment Simulation es una capacidad controlada por YUPY para pruebas. No representa conciliación bancaria real y no puede habilitarse desde el frontend.

Estados terminales

pagado
cancelado
timeout
failed

Cierre manual del modal

{
  "status": "cancelled_by_user",
  "terminal": false,
  "source": "yupy_sdk"
}

Es cierre local de UI; no cancela la Payment Order.

Resultado SDK

{
  "status": "pagado",
  "terminal": true,
  "source": "yupy_checkout"
}

Responsabilidades

Componente Responsabilidad
Comercio Autenticarse, crear checkout, conservar su referencia, abrir checkout_url y procesar resultado.
YUPY Web Checkout Resolver contexto, Browser, presented, polling, countdown, SDK bridge y UI.
POO Lifecycle, timeout, concurrencia, delivery y estados terminales.
master_data Counter Web, policies, instrumento, QR, cuenta y timeout configurado.