Skip to Content
Referência da APIVisão geral
View as Markdown

Referência da API

Todo endpoint abaixo fala JSON, vive sob https://api.infraio.xyz (prod) ou https://api-dev.infraio.xyz (teste) e autentica via HMAC-SHA256 — veja Autenticação para a assinatura de requisições e Erros para o formato do envelope de erro.

Esta página lista os endpoints para integrações de lojistas. Quando um endpoint não tem página própria, ele é descrito na página de conceito relacionada.

Os endpoints sob /b2b/v1/* são assinados com HMAC usando a sua chave secreta (sk_…). Esta é a superfície que o seu backend chama. O dashboard do lojista e o checkout hospedado usam os próprios endpoints, que não fazem parte da API de integração.

Checkout

MétodoPathPropósitoNotas
POST/b2b/v1/checkout-sessions/quickCria uma sessão numa chamada — pedido + sessão de checkout criados juntos.Veja Início rápido para o body da requisição e exemplo.
POST/b2b/v1/checkout-sessionsCria uma sessão contra um pedido existente. Use quando a sua plataforma já tem o próprio modelo de pedido e você quer uma sessão por tentativa.O fluxo em dois passos.
GET/b2b/v1/checkout-sessions/by-order/{order_id}Lista todas as sessões já criadas para um pedido.Útil quando um comprador abandonou uma sessão e você quer mostrar as tentativas anteriores no seu dashboard.

Pedidos

Pedidos são a entidade faturável atemporal. Um único pedido pode suportar várias sessões de checkout (por exemplo, o comprador abandona e tenta de novo).

MétodoPathPropósitoNotas
POST/b2b/v1/ordersCria um pedido sem sessão.Use quando você quer mandar para o comprador um link de pagamento depois, em vez de redirecioná-lo imediatamente.
GET/b2b/v1/orders/{id}Lê um único pedido com itens + status.Status: PENDING → PAID | PARTIAL_PAID | CANCELED. Depois de reembolso: PARTIALLY_REFUNDED | REFUNDED.
GET/b2b/v1/orders/by-merchant/{merchant_id}Lista os seus pedidos, com paginação por cursor.Veja Paginação por cursor para o protocolo de cursor.
PATCH/b2b/v1/orders/{id}/cancelMarca um pedido não pago como cancelado. Dispara order.canceled.Falha se o pedido já estiver pago.
PATCH/b2b/v1/orders/{id}/reopenReverte um auto-cancel (canceled_reason=payment_timeout).Útil se o comprador volta depois do TTL expirar.

Reembolsos

Veja a página de conceitos sobre reembolsos para o fluxo da saga e o ciclo de vida do token.

Iniciado pelo lojista

MétodoPathPropósitoNotas
POST/b2b/v1/merchants/{merchant_id}/refundsReembolso iniciado pelo lojista. Auto-aprovado (pula PENDING).Dispara payment.refund.approved imediatamente.

Iniciado pelo cliente — tokens de pedido de reembolso

O comprador preenche o formulário de reembolso na nossa página hospedada; você só cria o token e entrega a URL. Você pode criar tokens a partir do seu backend (abaixo) ou do dashboard do lojista. Renovações e cancelamentos são tratados no dashboard.

MétodoPathAuthPropósito
POST/b2b/v1/merchants/{merchant_id}/refund-requestsHMAC (sk_…)Cria um token a partir do seu backend. Body: {ref_type, ref_value, amount, ttl_seconds?, metadata?, hide_summary?, hide_header?}. ref_type é um de order_id / order_number / session_id / session_key; ref_value é o identificador correspondente. amount é obrigatório e trava o máximo que o comprador pode submeter. TTL padrão 30 min. Dispara refund_request.created (source: b2b).

Ciclo de vida do reembolso (pós-criação)

Aplica aos dois fluxos. Os endpoints abaixo operam no próprio reembolso (id começa com rfn_…), não no token de pedido.

MétodoPathPropósitoNotas
GET/b2b/v1/refunds/{id}Lê um reembolso.Status: PENDING → APPROVED → EXECUTED | REJECTED.
GET/b2b/v1/refunds/by-merchant/{merchant_id}Lista os seus reembolsos, com paginação por cursor.—
POST/b2b/v1/refunds/{id}/approveAprova um reembolso PENDING (só iniciado pelo cliente — iniciado pelo lojista já cai em APPROVED).Cripto: cai em APPROVED, você chama /submit-tx em seguida.
POST/b2b/v1/refunds/{id}/rejectNega um reembolso PENDING.Dispara payment.refund.rejected.
POST/b2b/v1/refunds/{id}/submit-txSó cripto — estampa o tx hash on-chain que você transmitiu.Body: {tx_hash, network, token_address} — todos os três obrigatórios.

Catálogo (somente leitura)

MétodoPathPropósito
GET/v1/supported/networksTodas as redes em que a InfraIO Pay consegue liquidar (mainnet + testnet, filtradas por ambiente).
GET/v1/supported/tokensTodas as stablecoins nessas redes.
GET/v1/supported/currenciesMoedas aceitas para order.currency.

Saúde

MétodoPathAuthPropósito
GET/healthNenhuma (público)Verificação de liveness. Retorna {"status":"ok"}. Aponte os seus monitores de uptime para aqui.

Paginação por cursor

Todo endpoint de lista aceita os mesmos query params e retorna o mesmo envelope. Os cursores são opacos e usados em vez de offsets, para que uma página nunca mude quando uma nova linha chega enquanto você pagina.

Query paramTipoPadrãoNotas
cursorstring—Opaco — copie o next_cursor da resposta anterior literalmente.
limitint201..100.
sort_dir'asc' | 'desc'descOrdena por (created_at, id).
from / toRFC3339—Filtro opcional de janela de tempo.
searchstring—Filtro de texto livre onde suportado.

Envelope da resposta:

{ "orders": [ /* linhas da página */ ], "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNS0...", "has_next": true }

has_next está sempre presente. next_cursor é omitido quando has_next é false. Trate o cursor como uma string opaca.

O que falta nesta página

Esta página cobre os endpoints destinados a integrações de lojistas. Se você precisa de um endpoint que não está listado, ou de uma spec OpenAPI, fale com o suporte.