Finuse Pago — Documentação da API
Finuse Pago
API v1.0 Voltar ao site
Finuse Pago

Documentação da API

Plataforma de Recebíveis · API Multi-Tenant Masters · Produção

REST API HTTPS / TLS 1.2 OAuth2 JWT Webhooks HMAC Liquidação USDT
Versão da API
v1.0
Última revisão
01/09/2026
Categoria
Mostruário
Público-alvo
Desenvolvedores · Parceiros · Clientes

1. O que é o Finuse Pago?

O Finuse Pago é a melhor infraestrutura internacional de pagamentos com stablecoin. O posicionamento é direto: transformamos stablecoins em infraestrutura financeira utilizável no dia a dia para empresas ou plataformas digitais. Em vez de maquininha, conta bancária e espera de repasse, o comerciante abre o aplicativo, cobra em Pix e recebe em dólar digital.

O fluxo é o mesmo em qualquer operação atendida pela plataforma: o pagador envia um Pix em reais, a venda é reconhecida e a liquidação chega em USDT em segundos, direto na carteira do cliente, totalmente na autocustódia dele. A chave privada nunca sai do titular, e o saldo pode sair de novo por Pix, boleto ou para outra wallet quando ele quiser.

Ponto de venda no celular

O aparelho do lojista vira o terminal. Cobrança por Pix, QR Code e link, sem maquininha e sem hardware.

Liquidação em segundos

O Pix entra em reais e a liquidação chega em USDT em segundos, na cotação do momento da venda.

Autocustódia real

O saldo vai direto para a carteira do cliente. A chave é dele; a Finuse não custodia o dinheiro.

Alcance internacional

Uma conta em dólar digital com liquidação on-chain, disponível 24/7 e sem fronteira bancária.

Esta documentação descreve a mesma infraestrutura pelo lado da integração: os endpoints que empresas parceiras usam para oferecer essa experiência dentro do próprio produto.

2. O que é a API Finuse Pago?

A API Finuse Pago (Módulo Masters) é uma plataforma multi-tenant de recebíveis digitais, onde cada empresa parceira (chamada de Master Instance) opera com sua própria camada isolada de autenticação, permissões (scopes), webhooks e relatórios.

RecursoO que você pode fazer?
Vendas (PIX / USDT)Criar cobranças com QR Code PIX (BRL) ou USDT cripto (Polygon/TRON/Solana).
Catálogo de ProdutosManter SKUs, preços, estoque e categorias de produtos/serviços.
CRM de ClientesCadastrar compradores, vincular vendas e histórico.
Webhooks AtivosReceber notificações em tempo real (HMAC-SHA256) quando algo acontece na sua Master.
OAuth2 + ScopesCredenciais com permissões granulares (só vendas.read, por exemplo).
Swagger PersonalizadoDocumentação interativa 100% filtrada para os scopes da sua Master.

3. Conceitos & Arquitetura Multi-Tenant Masters

Antes de integrar, é importante entender os 3 pilares da plataforma:

TermoSignificado
Master Instance (Tenant)Conta exclusiva de uma empresa. Toda venda, produto, cliente e webhook pertence a 1 e só 1 Master. Isolamento 100% no banco, no cache e nas URLs.
X-Master-KeyIdentificador público e único da Master. TODA requisição HTTP (incluindo /v1/auth/login) precisa enviar esse header. Ex.: loja-padaria-x-298.
Credencial OAuth2 (Client ID + Client Secret)Par de credenciais que a sua aplicação backend usa para obter o Bearer Token JWT. Cada Master pode ter 0..N credenciais (ex.: erp-servico, site-checkout, marketplace-integracao) — cada uma com scopes (permissões) diferentes.
ScopePermissão granular aplicada a uma credencial. Ex.: uma credencial de relatório só teria vendas.read — não pode criar vendas.

4. Autenticação & Autorização (OAuth2 Client Credentials)

4.1 Visão geral do fluxo de autenticação

Sua aplicação backend                      API Finuse Pago
─────────────────────                      ───────────────
        │                                          │
        │── POST /v1/auth/login ──────────────────▶│
        │   Headers:                                │
        │     X-Master-Key: SUA-MASTER-KEY          │
        │   Body JSON:                              │
        │     { ClientId, ClientSecret }            │
        │                                          │
        │◀── 200 OK + accessToken ─────────────────│
        │        (válido ~4h)                       │
        │                                          │
        │── GET /v1/vendas?take=50 ───────────────▶│
        │   Headers:                                │
        │     X-Master-Key: SUA-MASTER-KEY          │
        │     Authorization: Bearer <token>         │
        │                                          │
        │◀── 200 OK + PagedResponse ───────────────│
        │                                          │

4.2 Endpoint de Login — POST /v1/auth/login

ItemValor
Método HTTPPOST
URLhttps://api-finuse-pago/v1/auth/login
Content-Typeapplication/json
Header OBRIGATÓRIOX-Master-Key: SUA-MASTER-KEY

Body (JSON recomendado)

{
  "ClientId": "SUA-CREDENCIAL-CLIENT-ID",
  "ClientSecret": "SUA-CREDENCIAL-CLIENT-SECRET"
}

Alternativa OAuth2 tradicional (snake_case)

{
  "grant_type": "client_credentials",
  "client_id": "SUA-CREDENCIAL-CLIENT-ID",
  "client_secret": "SUA-CREDENCIAL-CLIENT-SECRET"
}

Resposta 200 OK

{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "tokenType": "Bearer",
  "expiresIn": 14400,
  "expiresAtUtc": "2026-09-01T23:45:00Z"
}

4.3 Scopes (permissões) suportados pela plataforma

Dica de segurança: sempre crie credenciais com o MÍNIMO de scopes necessários para a função (princípio do menor privilégio).

ScopePermite
vendas.readConsultar, listar, detalhar vendas e relatórios
vendas.writeCriar, pagar, cancelar, alterar status de vendas
produtos.readListar / detalhar produtos cadastrados
produtos.writeCriar / atualizar / desativar produtos e SKUs
clientes.readConsultar listagem e detalhamento do CRM de clientes
clientes.writeCadastrar / atualizar / desativar clientes
webhooks.readListar subscriptions e ver histórico de entrega de eventos
webhooks.writeCriar / atualizar / desativar subscriptions de webhook

5. Formato do Token JWT

O accessToken retornado no login é um JWT assinado HMAC-SHA256. Claims garantidos:

Claim (key do JWT)DescriçãoExemplo
iss (Issuer)Autoridade emissorahttps://finuse.com.br/pago
aud (Audience)Destinatário esperadofinuse.pago.api
client_idClient ID autenticadoloja-cliente-x-prod-a1b2c3
master_idID interno (long) da Master Instance142
master_keyX-Master-Key público da Masterloja-cliente-x-298
scopeScopes (array ou string separada por espaço)["vendas.read","vendas.write"]
nbfEpoch de início de validade (Not Before)1788288000
expEpoch de expiração. Padrão = 4h (14400s)1788302400
jtiID único do token (auditoria)UUID a1b2c3d4-...

6. Códigos HTTP e Tratamento de Erros

TODOS os erros de validação/negócio seguem a especificação RFC 7807 ProblemDetails. Sempre inspecione o body JSON em caso de falha.

HTTPCenário comumO que fazer?
200 OKConsulta ou operação com retornoProssiga usando o conteúdo do body
204 No ContentOperação sem retorno (DELETE, POST pagar)Sucesso — não há body
400 Bad RequestValidação (campo obrigatório, SKU duplicado, venda inválida)Corrija os campos apontados em errors + detail
401 UnauthorizedToken ausente / expirado ou X-Master-Key faltandoRefaça o login OAuth; confira o header X-Master-Key
403 ForbiddenScope ausente na credencialContate a Finuse para habilitar o scope
404 Not FoundID de venda/produto/webhook não existe na sua MasterVerifique se o ID pertence à sua Master (IDs são isolados por Master)
409 ConflictOperação inválida pelo estado (estornar venda já cancelada)Faça GET para consultar o estado atual antes de repetir
422 Unprocessable EntitySintaxe válida mas viola regra de negócio forteReporte com traceId + horário para o suporte
429 Too Many RequestsRate limit excedido (padrão 300 req/min por client)Backoff exponencial + retentativa
5xxErro interno (raro)Retente após 30s (se a operação for idempotente) e reporte o traceId

Exemplo de body de erro 400

{
  "type": "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.1",
  "title": "Erro de validação",
  "status": 400,
  "detail": "SKU 'plano-mensal' já existe nesta Master",
  "instance": "/v1/produtos",
  "traceId": "00-ea1c105abef731e3512c8d238b7...-00",
  "errors": {
    "sku": ["SKU deve ser único por Master"]
  }
}

Dica: sempre logue traceId + horário quando reportar bug ao suporte. Ele rastreia a requisição completa de ponta a ponta nos nossos logs.

7. Paginação

Todos os endpoints de listagem usam o envelope padrão PagedResponse<T>:

{
  "data": [ /* objetos retornados nesta página */ ],
  "totalCount": 350,
  "skip": 0,
  "take": 50,
  "hasMore": true
}
Query paramTipoPadrãoMín/MáxDescrição
skipint00 / —Registros a pular (ex.: segunda página = skip=200 com take=200)
takeint2001 / 200Máximo de registros por página

Regra de paginação: enquanto hasMore === true, continue pedindo a próxima página.

8. Módulo 01 — Vendas

A entidade central da plataforma. Representa uma cobrança a receber do cliente.

8.1 Endpoints disponíveis

MétodoRotaScope exigidoDescrição
POST/v1/vendasvendas.writeCriar venda pendente (gera QR Code PIX / USDT). Dispara venda.criada.
GET/v1/vendasvendas.readListar vendas paginadas + filtro por status
GET/v1/vendas/{id}vendas.readDetalhar venda completa por ID
POST/v1/vendas/{id}/pagarvendas.writeMarcar como Paga. Dispara venda.paga.
POST/v1/vendas/{id}/cancelarvendas.writeCancelar venda Pendente. Dispara venda.cancelada.
PATCH/v1/vendas/{id}/statusvendas.writeAlterar status arbitrário. Dispara venda.status_alterado.

8.2 Criar Venda — POST /v1/vendas

Body da requisição

CampoTipoObr.DefaultDescrição
titulostringSim—Título curto exibido no extrato do comprador
descricaostringNãonullDescrição longa (opcional)
valorBrldecimalSim—Valor em BRL (Reais), > 0
moedaRecebimentostringNãodefault da MasterBRL / USDT / BTC
produtoIdlongNãonullVínculo a produto pré-cadastrado
clienteIdlongNãonullVínculo a cliente pré-cadastrado
quantidadeintNão1Unidades vendidas
chaveExternastringNãonullID interno do seu ERP/Sistema. Use para deduplicação!

Exemplo de request cURL

curl --request POST \
  --url 'https://api-finuse-pago/v1/vendas' \
  --header 'Content-Type: application/json' \
  --header 'X-Master-Key: SUA-MASTER-KEY' \
  --header 'Authorization: Bearer SEU-JWT-AQUI' \
  --data '{
    "titulo": "Mensalidade Julho/2026",
    "descricao": "Plano Profissional - ref. 07",
    "valorBrl": 299.90,
    "produtoId": 42,
    "clienteId": 7,
    "quantidade": 1,
    "chaveExterna": "pedido-interno-98127"
  }'

Resposta 200 OK (campos do QR Code PIX)

{
  "vendaId": 777,
  "status": "Pendente",
  "criadoEm": "2026-09-01T12:00:00Z",
  "qrCodeEmv": "00020126580014BR.GOV.BCB.PIX0136...",
  "qrCodeBase64Png": "data:image/png;base64,iVBORw0KGgoAAAA...",
  "expiraEm": "2026-09-01T12:15:00Z"
}

8.3 Ciclo de vida — status possíveis de uma Venda

StatusDescrição
PendenteVenda criada. QR Code PIX ativo. Aguardando pagamento.
EmProcessamentoPagamento detectado (mempool) mas aguardando confirmação blockchain (USDT).
PagaPagamento confirmado 100%. Recebível liquidado.
CanceladaQR Code expirou sem pagamento, ou cliente cancelou via /cancelar.
EstornadaValor devolvido ao comprador (operacional).

9. Módulo 02 — Produtos

Cataloga SKUs da sua operação (produtos físicos, serviços, planos recorrentes, etc.).

MétodoRotaScopeDescrição
POST/v1/produtosprodutos.writeCriar produto
PUT/v1/produtos/{id}produtos.writeAtualizar produto
DELETE/v1/produtos/{id}produtos.writeSoft delete — desativa produto
GET/v1/produtosprodutos.readListar (query param apenasAtivos=true/false)
GET/v1/produtos/{id}produtos.readDetalhar

9.1 Campos principais de Produto

CampoTipoObr.Descrição
skustringSimID único por Master (código interno do seu ERP)
nomestringSimNome exibível ao comprador
descricaostringNãoDescrição longa
precoBrldecimalSimPreço unitário em Reais
moedastringNãoBRL (default) / USDT / etc.
categoriastringNãoAgrupamento de produtos
imagemUrlstring (URL)NãoCapa pública do produto
urlExternastring (URL)NãoLink para página de vendas no seu site
estoqueintNãoQuantidade em estoque (só efetivo se estoqueInfinito=false)
estoqueInfinitoboolNãotrue default (serviços / produtos digitais = sem estoque)

10. Módulo 03 — Clientes

CRM interno — cadastra pessoas/empresas compradoras. Tudo isolado por Master.

MétodoRotaScopeDescrição
POST/v1/clientesclientes.writeCadastrar cliente
PUT/v1/clientes/{id}clientes.writeAtualizar
DELETE/v1/clientes/{id}clientes.writeSoft delete (desativa)
GET/v1/clientesclientes.readListar paginado
GET/v1/clientes/{id}clientes.readDetalhar completo

10.1 Campo chaveExterna (super importante!)

Use chaveExterna para armazenar o ID do cliente no SEU sistema/CRM. Assim você encontra o cliente pelo ID interno seu, sem precisar mapear IDs da Finuse.

11. Módulo 04 — Webhooks

Webhooks são requisições POST HTTPS ativas que a Finuse envia para a sua aplicação sempre que um evento acontece na sua Master. Use para:

  • Atualizar status de pedido no seu ERP em tempo real
  • Liberar acesso em plataforma SaaS (após venda.paga)
  • Disparar e-mail de comprovante automático

11.1 Eventos disponíveis

EventoPayload principalDisparado por
venda.criadavendaId, status, chaveExterna, valorBrl, criadoEmPOST /v1/vendas com sucesso
venda.pagavendaId, pagoEm, txIdBlockchain, valorBrl, valorUsdt, cotacaoUsdBrlVenda marcada Paga (manual ou liquidação automática)
venda.canceladavendaId, status, canceladaEmCancelamento ou QR expirado
venda.expiradavendaId, status, expirouEmQR Code PIX/USDT expirou sem pagamento
venda.status_alteradovendaId, statusAnterior, statusNovo, alteradoEmPATCH /status com sucesso
checkout.geradovendaId, qrCodeEmv, expiraEm, ...QR code de pagamento gerado

11.2 Endpoints de gerenciamento

MétodoRotaScopeDescrição
POST/v1/webhooks/subscriptionswebhooks.writeCriar subscription
GET/v1/webhooks/subscriptionswebhooks.readListar subscriptions
GET/v1/webhooks/subscriptions/{id}webhooks.readDetalhar
PATCH/v1/webhooks/subscriptions/{id}webhooks.writeAtualizar (URL / eventos / secret / ativo)
DELETE/v1/webhooks/subscriptions/{id}webhooks.writeDesativar
GET/v1/webhooks/subscriptions/{id}/eventswebhooks.readHistórico de tentativas de entrega
GET/v1/webhooks/supported-eventspúblicoLista tipos de evento disponíveis hoje

11.3 Exemplo de body de criação de Subscription

{
  "url": "https://api.seusistema.com/webhooks/finuse-pago",
  "secret": "SUA-SENHA-HMAC-MUITO-FORTE-16-CHARS-MINIMO!!!",
  "eventos": ["venda.criada", "venda.paga", "venda.cancelada"],
  "descricao": "Integracao ERP Principal"
}
  • secret = string com mínimo 16 caracteres. Guarde igual guarda Client Secret.
  • eventos vazio/omitido = assina TODOS os eventos (*).

11.4 Validando assinatura HMAC (obrigatório!)

Antes de processar QUALQUER webhook no seu backend, valide o header X-Finuse-Signature. Isso garante que a requisição veio da Finuse — não de um atacante forjando eventos falsos.

Headers recebidos pela sua URL

X-Finuse-Signature: sha256=BASE64(HMAC_SHA256(body_JSON, SUA_SECRET))
X-Finuse-Event: venda.paga
X-Finuse-Event-Id: a1b2c3d4-e5f6-1a2b-3c4d-5e6f7a8b9c0d

Pseudocódigo Node.js (TypeScript)

import * as crypto from 'crypto';

function validarAssinatura(
  bodyBrutoString: string,
  headerRecebido: string,
  secret: string
) {
  const [algo, assinaturaBase64] = headerRecebido.split('=', 2);
  if (algo !== 'sha256') throw new Error('Algoritmo inesperado');

  const esperada = crypto
    .createHmac('sha256', secret)
    .update(bodyBrutoString, 'utf8')
    .digest('base64');

  // SEMPRE use timingSafeEqual.
  // Nunca compare strings com '===' (vulnerável a timing attack).
  const ok = crypto.timingSafeEqual(
    Buffer.from(assinaturaBase64),
    Buffer.from(esperada)
  );

  if (!ok) throw new Error('401 Assinatura webhook invalida');
}

11.5 Retry e idempotência

ItemPolítica
Máximo de retries10 tentativas por evento
Intervalo de retryExponencial com jitter: 10s → 30s → 1min → 2min → 5min → 10min → 20min → 40min → 1h → 2h
Timeout do seu endpoint5 segundos (responda 2xx rápido, processe assíncrono)
IdempotênciaUse o header X-Finuse-Event-Id como chave única no seu DB (ignore repetições)
Histórico públicoConsulte falhas manualmente: GET /subscriptions/{id}/events

12. Health Check & Monitoramento

EndpointAutenticação?Retorno
GET /healthPúblico200 OK com "Healthy" ou JSON { status: "ok", timestamp: "..." }
GET /v1/healthPúblicoAlias do endpoint acima (prefixo /v1)

Dica de observabilidade: configure um probe HTTP simples no seu monitor (Zabbix, Datadog, UptimeRobot, etc.) que dê GET nesses endpoints a cada 30s.

13. Swagger UI e OpenAPI por Master

A documentação interativa já vem personalizada para cada Master — ou seja, o Swagger só mostra os endpoints para os quais a sua Master tem scope liberado.

RecursoURL (formato)
Swagger UI (principal)https://api-finuse-pago/docs/m/{SUA-MASTER-KEY}
Redoc (leitura longa)https://api-finuse-pago/redoc/m/{SUA-MASTER-KEY}
Spec OpenAPI JSON (importar Postman/Insomnia)https://api-finuse-pago/openapi/{SUA-MASTER-KEY}/v1.json
Swagger Global (todas as masters)https://api-finuse-pago/docs/index.html

No Swagger UI por Master, o X-Master-Key já vem automaticamente preenchido na configuração. Para testar endpoints protegidos, clique em Authorize → cole o seu Bearer Token (accessToken).

14. Começando Rápido — Checklist de Integração

Use como roteiro para o time de dev da empresa parceira:

01Receber credenciais da Finuse (Master Key + Client ID + Client Secret).
02Salvar no gerenciador de senhas (1Password, Bitwarden, KeyVault, etc.).
03Fazer o primeiro login OAuth em /v1/auth/login e guardar cache do accessToken (expira ~4h).
04Importar a Spec JSON da Master no Postman / Insomnia.
05Criar 1 venda de teste de R$ 1,00 e validar o retorno do QR Code.
06(Opcional mas recomendado) Criar subscription de webhook (venda.paga) e validar HMAC em ambiente dev.
07Subir para produção e monitorar logs + health check.
08Comunicar a Finuse o dia do Go-Live para ligarmos o suporte prioritário.

15. Suporte e Contato

CanalContato
Integração & Suporte técnicosupport@finusepago.global
WhatsApp / Teams ComercialSeu Technical Account Manager (TAM)
Report de bugsSempre envie: traceId + horário UTC + request/response minimizado
Habilitar novos scopesMensagem ao TAM com caso de uso
Rotacionar Client SecretE-mail support@finusepago.global (o secret anterior é IMEDIATAMENTE revogado)
Habilitar recebimento em USDTEquipe comercial + dados de carteira
Webhook caindo em retry infinito?Abra chamado informando subscriptionId + período
Equipe Finuse Pago — Plataforma de Recebíveis Digitais

© 2026 Finuse OTC · Versão v1.0 · finusepago.global

Falar com integrações