{
  "_sobre": "Datos publicables de Lunium, generados a partir de producción. Cada bloque indica su procedencia. No contiene secretos, datos personales ni volumen financiero.",
  "gerado_em": "2026-09-17T18:37:10.285Z",
  "contrato": {
    "openapi_versao": "1.33.1",
    "openapi_spec": "3.1.0",
    "url_spec": "https://api.luniumpay.com/openapi.json",
    "origem_da_spec": "generado a partir de producción (GET https://api.luniumpay.com/openapi.json)",
    "base_url": "https://api.luniumpay.com",
    "autenticacao": "Cabecera X-API-Key. Clave de sandbox en una llamada: POST /keys/sandbox con el email de quien hará las pruebas (obligatorio; es a quien enviamos el manual, el diagrama de flujo y los pasos de integración).",
    "endpoints_publicos_total": 57,
    "endpoints": [
      {
        "metodo": "GET",
        "caminho": "/cash-outs",
        "resumo": "Listar órdenes"
      },
      {
        "metodo": "POST",
        "caminho": "/cash-outs",
        "resumo": "Cotizar (paso 1 de 3)"
      },
      {
        "metodo": "POST",
        "caminho": "/cash-outs/preview",
        "resumo": "Vista previa de cotización (no crea una orden)"
      },
      {
        "metodo": "GET",
        "caminho": "/cash-outs/{cashout_id}",
        "resumo": "Hacer seguimiento (paso 3 de 3)"
      },
      {
        "metodo": "POST",
        "caminho": "/cash-outs/{cashout_id}/accept",
        "resumo": "Aceptar y obtener la dirección (paso 2 de 3)"
      },
      {
        "metodo": "GET",
        "caminho": "/cashin/catalog",
        "resumo": "Catálogo de cash-in (lo que entregamos al recibir PIX)"
      },
      {
        "metodo": "POST",
        "caminho": "/cashin/charge",
        "resumo": "Generar una solicitud de cobro PIX para custodia BRL o entrega de criptomonedas"
      },
      {
        "metodo": "GET",
        "caminho": "/cashin/charges",
        "resumo": "Lista/recupera solicitudes de cobro de cash-in de esta clave"
      },
      {
        "metodo": "GET",
        "caminho": "/cashin/events",
        "resumo": "Flujo de eventos de tu clave (operación)"
      },
      {
        "metodo": "GET",
        "caminho": "/cashin/limits",
        "resumo": "Cuánto puede pagar este contribuyente ahora"
      },
      {
        "metodo": "POST",
        "caminho": "/cashin/preview",
        "resumo": "Cotización de cash-in: no crea nada"
      },
      {
        "metodo": "GET",
        "caminho": "/cashin/{cashin_id}/status",
        "resumo": "Estado de una solicitud de cobro PIX"
      },
      {
        "metodo": "GET",
        "caminho": "/catalog",
        "resumo": "Activos, redes y límites que permiten liquidar ahora"
      },
      {
        "metodo": "GET",
        "caminho": "/catalog/dex",
        "resumo": "Tokens de larga cola negociables mediante DEX"
      },
      {
        "metodo": "GET",
        "caminho": "/comissao",
        "resumo": "Saldo de la comisión del socio (sub fee)"
      },
      {
        "metodo": "GET",
        "caminho": "/comissao/extrato",
        "resumo": "Movimientos de la comisión"
      },
      {
        "metodo": "POST",
        "caminho": "/comissao/sacar",
        "resumo": "Retirar la comisión en criptomonedas"
      },
      {
        "metodo": "POST",
        "caminho": "/keys",
        "resumo": "Crear clave (autoservicio)"
      },
      {
        "metodo": "GET",
        "caminho": "/keys/me",
        "resumo": "Límites vigentes y uso del día"
      },
      {
        "metodo": "PATCH",
        "caminho": "/keys/me",
        "resumo": "Actualiza la clave (nombre, settlement, webhook, rotaciones)"
      },
      {
        "metodo": "POST",
        "caminho": "/keys/painel-link",
        "resumo": "Recibir el enlace del panel por correo electrónico (sin clave)"
      },
      {
        "metodo": "POST",
        "caminho": "/keys/sandbox",
        "resumo": "Obtener una clave de API de sandbox: una llamada, sin necesidad de clave de API"
      },
      {
        "metodo": "POST",
        "caminho": "/leads",
        "resumo": "Derivar un caso comercial o técnico a una persona"
      },
      {
        "metodo": "GET",
        "caminho": "/mesh",
        "resumo": "Todo lo que un agente necesita saber antes de integrar"
      },
      {
        "metodo": "GET",
        "caminho": "/mesh/agents",
        "resumo": "Quién está en la red"
      },
      {
        "metodo": "POST",
        "caminho": "/mesh/agents",
        "resumo": "Registrar un agente y recibir credenciales de sandbox"
      },
      {
        "metodo": "GET",
        "caminho": "/mesh/agents/{agent_id}",
        "resumo": "Estado, mandate, métricas y linaje de un agente"
      },
      {
        "metodo": "POST",
        "caminho": "/mesh/agents/{agent_id}/mandate",
        "resumo": "Definir la propia política de límites"
      },
      {
        "metodo": "GET",
        "caminho": "/mesh/agents/{agent_id}/network",
        "resumo": "Linaje, árbol y volumen de la red"
      },
      {
        "metodo": "POST",
        "caminho": "/mesh/agents/{agent_id}/production-request",
        "resumo": "Activar producción (automático, sin intervención humana)"
      },
      {
        "metodo": "GET",
        "caminho": "/mesh/agents/{agent_id}/rewards",
        "resumo": "Saldo de recompensas y movimientos del ledger"
      },
      {
        "metodo": "POST",
        "caminho": "/mesh/agents/{agent_id}/settlement",
        "resumo": "Indicar adónde va el dinero"
      },
      {
        "metodo": "POST",
        "caminho": "/mesh/agents/{agent_id}/validate",
        "resumo": "Demostrar que se ha probado el sandbox"
      },
      {
        "metodo": "GET",
        "caminho": "/mesh/economy",
        "resumo": "Reglas públicas de la economía de la red"
      },
      {
        "metodo": "GET",
        "caminho": "/mesh/graph",
        "resumo": "Grafo de agentes de Mesh"
      },
      {
        "metodo": "POST",
        "caminho": "/mesh/referrals",
        "resumo": "Emitir una atestación de recomendación"
      },
      {
        "metodo": "GET",
        "caminho": "/payouts",
        "resumo": "Enumera los payouts de esta clave"
      },
      {
        "metodo": "POST",
        "caminho": "/payouts",
        "resumo": "Enviar un PIX directamente (sin etapa de cripto)"
      },
      {
        "metodo": "GET",
        "caminho": "/payouts/{payout_id}",
        "resumo": "Estado de un payout"
      },
      {
        "metodo": "GET",
        "caminho": "/ping",
        "resumo": "Estado de la API"
      },
      {
        "metodo": "GET",
        "caminho": "/pix/keys/lookup",
        "resumo": "Consultar el titular PIX cuando la verificación esté disponible"
      },
      {
        "metodo": "GET",
        "caminho": "/saldo",
        "resumo": "Saldo BRL (custodia): disponible, retenido y próximas liberaciones"
      },
      {
        "metodo": "GET",
        "caminho": "/saldo/clientes",
        "resumo": "Subcuentas (clientes finales) con saldo, paginadas"
      },
      {
        "metodo": "GET",
        "caminho": "/saldo/consolidado",
        "resumo": "Consolidado de la clave: cuenta principal + clientes (custodia total)"
      },
      {
        "metodo": "GET",
        "caminho": "/saldo/extrato",
        "resumo": "Movimientos del saldo (más recientes primero)"
      },
      {
        "metodo": "POST",
        "caminho": "/saldo/sacar-cripto",
        "resumo": "Retirar saldo BRL como cripto a una billetera de autocustodia"
      },
      {
        "metodo": "POST",
        "caminho": "/saldo/transferir",
        "resumo": "Transferencia interna entre subcuentas y la cuenta principal (sin PIX)"
      },
      {
        "metodo": "GET",
        "caminho": "/sandbox",
        "resumo": "Descubrir las capacidades del sandbox"
      },
      {
        "metodo": "POST",
        "caminho": "/sandbox/cashin/{cashin_id}/pay",
        "resumo": "Simular el pago de una solicitud de cobro PIX de prueba"
      },
      {
        "metodo": "GET",
        "caminho": "/sandbox/events",
        "resumo": "Inspeccionar los eventos de sandbox generados"
      },
      {
        "metodo": "POST",
        "caminho": "/sandbox/operations/{operation_id}/resolve",
        "resumo": "Resolver una operación de sandbox con resultado incierto"
      },
      {
        "metodo": "GET",
        "caminho": "/sandbox/qr/{cashin_id}.svg",
        "resumo": "Imagen QR de sandbox que no permite pagos"
      },
      {
        "metodo": "POST",
        "caminho": "/sandbox/reset",
        "resumo": "Restablecer el estado ficticio de esta clave"
      },
      {
        "metodo": "GET",
        "caminho": "/v1/verificar/{e2e}",
        "resumo": "Confirmar que se realizó un PIX (abierto, sin clave)"
      },
      {
        "metodo": "GET",
        "caminho": "/webhooks/deliveries",
        "resumo": "Historial de entregas de webhook de esta clave"
      },
      {
        "metodo": "POST",
        "caminho": "/webhooks/deliveries/{event_id}/retry",
        "resumo": "Reenviar un evento"
      },
      {
        "metodo": "POST",
        "caminho": "/webhooks/test",
        "resumo": "Emitir un evento de prueba ahora"
      }
    ],
    "origem": "GET https://api.luniumpay.com/openapi.json",
    "verificado_em": "2026-09-22T00:27:02.350157+00:00",
    "openapi_sha256": "f021af28e516ef7c0e94547ba2cfa83834af5d1501cfa40a0b2995c989a6dc05"
  },
  "produtos": [
    {
      "id": "cash_in",
      "nome": "Cash-in",
      "descricao": "El cliente paga un PIX y se entrega la stablecoin (o el saldo en reales brasileños).",
      "endpoints": [
        "POST /cashin/preview",
        "POST /cashin/charge",
        "GET /cashin/{cashin_id}/status",
        "GET /cashin/charges",
        "GET /cashin/catalog",
        "GET /cashin/limits"
      ]
    },
    {
      "id": "cash_out",
      "nome": "Cash-out",
      "descricao": "El cliente envía cripto y una clave PIX (o una solicitud de cobro Copia y Pega) recibe reales brasileños.",
      "endpoints": [
        "POST /cash-outs/preview",
        "POST /cash-outs",
        "POST /cash-outs/{cashout_id}/accept",
        "GET /cash-outs/{cashout_id}",
        "GET /catalog"
      ]
    },
    {
      "id": "saldo",
      "nome": "Saldo de custodia en reales brasileños",
      "descricao": "Reales brasileños guardados por subcuenta (customer_ref): depósito mediante PIX, retiro mediante PIX o en cripto.",
      "endpoints": [
        "GET /saldo",
        "GET /saldo/extrato",
        "GET /saldo/clientes",
        "GET /saldo/consolidado",
        "POST /saldo/transferir",
        "POST /saldo/sacar-cripto"
      ]
    },
    {
      "id": "payouts",
      "nome": "Payout PIX",
      "descricao": "PIX directo en reales brasileños, sin etapa de cripto, debitado del saldo.",
      "endpoints": [
        "POST /payouts",
        "GET /payouts",
        "GET /payouts/{payout_id}"
      ]
    },
    {
      "id": "verificacao",
      "nome": "Verificación abierta",
      "descricao": "Cualquier persona puede comprobar un PIX mediante EndToEndId, sin clave.",
      "endpoints": [
        "GET /v1/verificar/{e2e}"
      ],
      "sem_chave": true
    }
  ],
  "ativos": {
    "instantaneo": {
      "descricao": "Vía de la plataforma. Cash-in: sin ruta instantánea; USDT/USDC en Polygon se entregan en un máximo de 2 min mediante el exchange (GET /cashin/catalog → instant está vacío desde el 16/09/2026). Cash-out (fast): USDT y USDC en Polygon; depósito detectado en segundos, PIX pagado en ~1–2 min.",
      "cash_in": [],
      "cash_out": [
        {
          "ativo": "USDT",
          "rede": "polygon"
        },
        {
          "ativo": "USDC",
          "rede": "polygon"
        }
      ]
    },
    "via_corretora": {
      "descricao": "Depósito en el exchange, conversión y liquidación; el plazo corresponde a las confirmaciones de la red (USDT/USDC en Polygon: hasta 2 min en cash-in).",
      "cash_out_ativos": 1443,
      "cash_out_redes": 238,
      "cash_in_rotas": 1761,
      "cash_in_redes": 279,
      "cash_in_moedas": 1551
    },
    "dex": {
      "descricao": "Tokens de baja demanda mediante DEX (envía token_address en la cotización).",
      "redes": [
        "polygon"
      ]
    },
    "memo_obrigatorio": {
      "descricao": "Redes de dirección compartida: el depósito debe incluir el memo/tag (deposit_tag en la aceptación; payout_tag en la compra).",
      "redes": [
        "algo",
        "atom",
        "eos",
        "hbar",
        "kava",
        "luna",
        "ton",
        "xlm",
        "xrp"
      ]
    },
    "catalogos_ao_vivo": {
      "cash_out": "https://api.luniumpay.com/catalog",
      "cash_in": "https://api.luniumpay.com/cashin/catalog"
    },
    "atualizado_em": "2026-09-17T18:37:10.285Z",
    "origem": "GET https://api.luniumpay.com/catalog e GET https://api.luniumpay.com/cashin/catalog"
  },
  "limites": {
    "por_operacao": {
      "cashin": {
        "min_brl_cents": 100,
        "max_brl_cents": 600000
      },
      "payout": {
        "min_brl_cents": 100,
        "max_brl_cents": 600000
      },
      "cashout": {
        "min_brl_cents": 600,
        "max_brl_cents": 25000000
      }
    },
    "por_pagador": {
      "applies_to": [
        "cash-in"
      ],
      "first_transaction_cents": 10000,
      "first_window_cents": 20000,
      "first_window_hours": 24,
      "mature_daily_cents": 600000,
      "nota": "Por CPF/CNPJ del pagador. Consulta el disponible de un pagador en GET /cashin/limits?payer_tax="
    },
    "por_recebedor": {
      "applies_to": [
        "cash-out"
      ],
      "daily_cents": 10000000,
      "scope": "cpf_cnpj",
      "nota": "Por CPF/CNPJ de quien recibe el PIX, sumado en el día (se renueva a medianoche, hora de Brasilia). Cuando la clave PIX no es un documento (correo electrónico, teléfono, aleatoria), el límite se aplica por clave: nunca pedimos el CPF de quien vende."
    },
    "validade_do_qr_minutos": 15,
    "nota": "Sin límite diario por clave desde el 10/09/2026 (los niveles Início/Crescimento/Escala ya no existen). Se aplican el rango por operación, la escala por pagador (cash-in), el límite por destinatario (cash-out) y el mandate que defina la propia clave. El mínimo efectivo de cash-in depende de la tarifa y la ruta de la clave: lee GET /keys/me y min_brl_cents en POST /cashin/preview.",
    "origem": "GET https://api.luniumpay.com/keys/me → limits",
    "teto_diario_por_chave": null
  },
  "retencao": {
    "escada_do_pagador": {
      "aplica_a": "cash-in (PIX → cripto o saldo), por CPF/CNPJ de QUIEN PAGA",
      "estreia_cents": 10000,
      "primeiras_24h_cents": 20000,
      "maduro_dia_cents": 600000,
      "consulta": "GET /cashin/limits?payer_tax=",
      "origem": "GET /keys/me → limits.payer_limits"
    },
    "retido_no_provedor": {
      "descricao": "Por encima de la escala instantánea, el QR sigue aceptándose: el proveedor retiene el importe durante 24 h (retención de 24 h en el proveedor) antes de liberarlo, hasta R$ 6.000/día ya en la 1ª operación. El socio lo desactiva con allow_hold:false y recibe 403 que indica cuánto se admite de inmediato.",
      "horas": 24,
      "teto_dia_cents": 600000,
      "campos_na_resposta": [
        "held",
        "delay_until"
      ],
      "origem": "PAYER_DELAY_HOURS / PAYER_DELAY_MAX_CENTS (configuración del servicio)"
    },
    "carencia_do_saldo": {
      "descricao": "Crédito del depósito en saldo disponible en el momento en que se liquida el PIX (carencia_horas 0, carencia_ate null desde el 16/09/2026); período de espera solo por acuerdo contractual. Solo el 1º PIX de un documento por encima de retencao_acima_cents llega congelado hasta que lo libera el proveedor (saldo.liberado).",
      "horas_padrao": 0,
      "campos_na_resposta": [
        "carencia_horas",
        "liberar_em",
        "carencia_ate"
      ],
      "origem": "GET /saldo (carencia_horas) e saldo_hold_hours da chave"
    },
    "invariante": "Ninguna vía de liquidación envía antes de que venza la retención: la comprobación se realiza en la liquidación y se repite al reclamar el trabajo en SQL (fail-closed)."
  },
  "estados": {
    "cash_in": [
      "pending",
      "delayed",
      "under_review",
      "paid",
      "expired",
      "refunded",
      "failed"
    ],
    "cash_out": [
      "QUOTE_CREATED",
      "AWAITING_DEPOSIT",
      "DEPOSIT_DETECTED",
      "PAYING_OUT",
      "COMPLETED",
      "MANUAL_REVIEW",
      "REFUNDING_CRYPTO",
      "REFUNDED",
      "EXPIRED",
      "FAILED"
    ],
    "payout": [
      "requested",
      "processing",
      "sent",
      "failed",
      "refunded"
    ],
    "origem": "OpenAPI (esquemas CashOut.state, Cobranca.status/settlement_status, Payout) y timeline marcada por el servidor (GET /cash-outs/{id}.timeline)",
    "cash_in_settlement_status": [
      "pending",
      "sending",
      "sent",
      "incerto",
      "failed"
    ],
    "cash_out_timeline_etapas": [
      "AWAITING_DEPOSIT",
      "DEPOSIT_DETECTED",
      "DEPOSIT_CONFIRMED",
      "SELLING",
      "SOLD",
      "FORWARDING",
      "PAYING_OUT",
      "COMPLETED"
    ]
  },
  "seguranca": [
    {
      "id": "webhook_assinado",
      "descricao": "El webhook usa HMAC SHA-256 y timestamp en X-Lunium-Signature. El receptor debe validar la firma sobre los bytes originales, comprobar la ventana temporal y deduplicar event_id; la firma por sí sola no impide la repetición."
    },
    {
      "id": "idempotencia",
      "descricao": "Usa external_id persistente y el mismo cuerpo en los reintentos. Consulta la operación original tras un timeout. La validación de discrepancias y el orden de las comprobaciones varían según la ruta; no generes un ID nuevo para eludir una respuesta incierta o 429."
    },
    {
      "id": "egress_validado",
      "descricao": "La URL del webhook se resuelve y valida antes de cada entrega: se rechazan las direcciones internas, los metadatos de nube y las redirecciones a redes privadas; la conexión se fija a la IP validada."
    },
    {
      "id": "retencao_fail_closed",
      "descricao": "La retención se comprueba en la liquidación y de nuevo al reclamar el trabajo en SQL: ninguna vía (worker, consulta de estado, cola) puede liquidar antes de tiempo."
    },
    {
      "id": "payout_duravel",
      "descricao": "El retiro registra la operación y debita el saldo en la MISMA transacción, antes de cualquier llamada al proveedor: no existe un débito sin una orden que conciliar."
    },
    {
      "id": "verificacao_aberta",
      "descricao": "GET /v1/verificar/{e2e} confere um PIX liquidado sem chave nenhuma — a contraparte não precisa confiar na nossa palavra."
    }
  ],
  "medicoes": [
    {
      "chave": "cashout_polygon_aceite_ate_pix_p50_s",
      "descricao": "Mediana desde la aceptación de la cotización hasta el PIX pagado, para ventas liquidadas en Polygon.",
      "valor": 83,
      "unidade": "segundos",
      "amostra": 66,
      "janela_dias": 90,
      "medido_em": "2026-09-17T09:00:00Z",
      "origem": "cashout_eventos (marca del servidor en cada transición)"
    },
    {
      "chave": "cashout_polygon_aceite_ate_pix_p90_s",
      "descricao": "p90 desde la aceptación hasta el PIX pagado, para ventas liquidadas en Polygon.",
      "valor": 194,
      "unidade": "segundos",
      "amostra": 66,
      "janela_dias": 90,
      "medido_em": "2026-09-17T15:09:36.264Z",
      "origem": "cashout_eventos"
    },
    {
      "chave": "cashin_polygon_prazo_entrega",
      "descricao": "USDT/USDC en Polygon en cash-in: hasta 2 min (entrega mediante exchange desde el 16/09/2026; sin medición propia publicada).",
      "valor": "hasta 2 min",
      "unidade": "prazo",
      "medido_em": "2026-09-17T09:00:00Z",
      "origem": "GET /cashin/catalog → convert[].eta"
    },
    {
      "chave": "cashin_operacoes_entregues",
      "descricao": "Compras (PIX → cripto) entregadas en el intervalo.",
      "valor": 209,
      "unidade": "operaciones",
      "amostra": 209,
      "janela_dias": 90,
      "medido_em": "2026-09-17T15:09:36.264Z",
      "origem": "cashin_charges"
    },
    {
      "chave": "cashout_operacoes_completas",
      "descricao": "Ventas (cripto → PIX) completadas en el intervalo.",
      "valor": 66,
      "unidade": "operaciones",
      "amostra": 66,
      "janela_dias": 90,
      "medido_em": "2026-09-17T15:09:36.264Z",
      "origem": "cashout_orders"
    },
    {
      "chave": "payouts_enviados_com_comprovante",
      "descricao": "Retiros PIX enviados que tienen EndToEndId (comprobante verificable): el denominador de la muestra es el total enviado.",
      "valor": 32,
      "unidade": "operaciones",
      "amostra": 32,
      "janela_dias": 90,
      "medido_em": "2026-09-17T15:09:36.264Z",
      "origem": "payout_orders"
    },
    {
      "chave": "webhooks_entregues_30d",
      "descricao": "Webhooks entregados con 2xx en los últimos 30 días; la muestra es el total de intentos.",
      "valor": 519,
      "unidade": "entregas",
      "amostra": 662,
      "janela_dias": 90,
      "medido_em": "2026-09-17T15:09:36.264Z",
      "origem": "cashin_webhook_deliveries"
    }
  ],
  "links": {
    "documentacao": "https://docs.luniumpay.com",
    "documentacao_en": "https://docs.luniumpay.com/es/",
    "openapi": "https://api.luniumpay.com/openapi.json",
    "llms_txt": "https://docs.luniumpay.com/es/llms.txt",
    "status": "https://docs.luniumpay.com/es/status",
    "status_json": "https://docs.luniumpay.com/es/status.json",
    "manual_pdf": "https://docs.luniumpay.com/es/manual.pdf",
    "sandbox": "POST https://api.luniumpay.com/keys/sandbox com {\"email\":\"voce@empresa.com\"} (obrigatório)",
    "contato": "contato@luniumpay.com"
  },
  "documentacao": {
    "revisao": "2026-09-19.3",
    "manual": "https://docs.luniumpay.com/es/manual",
    "contrato": "https://docs.luniumpay.com/es/manual-contract.json",
    "nota": "Contrato y revisión documental actualizados; gerado_em, medicoes y las demás instantáneas conservan sus fechas originales. Los catálogos, tarifas, límites y disponibilidad deben consultarse en tiempo de ejecución."
  },
  "snapshot_warning": "Este archivo mezcla un contrato revisado e instantáneas históricas con fecha. No uses mediciones históricas ni cifras del catálogo como promesa, SLA ni disponibilidad actual. Lee manual-contract.json y las rutas de la clave."
}
