On-ramp y off-ramp · Brasil

On-ramp y off-ramp en Brasil, en una API

Conecta el cobro por Pix con la entrega de USDT o USDC, o recibe criptomonedas y paga Pix. Con LuniumPay, tu aplicación también puede recibir Pix en saldo BRL y elegir el retiro después. Empieza por el flujo que corresponda a tu producto.

Crear clave del sandbox Hablar con el equipo de integración Documentación completa

A quién va dirigido

¿Qué son on-ramp y off-ramp?

On-ramp es la conversión de moneda tradicional a criptomonedas. En este flujo, el cliente paga Pix y la aplicación sigue la entrega del activo en la red elegida. Off-ramp es la conversión de criptomonedas a moneda tradicional: tras la cotización, la aceptación y el depósito confirmado, la operación continúa con el pago Pix.

Recibir Pix en custodia es una opción diferente: el saldo permanece en reales brasileños hasta que se solicita un retiro. Recibir el Pix no significa que el saldo ya se haya convertido en stablecoins.

ObjetivoFlujoSiguiente paso
El cliente paga Pix y recibe USDT o USDCCash-in con entrega directa; activo, red y dirección definidos en la solicitud de cobro.Probar Pix a criptomonedas
El cliente deposita criptomonedas y recibe PixCash-out: cotización, aceptación, instrucciones de depósito y conciliación.Probar criptomonedas a Pix
La plataforma recibe Pix y decide el retiro despuésCustodia en BRL; saldo disponible y retiros por Pix o en criptomonedas.Probar custodia
El marketplace paga a los usuarios con su saldoPayout Pix: débito del saldo y seguimiento del pago.Ver guía de payouts

El flujo de principio a fin

  1. Entrada: POST /cashin/charge crea un QR PIX identificado con el CPF/CNPJ de quien va a pagar. Tras el pago, sigue las posibles retenciones y la entrega de criptomonedas hasta el estado final.
  2. Salida: POST /cash-outs cotiza, /accept fija la cotización y devuelve la dirección; haces el depósito y una clave PIX recibe reales brasileños.
  3. Custodia (opcional): con destino: "saldo" el PIX se convierte en saldo en reales brasileños por subcuenta, y puedes pagar con POST /payouts cuando quieras.
  4. Ambos sentidos usan la misma clave, el mismo formato de error (erro + acao) y el mismo external_id.
  5. Valida la firma de los webhooks y usa la consulta de estado para conciliar eventos ausentes o retrasados.

Endpoints utilizados

EndpointPara qué
POST /cashin/chargeEntrada: crea el QR PIX y entrega stablecoins.
POST /cash-outs + /acceptSalida: cotiza, fija la cotización y recibe la dirección de depósito.
POST /payoutsPIX directamente en reales brasileños desde el saldo en custodia, sin pasar por criptomonedas.
GET /keys/meTus límites vigentes y las funciones habilitadas. Consúltalos aquí, no los fijes en el código.
GET /v1/verificar/{e2e}Verificación pública de un PIX liquidado. Sin clave.

Ejemplo de solicitudes — sustituye los datos

# entrada: PIX se convierte en stablecoins en tu billetera
curl -X POST https://api.luniumpay.com/cashin/charge -H "X-API-Key: $LUNIUM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount_cents":100000,"asset":"usdc","chain":"polygon",
       "payout_address":"0xTesouraria","payer_tax_number":"12345678909",
       "external_id":"in-9001"}'

# salida: las stablecoins se convierten en PIX en la cuenta de alguien
curl -X POST https://api.luniumpay.com/cash-outs -H "X-API-Key: $LUNIUM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"asset":"USDC","network":"polygon","brl_amount":"1000.00",
       "pix_key":"11122233344","pix_key_type":"cpf","external_id":"out-9001"}'
const API = "https://api.luniumpay.com";
const h = { "X-API-Key": process.env.LUNIUM_KEY, "Content-Type": "application/json" };

export const entrada = (cents, carteira, docPagador, id) =>
  fetch(`${API}/cashin/charge`, { method: "POST", headers: h, body: JSON.stringify({
    amount_cents: cents, asset: "usdc", chain: "polygon",
    payout_address: carteira, payer_tax_number: docPagador, external_id: id,
  })}).then((r) => r.json());

export const saida = (brl, chave, tipo, id) =>
  fetch(`${API}/cash-outs`, { method: "POST", headers: h, body: JSON.stringify({
    asset: "USDC", network: "polygon", brl_amount: brl,
    pix_key: chave, pix_key_type: tipo, external_id: id,
  })}).then((r) => r.json());
import os, requests

API, H = "https://api.luniumpay.com", {"X-API-Key": os.environ["LUNIUM_KEY"]}

def entrada(cents, carteira, doc_pagador, ident):
    return requests.post(f"{API}/cashin/charge", headers=H, timeout=30, json={
        "amount_cents": cents, "asset": "usdc", "chain": "polygon",
        "payout_address": carteira, "payer_tax_number": doc_pagador,
        "external_id": ident}).json()

def saida(brl, chave, tipo, ident):
    return requests.post(f"{API}/cash-outs", headers=H, timeout=30, json={
        "asset": "USDC", "network": "polygon", "brl_amount": brl,
        "pix_key": chave, "pix_key_type": tipo, "external_id": ident}).json()

Sandbox: prueba antes de gastar

Una llamada, sin aprobación previa ni tarjeta; solo es obligatorio tu correo (al que enviamos el manual, el diagrama de flujo y la guía de integración paso a paso). La clave lun_test_ permite probar los flujos y escenarios documentados sin mover dinero real.

curl -X POST https://api.luniumpay.com/keys/sandbox \
  -H "Content-Type: application/json" \
  -d '{"email":"voce@empresa.com","name":"meu-teste"}'

Lo que el sandbox no demuestra: liquidación real. No se mueven criptomonedas ni se paga ningún PIX; sirve para ajustar el contrato, no para medir la vía de procesamiento.

Activos y redes

El catálogo de entrada de criptomonedas es GET /catalog; el de entrega tras Pix es GET /cashin/catalog. Consulta el activo y la red del flujo elegido antes de cotizar. La disponibilidad y los mínimos pueden cambiar.

Usa deposit_tag en el depósito cuando la aceptación indique un memo. En la entrega, envía payout_tag cuando lo requiera la ruta. El manual de la API describe cada campo.

Límites y retenciones

Consulta GET /keys/me para conocer los límites y las tarifas de la cuenta, GET /cashin/limits?payer_tax=... para el pagador y las vistas previas para el mínimo de la ruta. No uses un límite máximo fijo compartido entre cash-in, cash-out y payout.

Una solicitud de cobro pagada puede quedar retenida antes de la liquidación. Usa los estados, la cronología y los eventos firmados para distinguir entre cobro, saldo disponible y entrega final. La validez de la operación figura en expires_at.

Mediciones, no promesas

El plazo depende del flujo, la ruta disponible, las confirmaciones de la red y las posibles retenciones. Sigue la operación hasta su estado final y consulta el estado del servicio. El tiempo de una simulación no mide una liquidación real.

Idempotencia

Envía external_id en cada operación que mueve dinero. Repetir la misma llamada devuelve la misma operación, nunca una segunda; los mismos parámetros con un id distinto crean dos, y el mismo id con parámetros distintos devuelve 409 external_id_divergente en lugar de intentar adivinar.

Un timeout no es un rechazo. Si la llamada no respondió, consulta por el external_id antes de repetirla: la operación puede existir.

Webhooks y conciliación

Cada transición genera un evento firmado con HMAC SHA-256 y una marca de tiempo (cabecera X-Lunium-Signature, formato t=…,v1=…). La marca de tiempo impide reutilizar una entrega capturada. Verifica la firma antes de confiar en el cuerpo.

El webhook es la señal principal; el polling es opcional. Cuando necesites consultar, el estado incluye la timeline marcada por el servidor — representa la etapa a partir de ella, porque el cronómetro de tu polling mide tu red, no la operación.

¿No respondió con 2xx? Se reintenta la entrega con esperas progresivas. Puedes reenviarla manualmente en POST /webhooks/deliveries/{event_id}/retry y probar tu URL en POST /webhooks/test.

Cuando algo falla

Cada error incluye erro (qué ocurrió) y acao (qué hacer): corrigir, repetir, esperar o parar. Es el campo que puede seguir un agente o un reintento automático sin recurrir a heurísticas.

parar es el más importante: en provedor_sem_resposta en un retiro, el PIX puede haberse enviado. Consulta la operación; no la repitas.

Seguridad

La verificación abierta es especialmente importante en una negociación: tu contraparte comprueba el PIX por su cuenta, sin clave y sin depender de nuestra palabra.

Tiempo hasta la primera integración

Sandbox con una llamada, sin aprobación previa. Permite probar los flujos y escenarios documentados con importes ficticios. Las cotizaciones y algunas respuestas de simulación tienen campos propios. Consulta el manual y valida la configuración y la liquidación en una prueba piloto de producción antes de atender a clientes.

Preguntas sobre Pix, on-ramp y off-ramp

¿Necesito una empresa en Brasil?

Puedes empezar por el sandbox. Para producción, confirma con el equipo de integración la elegibilidad, los documentos y las condiciones aplicables a tu modelo de negocio.

¿Cómo funciona el límite para quienes empiezan?

Consulta GET /keys/me para conocer los límites y tarifas de la clave, GET /cashin/limits para el pagador y la vista previa para el mínimo de la ruta. No apliques una tabla fija a todos los flujos; comprueba también las retenciones y el saldo disponible.

¿Puedo recibir Pix y elegir cuándo retirar?

Sí. En el flujo destino=saldo, el Pix se acredita en saldo BRL, sujeto a las reglas de disponibilidad. La aplicación solicita después un payout Pix o un retiro en criptomonedas por una ruta disponible. El abono en BRL no es una conversión automática a USDT.

¿La prueba del sandbox usa dinero real?

No. El saldo, los pagos y las entregas son simulados. La prueba sirve para validar la integración; la disponibilidad de la ruta y la liquidación real deben validarse en producción.

¿Puedo integrar con una IA?

Sí. Usa el manual, OpenAPI y la guía de integración con IA. Lleva la lista de comprobación de aceptación a tu editor y pide evidencias de cada prueba, incluidos los fallos, la idempotencia y la conciliación.

Prepara un plan de integración para tu equipo

Usa la lista de comprobación para definir el flujo, validar el saldo y los mínimos, probar los fallos y registrar las evidencias antes de la prueba piloto. Puede rellenarla un desarrollador o usarse como contexto para un agente de IA.

Descargar lista de comprobación de integración (Markdown) · Integrar con IA · Todas las guías

Contenido técnico del equipo de LuniumPay · Revisado el . Conoce la empresa.

Crear clave del sandbox Hablar con el equipo de integración

Contrato OpenAPI vigente · datos de esta página en product-truth.json · estado

Entrada y salida en Brasil. Empieza con una clave de prueba.

La clave de prueba se obtiene con una llamada, sin aprobación previa y sin coste; tu caso llega directamente al equipo de integración.

Recibir sandbox y hablar con el equipo de integración Cash-in y payout con las tarifas de tu clave · consulta la cotización · sin cuota mensual

Otras opciones

API de PIX a USDTRecibe reales brasileños y entrega USDT en la billetera del cliente.API de USDT a PIXVende stablecoins y paga a cualquier clave PIX.API de payout PIXPaga a proveedores y usuarios en reales brasileños mediante la API.BRL ↔ USDT por APIConversión en ambos sentidos, con cotización y comprobante.PIX en el checkout, stablecoins en la tesoreríaRecibe PIX de tus clientes y conserva los fondos en dólares digitales.PIX y stablecoins para billeterasOfrece a tus usuarios una vía de entrada y salida.Infraestructura con tu marcaToda la vía de procesamiento detrás de tu producto.

Habla con quienes lo construyeron

La clave de prueba se obtiene con una llamada, sin aprobación previa. Si es lo que buscas, empieza por la documentación. Este formulario es para las demás consultas: tarifas por volumen, un caso que la documentación no cubre o una duda antes de integrar.

¿Prefieres escribir directamente por correo? contato@luniumpay.com