Documentação da API
Referência completa para integrar com o Gyn Fiscal
Início Rápido
A API do Gyn Fiscal permite emitir, cancelar e consultar documentos fiscais eletrônicos como NF-e, NFC-e, NFS-e, MDF-e e CT-e de forma programática.
# Base URL
https://gynfiscal.up.railway.app/api/v1
Todas as requisições e respostas utilizam application/json.
Autenticação
Todas as requisições fiscais requerem os seguintes headers obrigatórios:
x-api-key: sua_api_key_aqui obrigatório
x-tenant-id: id_da_empresa obrigatório
Content-Type: application/json
Importante
A API key e o Client ID (x-tenant-id) são gerados por empresa e por ambiente (produção/homologação). Ao gerar a chave no painel, você receberá ambos os valores. Use a chave e o ID corretos nos headers. Mantenha-os em segredo e nunca exponha no frontend.
Endpoints públicos (não requerem API key): /auth/login, /auth/register, /planos
Endpoints protegidos: Todos os demais requerem x-api-key + x-tenant-id (ambiente correto).
Demo de autenticação
Headers viram código no terminal
Testar Conexão
Use este endpoint para validar suas credenciais (API Key + Client ID) e verificar a comunicação com a SEFAZ.
/api/v1/fiscal/nfe/statusNF-e (Nota Fiscal Eletrônica)
/api/v1/fiscal/nfe/api/v1/fiscal/nfe/lotes/api/v1/fiscal/nfe/lotes/:id/api/v1/fiscal/nfe/emitir/api/v1/fiscal/nfe/cancelar/api/v1/fiscal/nfe/inutilizar/api/v1/fiscal/nfe/consultar/:chave/api/v1/fiscal/nfe/status/api/v1/fiscal/nfe/job/:jobId/api/v1/fiscal/nfe/:id/xml/api/v1/fiscal/nfe/:id/xml/contingencia/api/v1/fiscal/nfe/eventos/:id/xml/api/v1/fiscal/nfe/danfe/api/v1/fiscal/nfe/danfe-eventoDF-e (Distribuição de Documentos Fiscais)
/api/v1/fiscal/nfe/distribuicao/chave/api/v1/fiscal/nfe/distribuicao/nsu/api/v1/fiscal/nfe/distribuicao/ult-nsu/api/v1/fiscal/nfe/distribuicao/nfe/api/v1/fiscal/nfe/distribuicao/nfe/api/v1/fiscal/nfe/distribuicao/nfe/:id/api/v1/fiscal/nfe/distribuicao/nfe/manifestacoes/api/v1/fiscal/nfe/distribuicao/nfe/manifestacoes/api/v1/fiscal/nfe/distribuicao/nfe/manifestacoes/:id/api/v1/fiscal/nfe/distribuicao/nfe/notas-sem-manifestacao/api/v1/fiscal/nfe/distribuicao/nfe/documentos/api/v1/fiscal/nfe/distribuicao/nfe/documentos/:id/api/v1/fiscal/nfe/distribuicao/nfe/documentos/:id/xml/api/v1/fiscal/nfe/distribuicao/nfe/documentos/:id/pdfMDF-e (Manifesto Eletrônico de Documentos Fiscais)
/api/v1/fiscal/mdfe/api/v1/fiscal/mdfe/lotes/api/v1/fiscal/mdfe/emitir/api/v1/fiscal/mdfe/:id/api/v1/fiscal/mdfe/eventos/:id/api/v1/fiscal/mdfe/eventos/:id/pdf/api/v1/fiscal/mdfe/eventos/:id/xml/api/v1/fiscal/mdfe/nao-encerrados/api/v1/fiscal/mdfe/sefaz/status/api/v1/fiscal/mdfe/:id/cancelamento/api/v1/fiscal/mdfe/:id/cancelar/api/v1/fiscal/mdfe/:id/cancelamento/pdf/api/v1/fiscal/mdfe/:id/cancelamento/xml/api/v1/fiscal/mdfe/:id/encerramento/api/v1/fiscal/mdfe/:id/encerrar/api/v1/fiscal/mdfe/:id/encerramento/pdf/api/v1/fiscal/mdfe/:id/encerramento/xml/api/v1/fiscal/mdfe/:id/condutores/api/v1/fiscal/mdfe/:id/documentos/api/v1/fiscal/mdfe/:id/damdfe/api/v1/fiscal/mdfe/:id/sincronizar/api/v1/fiscal/mdfe/:id/xml/api/v1/fiscal/mdfe/:id/xml/contingencia/api/v1/fiscal/mdfe/:id/xml/manifesto/api/v1/fiscal/mdfe/:id/xml/protocolo/api/v1/fiscal/mdfe/exemplo/api/v1/fiscal/mdfe/validar/api/v1/fiscal/mdfe/status/api/v1/fiscal/mdfe/consultar/:chave/api/v1/fiscal/mdfe/job/:jobIdCT-e (Conhecimento de Transporte Eletrônico)
/api/v1/fiscal/cte/api/v1/fiscal/cte/emitir/api/v1/fiscal/cte/validar/api/v1/fiscal/cte/exemplo/api/v1/fiscal/cte/endpoints/api/v1/fiscal/cte/status/api/v1/fiscal/cte/consultar/:chave/api/v1/fiscal/cte/job/:jobId/api/v1/fiscal/cte/cancelar/api/v1/fiscal/cte/desacordo/api/v1/fiscal/cte/eventos/:id/api/v1/fiscal/cte/eventos/:id/xml/api/v1/fiscal/cte/eventos/:id/pdf/api/v1/fiscal/cte/:id/api/v1/fiscal/cte/:id/xml/api/v1/fiscal/cte/:id/xml/protocolo/api/v1/fiscal/cte/:id/dacte/api/v1/fiscal/cte/:id/eventos/api/v1/fiscal/cte/:id/cancelamento/api/v1/fiscal/cte/:id/cancelar/api/v1/fiscal/cte/:id/carta-correcao/api/v1/fiscal/cte/:id/sincronizarNFC-e (Nota Fiscal ao Consumidor)
/api/v1/fiscal/nfce/api/v1/fiscal/nfce/lotes/api/v1/fiscal/nfce/lotes/:id/api/v1/fiscal/nfce/emitir/api/v1/fiscal/nfce/cancelar/api/v1/fiscal/nfce/status/api/v1/fiscal/nfce/consultar/:chave/api/v1/fiscal/nfce/job/:jobId/api/v1/fiscal/nfce/:id/xml/api/v1/fiscal/nfce/:id/xml/contingencia/api/v1/fiscal/nfce/eventos/:id/xml/api/v1/fiscal/nfce/danfe/api/v1/fiscal/nfce/danfe-eventoNFS-e (Nota Fiscal de Serviço)
NFS-e — Nota Fiscal de Serviço Eletrônica
Emitida pela Prefeitura (não pela SEFAZ). Processamento síncrono — o resultado vem na mesma requisição. Suporta 19 municípios de GO via ISSNet/NotaControl (padrão ABRASF 2.04). O PDF da NFS-e é gerado pela prefeitura e pode ser consultado no portal municipal usando o código de verificação.
/api/v1/fiscal/nfse/emitir/api/v1/fiscal/nfse/cancelar/api/v1/fiscal/nfse/consultar/rps/:numero/:serie/:tipo/api/v1/fiscal/nfse/job/:jobId/api/v1/fiscal/nfse/municipiosIBPT (Tributos Aproximados)
/api/v1/fiscal/ibpt/status/api/v1/fiscal/ibpt/versoes/api/v1/fiscal/ibpt/consultaAutenticação
/api/v1/auth/login/api/v1/auth/registerEmpresas (Tenants)
/api/v1/empresaPOST /api/v1/empresa/api/v1/empresa/:id/api-keysConsultas (CEP & CNPJ)
/api/v1/cep/:cep/api/v1/cep/api/v1/cnpj/:cnpj/api/v1/cnpj/api/v1/consultas/provedoresCertificados Digitais
/api/v1/certificados/api/v1/certificados/upload/api/v1/certificados/:id/api/v1/certificados/:id/statusPlanos & Consumo
/api/v1/planos/api/v1/billing/consumo?ambiente=homologation|production/api/v1/billing/historico?ambiente=homologation|productionFluxo Assíncrono
A emissão de notas é processada de forma assíncrona para garantir alta disponibilidade.
Envie o JSON para /nfe/emitir ou /nfce/emitir
A API valida o payload e enfileira o processamento.
Receba jobId (202 Accepted)
Use este ID para consultar o status.
Consulte /nfe/job/:jobId ou aguarde o webhook
Polling recomendado: a cada 2 segundos, máximo 30 tentativas.
Receba o XML autorizado e protocolo SEFAZ
O XML assinado e o número do protocolo ficam disponíveis no job concluído.
Contingência
A API não troca automaticamente uma emissão normal por contingência. Se o seu sistema quiser usar contingência, ele precisa enviar a emissão já com formaEmissao de contingência no payload.
Depois que a emissão entra em contingência, o restante do trabalho fica com o backend: ele assina o XML, salva o XML local, marca o job como contingencia_pendente e tenta regularizar automaticamente na SEFAZ conforme a configuração enviada em contingencia.
O que o integrador faz
Envie o documento com o modo correto:
- NF-e:
formaEmissao: "contingencia" - NFC-e:
formaEmissao: "contingencia_offline" - MDF-e:
formaEmissao: "contingencia"
Como consultar
Continue consultando o job normalmente.
- Se estiver processando, o status segue em andamento.
- Se entrou em contingência, o job passa para
contingencia_pendente. - Quando regularizar, o mesmo job passa para
concluidocom protocolo da SEFAZ.
Como baixar o XML
Use um endpoint diferente em cada fase.
- Durante contingência:
/xml/contingencia - Depois da autorização:
/xml - Eventos como cancelamento continuam em
/eventos/:id/xml
Códigos de Erro e Demais Retornos
Use esta seção para interpretar tanto o resultado HTTP quanto os campos fiscais extras que aparecem nos retornos de consulta e listagem de NF-e/NFC-e.
Para os códigos devolvidos pela própria SEFAZ (rejeição 204, 539, 725, 608 e outras), consulte a lista de erros e rejeições da SEFAZ, com o significado e a correção de cada um.
Vem com o resultado solicitado. Exemplo: consulta retornou dados, XML foi baixado ou status da SEFAZ respondeu normalmente.
A requisição foi aceita, mas o processamento ainda vai acontecer em background. Exemplo: emissão de NF-e/NFC-e retornando jobId.
Pode ser body malformado, JSON inválido, tipo incorreto ou estrutura enviada diferente do esperado pelo endpoint.
Acontece quando x-api-key não foi enviada, está errada, expirou ou não pertence ao tenant informado.
A credencial existe, mas não tem acesso ao recurso. Exemplo: recurso bloqueado por plano, ambiente ou regra de permissão.
Usado quando o item consultado não existe ou não pertence à empresa. Exemplo: documento, job, manifestação ou certificado inexistente.
Pode ser campo obrigatório ausente, chave inválida, ambiente divergente, schema incompatível ou regra fiscal rejeitando a entrada.
Além do HTTP, a API pode devolver este código semântico quando o JSON está estruturalmente válido, mas viola uma regra fiscal ou de contrato. Nesses casos, confira também o array campos quando existir.
O cliente enviou requisições demais em pouco tempo. O ideal é aguardar e repetir com retry/backoff.
Erro inesperado no backend ou em biblioteca interna. Exemplo: falha ao gerar PDF, processar XML ou concluir uma rotina interna.
NF-e/NFC-e: diferenca entre status do job e situacao do documento
Depois da atualizacao do backend, o frontend deve preferir situacao ou situacaoLabel para mostrar se a nota esta ativa ou cancelada. O campo status continua por compatibilidade e pode permanecer como processado mesmo quando a situacao fiscal correta do documento e cancelado.
statusprocessadoCampo legado de compatibilidade. Em listagens, ele continua representando principalmente o andamento do job e nao deve ser usado sozinho para decidir se o documento esta ativo ou cancelado.
statusJobprocessadoExplicita o status operacional do job assíncrono: pendente, processado ou erro.
situacaoativoSituacao fiscal do documento. Para NF-e/NFC-e os valores mais comuns agora sao ativo, cancelado, inutilizado, pendente, erro ou contingencia.
situacaoLabelAtivoVersao pronta para exibicao em tela da situacao fiscal do documento.
canceladafalseBooleano auxiliar. Quando true, o backend ja identificou evento autorizado de cancelamento para a chave do documento.
codigoStatus100Codigo bruto da SEFAZ para consulta/status do documento. Exemplos: 100 autorizado, 101 cancelado, 135 ou 155 evento registrado/cancelamento homologado.
motivoStatusAutorizado o uso da NF-eMotivo textual devolvido pela SEFAZ para o codigoStatus.
protocoloCancelamento / dataCancelamento135260000123456 / 2026-05-13T11:42:00-03:00Quando existirem, indicam que o backend localizou um job de cancelamento concluido para a mesma chave de acesso.
Rate Limits
A API utiliza rate limiting por tenant para garantir estabilidade e uso justo dos recursos. O limite de requisições por minuto depende do plano contratado.
A contagem é feita em janelas de 1 minuto, com reset automático ao final de cada janela. O controle é por tenant (identificado via x-tenant-id ou x-api-key), não por IP.
Headers de resposta
| Header | Descrição |
|---|---|
X-RateLimit-Limit | Máximo de requisições permitidas na janela atual |
X-RateLimit-Remaining | Requisições restantes na janela atual |
X-RateLimit-Reset | Timestamp Unix (segundos) de quando a janela expira |
Ao exceder o limite, a API retorna 429 Too Many Requests com o código RATE_LIMIT_EXCEEDED. Monitore o header X-RateLimit-Remaining e implemente retry com backoff exponencial.
