Developers
A API que lê o contexto fiscal — com clareza, não com promessa. A superfície pública que a Finnextho já expõe hoje para escritórios contábeis, ERPs e automação supervisionada por IA. O que está documentado aqui é o que existe.
- HMAC
- SHA-256 assinado
- 8
- endpoints fiscais
- 5 min
- janela de assinatura
- 120/min
- rate limit padrão
Comece por aqui
Quickstart
Assine, chame e leia o contexto fiscal em uma única requisição — cURL, Node ou Python.
Autenticação HMAC
API key + assinatura SHA-256, janela de 5 min e proteção a replay por nonce.
Endpoints fiscais
Oito rotas de leitura: workspace, perfil, certificado, capabilities, documentos e fila.
Scopes
Contrato público orientado a leitura, status e supervisão — escopo por empresa.
Erros & rate limits
errorCode estável por falha e headers de backoff prontos para o seu retry.
Limites atuais
A parte mais honesta: o que ainda não deve ser vendido como pronto nesta v1.
Assine, chame e leia o contexto fiscal em uma requisição.
Os exemplos montam o payload assinado exatamente como o servidor espera. Troque a key e o secret provisionados, escolha a linguagem e copie.
01
Receba a credencial
API key e secret provisionados pelo time, com escopos e allowlist de IP.
02
Monte a assinatura
Concatene method, rota, timestamp, nonce e body; gere o HMAC SHA-256.
03
Chame o endpoint
Envie os 4 headers X-API-*. A resposta vem no envelope padrão com requestId.
API_KEY="ak_live_xxxxxxxx"
API_SECRET="sk_live_xxxxxxxx"
METHOD="GET"
ROUTE="/api/external/fiscal/workspace"
TS="$(date +%s)"
NONCE="$(openssl rand -hex 16)"
# payload = METHOD \n originalUrl \n timestamp \n nonce \n rawBody
PAYLOAD="$METHOD\n$ROUTE\n$TS\n$NONCE\n"
SIG="$(printf '%b' "$PAYLOAD" | openssl dgst -sha256 -hmac "$API_SECRET" | awk '{print $2}')"
curl -sS "https://api.finnextho.com$ROUTE" \
-H "X-API-Key: $API_KEY" \
-H "X-API-Timestamp: $TS" \
-H "X-API-Nonce: $NONCE" \
-H "X-API-Signature: sha256=$SIG"API key + HMAC SHA-256, com escopo por empresa.
Cada requisição é assinada e validada contra uma janela curta de timestamp, com proteção a replay por nonce. A credencial pertence a uma única empresa — governança simples, sem ambiguidade de tenant.
O payload assinado, byte a byte.
Concatene method, rota original (com query), timestamp, nonce e o raw body separados por quebra de linha. O HMAC vai em hex no header de assinatura.
X-API-KeyX-API-SignatureX-API-TimestampX-API-Noncepayload = METHOD + "\n"
+ originalUrl + "\n"
+ timestamp + "\n"
+ nonce + "\n"
+ rawBody
signature = HMAC_SHA256(secret, payload) // hex- Algoritmo
- HMAC SHA-256 · assinatura em hex
- Payload
- METHOD + originalUrl + timestamp + nonce + rawBody
- Janela
- 5 minutos — epoch em segundos ou ms
- Nonce
- Mín. 8 caracteres, uso único (anti-replay)
- Prefixo
- Aceita com ou sem sha256=
- Tenant
- Uma credencial = uma empresa dona
Envelope previsível, com requestId em toda chamada.
Sucesso e erro seguem um contrato fixo. O requestId e o traceId sempre voltam para correlação e suporte — o seu log de produção fica limpo desde o primeiro dia.
data + meta, sempre no mesmo formato.
O corpo de sucesso traz os dados em data e os identificadores de rastreio em meta. Você consegue logar, correlacionar e dar suporte sem adivinhação.
{
"success": true,
"data": {
"company": { "id": "665f0c...", "name": "Acme Serviços ME" },
"fiscalProfile": { "regime": "simples_nacional", "uf": "SP" },
"certificate": { "status": "valid", "expiresAt": "2026-02-10T00:00:00.000Z" }
},
"meta": {
"requestId": "req_9f2c7a1b4e",
"traceId": "trc_5a1b8c3d2f",
"clientId": "ak_live_xxxxxxxx",
"companyId": "665f0c..."
}
}Oito rotas de leitura. Nenhum write path que ainda não esteja aberto.
/api/external/fiscal/workspaceVisão consolidada da empresa autenticada.
fiscal:read/api/external/fiscal/companiesContexto fiscal da empresa dona da credencial.
fiscal:read/api/external/fiscal/profilePerfil fiscal e dados-base da empresa.
fiscal:profile:read/api/external/fiscal/certificate/statusStatus atual do certificado da empresa.
fiscal:certificate:read/api/external/fiscal/capabilitiesSuporte fiscal e exigências mínimas por documento.
fiscal:capabilities:read/api/external/fiscal/documentsLista documentos fiscais paginados.
fiscal:documents:read/api/external/fiscal/pendingFila de pendências e contingência.
fiscal:queue:read/api/external/fiscal/webhooks/statusEstado atual do feed fiscal (somente status).
fiscal:webhooks:readUm contrato público orientado a leitura, status e supervisão.
fiscal:readWorkspace consolidado
Contexto agregado da empresa autenticada em um único payload.
fiscal:profile:readPerfil fiscal
Regime, inscrições e dados-base para operação fiscal.
fiscal:certificate:readCertificado
Configuração, validade e risco de expiração do certificado.
fiscal:capabilities:readCapabilities
Suporte atual por documento e exigências mínimas da superfície.
fiscal:documents:readDocumentos
Documentos paginados com filtros por tipo, período e direção.
fiscal:queue:readFila de pendências
Fila fiscal operacional para casos em contingência.
Um errorCode estável para cada falha, com headers de backoff.
O errorCode é máquina-legível e não muda de texto. Trate por ele, nunca pela mensagem. Ao estourar o limite, a API responde 429 com Retry-After.
external_credentials_missingFalta um dos headers X-API-* obrigatórios.
external_timestamp_expiredTimestamp fora da janela de 5 minutos.
external_client_invalidAPI key inexistente ou cliente inativo.
external_ip_not_allowedIP de origem fora da allowlist do cliente.
external_signature_invalidHMAC não confere com o payload assinado.
external_replay_detectedNonce já utilizado dentro da janela.
external_rate_limit_exceededLimite de requisições do cliente excedido.
external_scope_forbiddenCredencial sem o scope exigido pelo endpoint.
120
req / janela
60s
janela padrão
x-rate-limit-limitTeto de requisições na janela. Default 120.
x-rate-limit-windowTamanho da janela em segundos. Default 60.
x-rate-limit-remainingRequisições restantes na janela atual.
Retry-AfterSegundos até liberar novas chamadas. Enviado no 429.
{
"success": false,
"error": "Assinatura inválida",
"errorCode": "external_signature_invalid",
"requestId": "req_9f2c7a1b4e",
"traceId": "trc_5a1b8c3d2f"
}A parte mais importante: o que ainda não deve ser vendido como pronto.
Preferimos uma narrativa precisa a uma documentação que promete mais do que entrega.
Não documentamos emissão, transmissão, cancelamento, CC-e, manifestação ou inutilização nesta v1 pública.
Não existe onboarding self-serve público; o acesso é provisionado pelo time.
Não existe modo escritório multi-carteira nativo. A credencial é dona de uma empresa por vez.
Não existe endpoint público para upload de certificado, XML/PDF ou configuração fiscal externa.
Não existe pacote público de webhooks fiscais outbound; hoje a superfície exposta é de status.
O acesso é assistido — e isso é uma vantagem.
Se o seu caso envolve escritório contábil, ERP parceiro ou operação supervisionada por IA, o próximo passo é alinhar escopos, empresa dona da credencial e limite operacional. Falamos a sua língua técnica.