Skip to Content
Referencia de la APIResumen
View as Markdown

Referencia de la API

Cada endpoint a continuación habla JSON, vive bajo https://api.infraio.xyz (prod) o https://api-dev.infraio.xyz (test) y se autentica vía HMAC-SHA256: consulta Autenticación para la firma de peticiones y Errores para la forma del envelope de error.

Esta página lista los endpoints para integraciones de comerciante. Cuando un endpoint no tiene página propia, se describe en la página de concepto relacionada.

Los endpoints bajo /b2b/v1/* se firman con HMAC usando tu clave secreta (sk_…). Esta es la superficie que llama tu backend. El dashboard del comerciante y el checkout alojado usan sus propios endpoints, que no forman parte de la API de integración.

Checkout

MétodoRutaPropósitoNotas
POST/b2b/v1/checkout-sessions/quickCrea una sesión en una sola llamada: order + checkout-session emitidos juntos.Consulta Inicio rápido para el request body y la muestra.
POST/b2b/v1/checkout-sessionsCrea una sesión contra una orden existente. Úsalo cuando tu plataforma ya tiene su propio modelo de orden y quieres una sesión por intento.El flujo de dos pasos.
GET/b2b/v1/checkout-sessions/by-order/{order_id}Lista todas las sesiones que se han emitido para una orden.Útil cuando un comprador abandonó una sesión y quieres mostrar los intentos anteriores en tu dashboard.

Órdenes

Las órdenes son la entidad facturable atemporal. Una sola orden puede respaldar múltiples sesiones de checkout (p. ej., el comprador abandona, reintenta).

MétodoRutaPropósitoNotas
POST/b2b/v1/ordersCrea una orden sin una sesión.Úsalo cuando quieras enviar al comprador un enlace de pago más tarde en lugar de redirigirlo inmediatamente.
GET/b2b/v1/orders/{id}Lee una sola orden con line items + estado.Estado: PENDING → PAID | PARTIAL_PAID | CANCELED. Tras el reembolso: PARTIALLY_REFUNDED | REFUNDED.
GET/b2b/v1/orders/by-merchant/{merchant_id}Lista tus órdenes, paginado por cursor.Consulta Paginación por cursor para el protocolo de cursor.
PATCH/b2b/v1/orders/{id}/cancelMarca una orden no pagada como cancelada. Emite order.canceled.Falla si la orden ya está pagada.
PATCH/b2b/v1/orders/{id}/reopenRevertir una autocancelación (canceled_reason=payment_timeout).Útil si el comprador vuelve después de que el TTL expire.

Reembolsos

Consulta la página de concepto Reembolsos para el flujo saga y el ciclo de vida del token.

Iniciado por el comerciante

MétodoRutaPropósitoNotas
POST/b2b/v1/merchants/{merchant_id}/refundsReembolso iniciado por el comerciante. Auto-aprobado (salta PENDING).Emite payment.refund.approved inmediatamente.

Iniciado por el cliente — tokens de solicitud de reembolso

El comprador rellena el formulario de reembolso en nuestra página alojada; tú solo emites el token y entregas la URL. Puedes emitir tokens desde tu backend (abajo) o desde el dashboard del comerciante. Las renovaciones y cancelaciones se gestionan en el dashboard.

MétodoRutaAuthPropósito
POST/b2b/v1/merchants/{merchant_id}/refund-requestsHMAC (sk_…)Emite un token desde tu backend. Body: {ref_type, ref_value, amount, ttl_seconds?, metadata?, hide_summary?, hide_header?}. ref_type es uno de order_id / order_number / session_id / session_key; ref_value es el identificador correspondiente. amount es obligatorio y bloquea el máximo que el comprador puede enviar. TTL por defecto 30 min. Emite refund_request.created (source: b2b).

Ciclo de vida del reembolso (post-creación)

Aplica a ambos flujos. Los endpoints siguientes operan sobre el reembolso en sí (id comienza con rfn_…), no sobre el token de solicitud.

MétodoRutaPropósitoNotas
GET/b2b/v1/refunds/{id}Lee un reembolso.Estado: PENDING → APPROVED → EXECUTED | REJECTED.
GET/b2b/v1/refunds/by-merchant/{merchant_id}Lista tus reembolsos, paginado por cursor.—
POST/b2b/v1/refunds/{id}/approveAprueba un reembolso PENDING (solo iniciado por el cliente: los iniciados por el comerciante aterrizan ya en APPROVED).Cripto: aterriza en APPROVED, luego llamas a /submit-tx.
POST/b2b/v1/refunds/{id}/rejectDeniega un reembolso PENDING.Emite payment.refund.rejected.
POST/b2b/v1/refunds/{id}/submit-txSolo cripto: sella el tx hash on-chain que difundiste.Body: {tx_hash, network, token_address}: los tres son obligatorios.

Catálogo (solo lectura)

MétodoRutaPropósito
GET/v1/supported/networksTodas las cadenas en las que InfraIO Pay puede liquidar (mainnet + testnet, filtrado por entorno).
GET/v1/supported/tokensTodas las stablecoins en esas cadenas.
GET/v1/supported/currenciesMonedas aceptadas para order.currency.

Salud

MétodoRutaAuthPropósito
GET/healthNinguna (público)Comprobación de liveness. Devuelve {"status":"ok"}. Apunta aquí tus monitores de uptime.

Paginación por cursor

Cada endpoint de lista acepta los mismos query params, devuelve el mismo envelope. Los cursores son opacos y se usan en lugar de offsets para que una página nunca se desplace cuando llega una fila nueva mientras paginas.

Query paramTipoPor defectoNotas
cursorstring—Opaco: copia el next_cursor de la respuesta anterior tal cual.
limitint201..100.
sort_dir'asc' | 'desc'descOrdena por (created_at, id).
from / toRFC3339—Filtro opcional por ventana temporal.
searchstring—Filtro de texto libre donde se admite.

Envelope de respuesta:

{ "orders": [ /* page rows */ ], "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNS0...", "has_next": true }

has_next siempre está presente. next_cursor se omite cuando has_next es false. Trata el cursor como una cadena opaca.

Lo que falta en esta página

Esta página cubre los endpoints pensados para integraciones de comerciante. Si necesitas un endpoint que no está listado, o una especificación OpenAPI, contacta con soporte.