Skip to main content
Referência dos principais blocos do @beinfi/sdk (0.10.0). Se você só quer receber sem construir nada, comece por link de pagamento.

Cliente

O prefixo da chave decide o modo, e o modo decide os dois hosts: sk_test_ → api-sandbox.beinfi.com + app-sandbox.beinfi.com; sk_live_ → api.beinfi.com
  • app.beinfi.com. Pra apontar pra outro lugar (local, self-host, teste), passe apiUrl e/ou appUrl no construtor — não existe variável de ambiente pra isso.
Cobrança sem checkout do seu lado. Precisa de produto com versão publicada — veja catálogo:

Identifique o pagador

A Infi não faz o login do seu usuário final — traga o seu auth (Clerk, Supabase, NextAuth, o seu) e inscreva o id que você já tem no produto:
products.enroll é a chamada recomendada: ela devolve a inscrição (enrollment) do cliente naquele produto. Existe também infi.customers.create(input), que cria um cliente no nível do tenant e recebe só o input — passar productId pra ela responde 400.
Use .id — não .customerId. A resposta do enroll traz dois ids diferentes, e o campo chamado customerId não é o que as chamadas de cobrança querem:
O parâmetro se chama customerId mas espera e.id. Passar e.customerId responde 422 (customerId: unknown customer):
Guarde e.id associado ao seu usuário. É a única coisa que você precisa persistir do nosso lado.

Wallet: enroll + saldo numa chamada

Se o seu produto é pré-pago (o cliente compra crédito antes de usar), wallet.forCustomer faz a inscrição, aplica o saldo inicial e devolve tudo que você precisa depois:
O saldo ainda não é isolado por meter. A API é por meter (wallet.balance("tokens"), wallet.debit("exports", …)), mas hoje existe um saldo só por inscrição: pedir o saldo de dois meters diferentes devolve o mesmo número (verificado com @beinfi/sdk@0.10.0). O meter vai na referência do lançamento, então o histórico separa — o saldo, não. Não conte com isolamento por meter ainda.
Grants do plano (on: cycle | payment) vivem em infi.company.ts — veja company as code.

Medição de uso

Fora do caminho crítico. track registra uso sem segurar request nem run de agente. Ele responde { eventId, accepted, duplicate } — duplicate: true é dedupe, não erro.

LLM medido

meter checa saldo, roda a chamada e registra uso. Sem saldo → InsufficientCreditError (402) antes de gastar.
Streaming (baixa explícita no onFinish, porque o total de tokens só existe no fim):
Estado agregado (saldo + assinaturas + uso do período):

Erros

InfiError.errors[] é onde vive o motivo real de um 422 — é o campo que responde “por que essa escrita foi recusada”. err.fix traz remediação quando a API manda uma.

React

Saber que pagou

Webhook assinado em produção, polling em sandbox.

Entregar o produto

Anexe arquivo ou link e a Infi entrega quando o pagamento confirma.