Cobra desde tu código
Crea un link de checkout con una llamada a la API. Tu cliente paga con los medios disponibles en su país. Tú te enteras cuando se confirma el cobro.
Qué puedes hacer con la API
La API es pequeña a propósito. Casi todo empieza creando un checkout y escuchando actualizaciones de pago.
Crear links de pago
Haz un POST de Checkout Preference y recibes un checkout_url para enviarle a cualquier cliente.
Aceptar medios locales
El checkout detecta el país del pagador y muestra tarjeta, transferencia, PIX o crypto cuando están disponibles. La conversión de moneda la resolvemos nosotros.
Saber cuándo cobraste
Recibes webhooks en cada cambio de estado del Payment Order y después consultas la orden completa cuando la necesites.
Dos objetos que tienes que conocer
Checkout Preference es el link que creas. Payment Order es lo que aparece cuando el cliente empieza a pagar.
Creas un Checkout Preference
Tu backend llama a la API con monto, moneda y título. ONE te devuelve un checkout_url.
Tu cliente paga
Abre el link, elige un medio local y completa el pago. Ahí se crea un Payment Order.
Te llega un webhook
ONE hace POST a tu URL cuando cambia el estado de la orden (opened, closed, expired…).
Consultas la orden
Usa el entity_id del webhook para hacer GET del Payment Order y confirmar el estado final.
Sal en tres pasos
No necesitas un SDK. Keys, una base URL de staging y un POST bastan para ver un checkout real.
Crea tus API keys
En el Dashboard de ONE ve a Integrations y genera tu x-api-key y x-api-secret.
Empieza en staging
Integra contra api.stg.one.lat. Solo puedes pedir una cuenta de staging si ya tienes una cuenta de producción aprobada y activa: escríbenos a support.
Crea tu primer checkout
POST /v1/checkout_preferences, abre el checkout_url, completa un pago de prueba y mira llegar el webhook.
Autenticación
Cada request a la API debe incluir los dos headers de seguridad.
Envía x-api-key y x-api-secret en cada llamada. Crea y rota las keys desde el dashboard en Integrations.
Ambientes
Los mismos paths en staging y production. Solo cambia el host.
Staging
https://api.stg.one.latProduction
https://api.one.latCrear un checkout
Este es el endpoint principal. Crea un pedido de pago único y te devuelve la URL con la que paga tu cliente.
/v1/checkout_preferencesBody del request
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
amount | float | Sí | Monto del cobro. Los límites equivalentes rondan 10–1500 USD. |
currency | string | Sí | Moneda ISO del monto (USD, ARS, BRL, COP, MXN). |
title | string | Sí | Lo que ve el cliente en el checkout, p. ej. nombre del curso. |
origin | string | Sí | API |
external_id | string | No | Tu id único para reconciliar el pago después. |
expiration_date | string (RFC3339) | No | Fecha RFC3339. Máximo 1 semana. Si no la envías, expira en 15 minutos. |
payer.email | string | No | Si la envías, el checkout puede saltar pedir el email. |
payer.first_name | string | No | Nombre del pagador. |
payer.last_name | string | No | Apellido del pagador. |
payer.phone_number | string | No | Teléfono del pagador con código de país. |
selected_payment_method_id | string | No | Salta la selección y fija un medio de pago específico. |
custom_urls.status_changes_webhook | string (URL) | No | Tu endpoint para notificaciones de cambio de estado del Payment Order. |
custom_urls.success_payment_redirect | string (URL) | No | Si la envías, el checkout redirige al cliente aquí tras un pago exitoso. |
custom_urls.error_payment_redirect | string (URL) | No | Si la envías, el checkout redirige al cliente aquí tras un pago fallido o con error. |
Ejemplo de request
curl 'https://api.one.lat/v1/checkout_preferences' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'x-api-secret: YOUR_API_SECRET' \
--header 'Content-Type: application/json' \
--data '{
"amount": 25,
"currency": "USD",
"origin": "API",
"title": "Introductory course to Blockchain",
"external_id": "order_1234",
"payer": {
"email": "luca@test.com",
"first_name": "Luca",
"last_name": "Dorain",
"phone_number": "+521142567689"
},
"custom_urls": {
"status_changes_webhook": "https://api.mycompany.io/webhook",
"success_payment_redirect": "https://mycompany.io/payment/success",
"error_payment_redirect": "https://mycompany.io/payment/error"
}
}'Ejemplo de response
Comparte checkout_url con tu cliente. El checkout solo muestra los medios disponibles en su país.
{
"id": "qwDsh9aMoywPOiUx0O",
"amount": 25,
"currency": "USD",
"created_at": "2025-02-25T14:11:29Z",
"expiration_date": "2025-02-26T15:02:50Z",
"origin": "API",
"external_id": "order_1234",
"title": "Introductory course to Blockchain",
"type": "PAYMENT",
"checkout_url": "https://one.lat/checkout/qwDsh9aMoywPOiUx0O",
"payer": {
"email": "luca@test.com",
"first_name": "Luca",
"last_name": "Dorain",
"phone_number": "+521142567689"
}
}Endpoints de consulta
Úsalos después de crear un checkout, o cuando un webhook te avisa que algo cambió.
Obtener un Checkout Preference
Recupera una preference que ya creaste por id.
/v1/checkout_preferences/:idObtener un Payment Order
Un Payment Order se crea cuando el pagador entra al checkout, elige un medio y envía sus datos. Consúltalo para confirmar el estado después de un webhook.
/v1/payment_orders/:id{
"id": "gRV8xTZHPv9lNxSLPw",
"amount": 16.9,
"currency": "USD",
"created_at": "2024-06-12T15:26:47Z",
"expired_at": "2024-06-12T15:56:47Z",
"updated_at": "2024-06-12T15:31:28Z",
"status": "CLOSED",
"title": "Test product",
"origin": "PAYMENT_LINK",
"external_id": "1234",
"payment_method_type": "BANK_TRANSFER",
"payer": {
"email": "payer@gmail.com",
"first_name": "Joan",
"last_name": "Kohler",
"phone_number": "+542614215688"
}
}Obtener un Refund
Cuando recibes REFUND.SUCCEEDED, usa el entity_id para consultar el refund y confirmar monto, moneda y la orden asociada.
/v1/refunds/:idcurl 'https://api.one.lat/v1/refunds/1dUPlZbsDABq3bIEOG' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'x-api-secret: YOUR_API_SECRET'{
"id": "1dUPlZbsDABq3bIEOG",
"payment_order_id": "IwyOQSzfuEt80W9WNS",
"amount": 100,
"currency": "USD",
"status": "SUCCEEDED",
"created_at": "2025-12-08T22:42:52Z",
"updated_at": "2025-12-08T23:12:48Z"
}Listar medios de pago
Ves qué medios están habilitados para tu cuenta, con límites, moneda y país.
/v1/payment_methods[
{
"id": "vJKtkYs8Vf",
"status": "ENABLED",
"type": "BANK_TRANSFER",
"country_id": "ARG",
"currency": "ARS",
"max_amount": 10000000,
"min_amount": 0
},
{
"id": "qacV3z31cz",
"status": "ENABLED",
"type": "CRYPTO_ONCHAIN",
"country_id": "ALL",
"currency": "USDT",
"network": { "id": "TRON", "name": "Tron" },
"min_amount": 0.1,
"max_amount": 100000
}
]Tipos comunes: BANK_TRANSFER · PIX · CRYPTO_ONCHAIN
Webhooks
Los webhooks son alertas de cambio de estado. Son pequeños a propósito: trátalos como señal y después consulta la entidad.
Configurar la URL del webhook
Pasa custom_urls.status_changes_webhook cuando creas el Checkout Preference.
{
"custom_urls": {
"status_changes_webhook": "https://api.mycompany.io/webhook"
}
}¿Necesitas una URL para todas las notificaciones de la cuenta? Escribe a support para configurarla a nivel cuenta.
Payload de la notificación
Para eventos de Payment Order, llama a GET /v1/payment_orders/:id con el entity_id para obtener la versión más reciente.
{
"id": "uCEarm1kXJsroMQ6dt",
"event_type": "PAYMENT_ORDER.CLOSED",
"entity_type": "PAYMENT_ORDER",
"entity_id": "rcAaNfKdKJRmrnj4l5"
}Notificaciones de refund
Cuando un refund se completa llega REFUND.SUCCEEDED. Después llama a GET /v1/refunds/:id con el entity_id.
{
"id": "nR8kLm2pQxYtVw4HsZ",
"event_type": "REFUND.SUCCEEDED",
"entity_type": "REFUND",
"entity_id": "1dUPlZbsDABq3bIEOG"
}Tipos de evento
Payment Order
PAYMENT_ORDER.OPENEDPAYMENT_ORDER.CLOSEDPAYMENT_ORDER.REJECTEDPAYMENT_ORDER.EXPIRED
Refund
REFUND.SUCCEEDED
Tu handler del webhook debe ser idempotente. El campo id es único por notificación.
Estados y monedas
Tablas rápidas de estados de Payment Order, refunds y monedas soportadas.
Estados del Payment Order
| Código | Descripción |
|---|---|
OPENED | Creada y esperando que el cliente pague. |
CLOSED | Pagada con éxito. El proceso terminó. |
REJECTED | Rechazada por el procesador o el banco del cliente. |
EXPIRED | Expiró antes de recibir el pago. |
Estados del Refund
| Código | Descripción |
|---|---|
SUCCEEDED | El refund se completó con éxito. |
Monedas
| Código | Descripción |
|---|---|
USD | Dólares estadounidenses |
ARS | Pesos argentinos |
BRL | Reales brasileños |
COP | Pesos colombianos |
MXN | Pesos mexicanos |