Skip to main content
A modalidade precisa estar habilitada para a sua conta; caso contrário, a API retorna FUNDING_MODE_NOT_ENABLED.

1. Cotar com usage = INVENTORY

Solicite a cotação em POST /v1/fx/quotes com usage = INVENTORY e exatamente um entre sourceAmount (USD) e destinationAmount (BRL). A resposta traz duas datas: expiresAt é a validade da própria cotação; inventoryExpiresAt é a validade que o lote terá se for criado.
POST /v1/fx/quotes · requisição
Corpo da requisição
201 · FxQuote

2. Criar o lote

Chame POST /v1/inventories com o quoteId. Essa chamada é o aceite: em uma operação a LB Pay fecha com você taxa e volume, cria a promessa de pagamento em USDC e cria o lote, que nasce ACTIVE. A cotação passa a USED e registra o inventoryId. Cada chamada cria um lote novo e independente; lotes nunca são agregados. O lote pode existir sem nenhum withdrawal.
POST /v1/inventories · requisição
Corpo da requisição
201 · Inventory

3. Consultar saldos

GET /v1/inventories/{inventoryId} retorna taxa, validade e saldos. Todos os saldos aparecem em BRL e USD. O controle é feito em BRL; o USD é calculado na taxa do lote.
total = available + reserved + used, sempre.
Exemplo: um lote de USD 100.000,00 à taxa 5,40000000 equivale a BRL 540.000,00. Um withdrawal de BRL 10.000,00 reserva USD 1.851,85 (10.000 ÷ 5,40).

Status do lote

4. Criar o withdrawal

Crie o withdrawal com funding.mode = INVENTORY, funding.inventoryId, destinationAmount (o BRL que o beneficiário recebe) e senderQuote. Não envie quoteId. Valores e taxa vêm do lote. A LB Pay confere se o lote existe na sua conta, está dentro da validade e tem BRL disponível suficiente, aplica as validações usuais do withdrawal e reserva o volume de forma atômica. Outro lote nunca é usado automaticamente.
Violação retorna VALIDATION_ERROR (400), com o campo em details.
senderQuote traz os dados da operação de câmbio da MSB com o remetente: taxa, valores em USD e BRL, horário da cotação e a sua referência. É gravado como recebido e usado na formalização da operação. Não altera os valores da remessa nem a taxa do lote. A estrutura pode receber novos campos.
POST /v1/remittances/withdrawals · requisição
Corpo da requisição
201 · WithdrawalResponse
422 · ApiError

5. Acompanhar e conciliar

  • inventory.created: lote criado. inventory.status_changed: ACTIVE ↔ DEPLETED, ou EXPIRED. Nos dois, data.object é o Inventory.
  • Remessas financiadas por um lote seguem os eventos remittance.*.
  • Mudanças de saldo sem mudança de status não geram evento. Consulte o saldo em GET /v1/inventories/{inventoryId}.
  • Liste as remessas de um lote com GET /v1/remittances?inventoryId=.
  • Em uma remessa INVENTORY, quoteId é null, inventoryId identifica o lote e fx.rate é a taxa do lote. fx.status = CONTRACTED só depois da confirmação da execução. Em REJECTED, o volume reservado volta ao lote.

Erros

Boas práticas
  • Informe sempre o lote explicitamente. A LB Pay nunca usa outro lote automaticamente.
  • Trate INSUFFICIENT_INVENTORY_BALANCE consultando o saldo antes de tentar de novo.
  • Use Idempotency-Key na criação do lote e no withdrawal.
  • Envie em senderQuote os valores reais da operação com o remetente.

Em definição

Validade e expiração do volume não utilizado, cancelamento de lote e cobrança da obrigação em USDC ainda estão em definição. Essas regras serão comunicadas antes da disponibilidade geral.