TexFiscal: emissão de NFS-e por API (2.0.0)

Baixar a especificação OpenAPI:

Emissão, consulta e cancelamento de NFS-e pelo contrato REST v2 de mercado.

Emissão de Nota Fiscal de Serviço eletrônica pelo seu sistema.

COMPATIBILIDADE: os caminhos, os campos e os literais de status são os do contrato REST v2 de NFS-e que a maioria dos ERPs já integra. Quem já emite por API migra trocando a URL base e o token, sem mexer no código do cliente.

DUAS REGRAS QUE MUDAM COMO SE ESCREVE O CLIENTE:

  1. A ref é a chave de idempotência. Repetir o POST com a mesma ref NÃO emite de novo: devolve a nota que já existe. Gere a ref a partir da sua transação, nunca de um relógio ou de um aleatório.
  2. Nota em processando_autorizacao NUNCA se reenvia. Só a consulta resolve. Reenviar duplica documento fiscal, e documento fiscal duplicado se resolve com o contador, não com código.

O que este serviço nunca faz: responder 502, 503 ou 504 em rota de API (falha de dependência sai como 422 com corpo próprio, porque a Cloudflare troca o corpo de 5xx pela página dela e o seu fetch cairia no catch sem a mensagem); guardar o seu token em claro; entregar PDF ou XML por link público.

NFS-e

Emitir, consultar, cancelar e baixar o documento.

Emitir NFS-e

A ref vai na QUERY, não no corpo, e é a chave de idempotência.

Toda recusa de validação acontece ANTES de reservar número de RPS. Número reservado é número consumido: validar depois deixaria buraco na numeração, e buraco na numeração o fisco cobra explicação.

Authorizations:
basicAuth
query Parameters
ref
required
string <= 64 characters ^[A-Za-z0-9._-]{1,64}$
Exemplo: ref=venda-2026-000123

Sua chave da transação. Não pode começar com ponto nem terminar em sufixo de arquivo reservado (.env, .log, .key e afins).

Request Body schema: application/json
required
data_emissao
string <date-time>

ISO 8601. Formato brasileiro é recusado. Omita para usar agora.

optante_simples_nacional
boolean

Omita para usar o do cadastro do emissor.

regime_especial_tributacao
integer [ 1 .. 6 ]

UM dígito, conforme o XSD ABRASF. Omita para usar o do cadastro.

object
required
object
required
object

Respostas

Exemplos de requisição

Content type
application/json
{
  • "data_emissao": "2026-09-02T10:00:00",
  • "optante_simples_nacional": true,
  • "regime_especial_tributacao": 1,
  • "prestador": {
    },
  • "tomador": {
    },
  • "servico": {
    }
}

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "numero": "string",
  • "numero_rps": "string",
  • "serie_rps": "string",
  • "codigo_verificacao": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "url": "string",
  • "caminho_danfse": "string",
  • "caminho_xml_nota_fiscal": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Listar NFS-e por período

Listagem paginada (50 por página) das notas do emissor no ambiente do token, da mais recente para a mais antiga, para conciliar sem consultar ref por ref. Nunca leva payload, XML nem PDF, e não pergunta à prefeitura: nota pendente aparece como está no serviço.

Authorizations:
basicAuth
query Parameters
de
string <date>

Dia inicial de criação da nota (inclusive), AAAA-MM-DD.

ate
string <date>

Dia final de criação da nota (inclusive), AAAA-MM-DD.

status
string
Valores possíveis: "autorizado" "processando_autorizacao" "erro_autorizacao" "cancelado" "processando_cancelamento" "denegado"

Literal público, o mesmo que o GET por ref devolve. processando_autorizacao cobre recebida e processando.

pagina
integer >= 1
Padrão: 1

50 por página, da mais recente para a mais antiga.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "documento": "nfse",
  • "ambiente": "homologacao",
  • "pagina": 0,
  • "paginas": 0,
  • "total": 0,
  • "por_pagina": 0,
  • "notas": [
    ]
}

Validar o payload da NFS-e sem emitir

Roda a mesma validação da emissão (cadastro do emissor e regras do payload) e PARA antes de reservar RPS, assinar ou falar com a prefeitura. 200 quando passa; 422 requisicao_invalida com os mesmos erros[] da emissão quando não passa. Não exige certificado, então serve para homologar a integração antes de o A1 chegar. A prefeitura ainda pode recusar por regra própria dela.

Authorizations:
basicAuth
Request Body schema: application/json
required
data_emissao
string <date-time>

ISO 8601. Formato brasileiro é recusado. Omita para usar agora.

optante_simples_nacional
boolean

Omita para usar o do cadastro do emissor.

regime_especial_tributacao
integer [ 1 .. 6 ]

UM dígito, conforme o XSD ABRASF. Omita para usar o do cadastro.

object
required
object
required
object

Respostas

Exemplos de requisição

Content type
application/json
{
  • "data_emissao": "2026-09-02T10:00:00",
  • "optante_simples_nacional": true,
  • "regime_especial_tributacao": 1,
  • "prestador": {
    },
  • "tomador": {
    },
  • "servico": {
    }
}

Exemplos de resposta

Content type
application/json
{
  • "valido": true,
  • "documento": "nfse",
  • "ambiente": "string",
  • "mensagem": "string"
}

Consultar NFS-e

Se a nota estiver em processamento, a consulta PERGUNTA à prefeitura antes de responder: é por isso que consultar resolve e reenviar não.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "numero": "string",
  • "numero_rps": "string",
  • "serie_rps": "string",
  • "codigo_verificacao": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "url": "string",
  • "caminho_danfse": "string",
  • "caminho_xml_nota_fiscal": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Cancelar NFS-e

Só nota autorizada cancela. 202 com processando_cancelamento quando a prefeitura não foi conclusiva: repita o DELETE ou consulte, o serviço confere e resolve.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Request Body schema: application/json
required
justificativa
required
string >= 15 characters

Por que a nota está sendo cancelada. ATENÇÃO: este texto NÃO vai à prefeitura. O padrão ABRASF não tem campo livre para justificativa; ela fica no registro do serviço como prova de auditoria e volta na resposta. Quem declara o motivo ao fisco é o campo motivo abaixo.

motivo
integer
Padrão: 1
Valores possíveis: 1 2 3

Declaração AO FISCO (tsCodigoCancelamentoNfse do ABRASF): 1 erro na emissão, 2 serviço não prestado, 3 erro de assinatura. Opcional; omitido vale 1. Informe o valor correto: 1 e 2 dizem coisas diferentes ao município.

Respostas

Exemplos de requisição

Content type
application/json
{
  • "justificativa": "Valor do serviço lancado errado na venda 4471.",
  • "motivo": 2
}

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "numero": "string",
  • "numero_rps": "string",
  • "serie_rps": "string",
  • "codigo_verificacao": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "url": "string",
  • "caminho_danfse": "string",
  • "caminho_xml_nota_fiscal": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

XML da NFS-e autorizada

Como a prefeitura devolveu. Exige token, e responde no-store: documento fiscal com CPF do tomador nunca entra em cache.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "codigo": "nao_autorizado",
  • "mensagem": "Token ausente, inválido, ou de um ambiente diferente do endereço chamado."
}

DANFSe em PDF

Gerado do XML autorizado. Exige token, então NÃO entregue este endereço ao seu usuário final: ele receberia 401 em JSON. Para mostrar o PDF a quem recebeu a nota, peça um endereço assinado em /v2/nfse/{ref}/pdf/link, que abre sem token e expira.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "codigo": "nao_autorizado",
  • "mensagem": "Token ausente, inválido, ou de um ambiente diferente do endereço chamado."
}

Endereço assinado do PDF da NFS-e, para o cliente final

Devolve um endereço de curta validade que abre o PDF SEM token, para você entregar ao navegador de quem recebeu a nota (botão de e-mail, tela do cliente, WhatsApp). É a alternativa oficial ao proxy autenticado que cada integrador vinha escrevendo. O endereço vale para UM documento, expira, e não dá acesso a mais nada da conta: quem o tiver antes da expiração abre esse PDF, então entregue apenas ao destinatário da nota. A validade padrão é de 900 segundos e o teto é de 604800 (sete dias). Depois de expirar, o endereço responde uma página dizendo que o link venceu, e não JSON, porque quem lê é uma pessoa. O PDF em si não pode ser exibido dentro de um iframe (frame-ancestors none neste host): abra em aba nova ou ofereça como download.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

query Parameters
validade
integer [ 60 .. 604800 ]
Padrão: 900
Exemplo: validade=3600

Validade do endereço, em segundos. Fora da faixa, o valor é ajustado ao limite mais próximo, sem erro.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "expira_em": "2019-08-24T14:15:22Z",
  • "validade_segundos": 0,
  • "aviso": "string"
}

NF-e e NFC-e

Nota fiscal de mercadoria (modelos 55 e 65) direto na SEFAZ: emitir, consultar, cancelar, carta de correção, inutilização e XML de distribuição.

Endereço assinado do PDF da NF-e, para o cliente final

Devolve um endereço de curta validade que abre o PDF SEM token, para você entregar ao navegador de quem recebeu a nota (botão de e-mail, tela do cliente, WhatsApp). É a alternativa oficial ao proxy autenticado que cada integrador vinha escrevendo. O endereço vale para UM documento, expira, e não dá acesso a mais nada da conta: quem o tiver antes da expiração abre esse PDF, então entregue apenas ao destinatário da nota. A validade padrão é de 900 segundos e o teto é de 604800 (sete dias). Depois de expirar, o endereço responde uma página dizendo que o link venceu, e não JSON, porque quem lê é uma pessoa. O PDF em si não pode ser exibido dentro de um iframe (frame-ancestors none neste host): abra em aba nova ou ofereça como download.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

query Parameters
validade
integer [ 60 .. 604800 ]
Padrão: 900
Exemplo: validade=3600

Validade do endereço, em segundos. Fora da faixa, o valor é ajustado ao limite mais próximo, sem erro.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "expira_em": "2019-08-24T14:15:22Z",
  • "validade_segundos": 0,
  • "aviso": "string"
}

Endereço assinado do PDF da NFC-e, para o cliente final

Devolve um endereço de curta validade que abre o PDF SEM token, para você entregar ao navegador de quem recebeu a nota (botão de e-mail, tela do cliente, WhatsApp). É a alternativa oficial ao proxy autenticado que cada integrador vinha escrevendo. O endereço vale para UM documento, expira, e não dá acesso a mais nada da conta: quem o tiver antes da expiração abre esse PDF, então entregue apenas ao destinatário da nota. A validade padrão é de 900 segundos e o teto é de 604800 (sete dias). Depois de expirar, o endereço responde uma página dizendo que o link venceu, e não JSON, porque quem lê é uma pessoa. O PDF em si não pode ser exibido dentro de um iframe (frame-ancestors none neste host): abra em aba nova ou ofereça como download.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

query Parameters
validade
integer [ 60 .. 604800 ]
Padrão: 900
Exemplo: validade=3600

Validade do endereço, em segundos. Fora da faixa, o valor é ajustado ao limite mais próximo, sem erro.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "expira_em": "2019-08-24T14:15:22Z",
  • "validade_segundos": 0,
  • "aviso": "string"
}

Emitir NFC-e

Modelo 65, transmitida de forma síncrona à SEFAZ da UF do emissor. A ref vai na QUERY e é a chave de idempotência: repetir com a mesma ref devolve a nota que existe.

Toda recusa de validação (CFOP, CSOSN, GTIN, pagamento menor que o total, valor bruto diferente de quantidade x unitário) acontece ANTES de numerar. A nota recusada pela SEFAZ volta 422 com status_sefaz e mensagem_sefaz, e pode ser reenviada com a MESMA ref (mesmo número, mesma chave) depois de corrigida; número DENEGADO não volta.

Sem desfecho (SEFAZ fora do ar, timeout) a resposta é 202: NUNCA reenvie, consulte. A NFC-e exige CSC cadastrado no emissor (produção) e só aceita CFOP de venda a consumidor.

Authorizations:
basicAuth
query Parameters
ref
required
string <= 64 characters ^[A-Za-z0-9._-]{1,64}$
Exemplo: ref=venda-2026-000123

Sua chave da transação. Uma ref por documento; nota cancelada não reaproveita a ref.

Request Body schema: application/json
required
natureza_operacao
string <= 60 characters
cnpj_emitente
string

Opcional. Se vier, tem de ser o CNPJ do emissor do token (senão 422 emitente_divergente).

numero
integer [ 1 .. 999999999 ]

Opcional. Sem ele o serviço numera a série. Número já usado por outra ref responde 409 numero_em_uso.

serie
integer [ 0 .. 889 ]
Padrão: 1
tipo_documento
integer
Padrão: 1
Valores possíveis: 0 1

0 entrada, 1 saída. NFC-e só saída.

finalidade_emissao
integer
Padrão: 1
Valores possíveis: 1 2 3 4

1 normal, 2 complementar, 3 ajuste, 4 devolução (exige notas_referenciadas).

local_destino
integer
Padrão: 1
Valores possíveis: 1 2 3

NF-e: recalculado pela UF do destinatário quando divergir.

consumidor_final
integer
Padrão: 1
Valores possíveis: 0 1
presenca_comprador
integer
Padrão: 1

NFC-e aceita só 1 (presencial) e 4 (entrega a domicílio).

modalidade_frete
integer
Padrão: 9
Valores possíveis: 0 1 2 3 4 9
cnpj_destinatario
string

NF-e exige CNPJ ou CPF. NFC-e aceita e não exige.

cpf_destinatario
string
nome_destinatario
string <= 60 characters
indicador_inscricao_estadual_destinatario
integer
Padrão: 9
Valores possíveis: 1 2 9

1 contribuinte (exige inscricao_estadual_destinatario), 2 isento, 9 não contribuinte. NFC-e é sempre 9.

inscricao_estadual_destinatario
string
email_destinatario
string
logradouro_destinatario
string <= 60 characters
numero_destinatario
string <= 60 characters
complemento_destinatario
string <= 60 characters
bairro_destinatario
string <= 60 characters
municipio_destinatario
string

Nome do município. Com uf_destinatario, o código IBGE é resolvido pela tabela oficial; se não resolver, mande codigo_municipio_destinatario.

codigo_municipio_destinatario
string^[0-9]{7}$
uf_destinatario
string^[A-Z]{2}$
cep_destinatario
string
telefone_destinatario
string
Lista de objects
cnpjs_autorizados_xml
Lista de strings

Quem pode baixar o XML na SEFAZ (contador). Na Bahia a NF-e exige o grupo: sem ele o serviço informa o CNPJ da própria SEFAZ-BA.

informacoes_adicionais_contribuinte
string <= 5000 characters
valor_troco
number
required
Lista de objects [ 1 .. 990 ] items
required
Lista de objects non-empty

Respostas

Exemplos de requisição

Content type
application/json
{
  • "natureza_operacao": "Venda de mercadoria",
  • "cnpj_emitente": "string",
  • "numero": 1,
  • "serie": 1,
  • "tipo_documento": 0,
  • "finalidade_emissao": 1,
  • "local_destino": 1,
  • "consumidor_final": 0,
  • "presenca_comprador": 1,
  • "modalidade_frete": 0,
  • "cnpj_destinatario": "string",
  • "cpf_destinatario": "string",
  • "nome_destinatario": "string",
  • "indicador_inscricao_estadual_destinatario": 1,
  • "inscricao_estadual_destinatario": "string",
  • "email_destinatario": "string",
  • "logradouro_destinatario": "string",
  • "numero_destinatario": "string",
  • "complemento_destinatario": "string",
  • "bairro_destinatario": "string",
  • "municipio_destinatario": "string",
  • "codigo_municipio_destinatario": "string",
  • "uf_destinatario": "string",
  • "cep_destinatario": "string",
  • "telefone_destinatario": "string",
  • "notas_referenciadas": [
    ],
  • "cnpjs_autorizados_xml": [
    ],
  • "informacoes_adicionais_contribuinte": "string",
  • "valor_troco": 0,
  • "items": [
    ],
  • "formas_pagamento": [
    ]
}

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Listar NFC-e por período

Listagem paginada (50 por página) das NFC-e do emissor no ambiente do token, da mais recente para a mais antiga, para conciliar sem consultar ref por ref. Nunca leva payload nem XML, e não pergunta à SEFAZ: nota pendente aparece como está no serviço.

Authorizations:
basicAuth
query Parameters
de
string <date>

Dia inicial de criação da nota (inclusive), AAAA-MM-DD.

ate
string <date>

Dia final de criação da nota (inclusive), AAAA-MM-DD.

status
string
Valores possíveis: "autorizado" "processando_autorizacao" "erro_autorizacao" "cancelado" "processando_cancelamento" "denegado"

Literal público, o mesmo que o GET por ref devolve. processando_autorizacao cobre recebida e processando.

pagina
integer >= 1
Padrão: 1

50 por página, da mais recente para a mais antiga.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "documento": "nfse",
  • "ambiente": "homologacao",
  • "pagina": 0,
  • "paginas": 0,
  • "total": 0,
  • "por_pagina": 0,
  • "notas": [
    ]
}

Validar o payload da NFC-e sem emitir

Roda a mesma validação da emissão (habilitação, UF, cadastro do emissor, CFOP, CSOSN, GTIN, pagamentos, totais) e PARA antes de numerar, assinar e transmitir. 200 quando passa; 422 requisicao_invalida com os mesmos erros[] da emissão quando não passa. Não consome número da série nem toca a SEFAZ, que ainda pode recusar por regra própria dela.

Authorizations:
basicAuth
Request Body schema: application/json
required
natureza_operacao
string <= 60 characters
cnpj_emitente
string

Opcional. Se vier, tem de ser o CNPJ do emissor do token (senão 422 emitente_divergente).

numero
integer [ 1 .. 999999999 ]

Opcional. Sem ele o serviço numera a série. Número já usado por outra ref responde 409 numero_em_uso.

serie
integer [ 0 .. 889 ]
Padrão: 1
tipo_documento
integer
Padrão: 1
Valores possíveis: 0 1

0 entrada, 1 saída. NFC-e só saída.

finalidade_emissao
integer
Padrão: 1
Valores possíveis: 1 2 3 4

1 normal, 2 complementar, 3 ajuste, 4 devolução (exige notas_referenciadas).

local_destino
integer
Padrão: 1
Valores possíveis: 1 2 3

NF-e: recalculado pela UF do destinatário quando divergir.

consumidor_final
integer
Padrão: 1
Valores possíveis: 0 1
presenca_comprador
integer
Padrão: 1

NFC-e aceita só 1 (presencial) e 4 (entrega a domicílio).

modalidade_frete
integer
Padrão: 9
Valores possíveis: 0 1 2 3 4 9
cnpj_destinatario
string

NF-e exige CNPJ ou CPF. NFC-e aceita e não exige.

cpf_destinatario
string
nome_destinatario
string <= 60 characters
indicador_inscricao_estadual_destinatario
integer
Padrão: 9
Valores possíveis: 1 2 9

1 contribuinte (exige inscricao_estadual_destinatario), 2 isento, 9 não contribuinte. NFC-e é sempre 9.

inscricao_estadual_destinatario
string
email_destinatario
string
logradouro_destinatario
string <= 60 characters
numero_destinatario
string <= 60 characters
complemento_destinatario
string <= 60 characters
bairro_destinatario
string <= 60 characters
municipio_destinatario
string

Nome do município. Com uf_destinatario, o código IBGE é resolvido pela tabela oficial; se não resolver, mande codigo_municipio_destinatario.

codigo_municipio_destinatario
string^[0-9]{7}$
uf_destinatario
string^[A-Z]{2}$
cep_destinatario
string
telefone_destinatario
string
Lista de objects
cnpjs_autorizados_xml
Lista de strings

Quem pode baixar o XML na SEFAZ (contador). Na Bahia a NF-e exige o grupo: sem ele o serviço informa o CNPJ da própria SEFAZ-BA.

informacoes_adicionais_contribuinte
string <= 5000 characters
valor_troco
number
required
Lista de objects [ 1 .. 990 ] items
required
Lista de objects non-empty

Respostas

Exemplos de requisição

Content type
application/json
{
  • "natureza_operacao": "Venda de mercadoria",
  • "cnpj_emitente": "string",
  • "numero": 1,
  • "serie": 1,
  • "tipo_documento": 0,
  • "finalidade_emissao": 1,
  • "local_destino": 1,
  • "consumidor_final": 0,
  • "presenca_comprador": 1,
  • "modalidade_frete": 0,
  • "cnpj_destinatario": "string",
  • "cpf_destinatario": "string",
  • "nome_destinatario": "string",
  • "indicador_inscricao_estadual_destinatario": 1,
  • "inscricao_estadual_destinatario": "string",
  • "email_destinatario": "string",
  • "logradouro_destinatario": "string",
  • "numero_destinatario": "string",
  • "complemento_destinatario": "string",
  • "bairro_destinatario": "string",
  • "municipio_destinatario": "string",
  • "codigo_municipio_destinatario": "string",
  • "uf_destinatario": "string",
  • "cep_destinatario": "string",
  • "telefone_destinatario": "string",
  • "notas_referenciadas": [
    ],
  • "cnpjs_autorizados_xml": [
    ],
  • "informacoes_adicionais_contribuinte": "string",
  • "valor_troco": 0,
  • "items": [
    ],
  • "formas_pagamento": [
    ]
}

Exemplos de resposta

Content type
application/json
{
  • "valido": true,
  • "documento": "nfse",
  • "ambiente": "string",
  • "mensagem": "string"
}

DANFCE em PDF

Cupom de bobina de 80mm, com a altura ajustada ao número de itens e o QR Code da consulta desenhado. É a representação impressa; o documento fiscal continua sendo o XML.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters ^[A-Za-z0-9._-]{1,64}$
Exemplo: venda-2026-000123

A sua chave da transação, a mesma usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "codigo": "nao_autorizado",
  • "mensagem": "Token ausente, inválido, ou de um ambiente diferente do endereço chamado."
}

Consultar NFC-e

Nota pendente: a consulta pergunta a SEFAZ pela chave (no máximo uma vez a cada 15 s). Nota recusada volta 422 com o motivo da SEFAZ.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Cancelar NFC-e

Só nota autorizada cancela. O prazo é da SEFAZ (24 h para NF-e; NFC-e na Bahia, 30 minutos sem circulação da mercadoria): fora dele a resposta é 422 cancelamento_recusado com o cStat. A justificativa (15 a 255 caracteres) VAI à SEFAZ no evento 110111.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Request Body schema: application/json
required
justificativa
required
string [ 15 .. 255 ] characters

Respostas

Exemplos de requisição

Content type
application/json
{
  • "justificativa": "stringstringstr"
}

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Consultar NFC-e por série e número

Recuperação: devolve a nota deste emissor com a série e o número informados, no ambiente do token, com a mesma representação do GET por ref. Use quando a resposta do POST se perdeu (timeout, rede) e o seu sistema não gravou a ref: antes de reenviar o mesmo número, pergunte se ele já existe. Nota de outro emissor responde 404, igual a número inexistente.

Authorizations:
basicAuth
path Parameters
serie
required
integer [ 0 .. 999 ]
Exemplo: 1
numero
required
integer [ 1 .. 999999999 ]
Exemplo: 2012

Respostas

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Consultar NFC-e pela chave de acesso

Recuperação pela chave de acesso de 44 posições (a do DANFE e do Id do XML), com ou sem o prefixo NFe e aceitando o CNPJ alfanumérico, escopada ao emissor do token e ao ambiente. Chave de outro emissor responde 404, igual a chave inexistente; chave com dígito verificador errado responde 422 chave_invalida.

Authorizations:
basicAuth
path Parameters
chave
required
string^(NFe)?[0-9A-Za-z]{44}$
Exemplo: 29260905509541000163650010000020121144422536

Respostas

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

XML de distribuição (nfeProc) da NFC-e

NFe assinada + protNFe, exatamente como a SEFAZ autorizou. É o arquivo que o emitente guarda por 5 anos e manda ao contador. Também aceito como /{ref}/xml.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "codigo": "nao_autorizado",
  • "mensagem": "Token ausente, inválido, ou de um ambiente diferente do endereço chamado."
}

XML do evento de cancelamento da NFC-e

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "codigo": "nao_autorizado",
  • "mensagem": "Token ausente, inválido, ou de um ambiente diferente do endereço chamado."
}

Inutilizações registradas da NFC-e

Cada pedido de inutilização do emissor neste ambiente (homologado ou recusado), mais recente primeiro. Desde 22/09/2026 o procInutNFe é guardado e entra no ZIP do mês do painel.

Authorizations:
basicAuth

Respostas

Exemplos de resposta

Content type
application/json
{
  • "inutilizacoes": [
    ]
}

Inutilizar faixa de numeração da NFC-e

Declara à SEFAZ que os números de numero_inicial a numero_final da série não serão usados. Faixa com número já usado é recusada antes de ir à SEFAZ.

Authorizations:
basicAuth
Request Body schema: application/json
required
cnpj
string

Opcional; se vier tem de ser o do emissor.

serie
required
integer
numero_inicial
required
integer
numero_final
required
integer
justificativa
required
string [ 15 .. 255 ] characters

Respostas

Exemplos de requisição

Content type
application/json
{
  • "cnpj": "string",
  • "serie": 0,
  • "numero_inicial": 0,
  • "numero_final": 0,
  • "justificativa": "stringstringstr"
}

Exemplos de resposta

Content type
application/json
{
  • "status": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "protocolo": "string"
}

Emitir NF-e

Modelo 55, transmitida de forma síncrona à SEFAZ da UF do emissor. A ref vai na QUERY e é a chave de idempotência: repetir com a mesma ref devolve a nota que existe.

Toda recusa de validação (CFOP, CSOSN, GTIN, pagamento menor que o total, valor bruto diferente de quantidade x unitário) acontece ANTES de numerar. A nota recusada pela SEFAZ volta 422 com status_sefaz e mensagem_sefaz, e pode ser reenviada com a MESMA ref (mesmo número, mesma chave) depois de corrigida; número DENEGADO não volta.

Sem desfecho (SEFAZ fora do ar, timeout) a resposta é 202: NUNCA reenvie, consulte. A NF-e exige destinatário identificado com endereço completo.

Authorizations:
basicAuth
query Parameters
ref
required
string <= 64 characters ^[A-Za-z0-9._-]{1,64}$
Exemplo: ref=venda-2026-000123

Sua chave da transação. Uma ref por documento; nota cancelada não reaproveita a ref.

Request Body schema: application/json
required
natureza_operacao
string <= 60 characters
cnpj_emitente
string

Opcional. Se vier, tem de ser o CNPJ do emissor do token (senão 422 emitente_divergente).

numero
integer [ 1 .. 999999999 ]

Opcional. Sem ele o serviço numera a série. Número já usado por outra ref responde 409 numero_em_uso.

serie
integer [ 0 .. 889 ]
Padrão: 1
tipo_documento
integer
Padrão: 1
Valores possíveis: 0 1

0 entrada, 1 saída. NFC-e só saída.

finalidade_emissao
integer
Padrão: 1
Valores possíveis: 1 2 3 4

1 normal, 2 complementar, 3 ajuste, 4 devolução (exige notas_referenciadas).

local_destino
integer
Padrão: 1
Valores possíveis: 1 2 3

NF-e: recalculado pela UF do destinatário quando divergir.

consumidor_final
integer
Padrão: 1
Valores possíveis: 0 1
presenca_comprador
integer
Padrão: 1

NFC-e aceita só 1 (presencial) e 4 (entrega a domicílio).

modalidade_frete
integer
Padrão: 9
Valores possíveis: 0 1 2 3 4 9
cnpj_destinatario
string

NF-e exige CNPJ ou CPF. NFC-e aceita e não exige.

cpf_destinatario
string
nome_destinatario
string <= 60 characters
indicador_inscricao_estadual_destinatario
integer
Padrão: 9
Valores possíveis: 1 2 9

1 contribuinte (exige inscricao_estadual_destinatario), 2 isento, 9 não contribuinte. NFC-e é sempre 9.

inscricao_estadual_destinatario
string
email_destinatario
string
logradouro_destinatario
string <= 60 characters
numero_destinatario
string <= 60 characters
complemento_destinatario
string <= 60 characters
bairro_destinatario
string <= 60 characters
municipio_destinatario
string

Nome do município. Com uf_destinatario, o código IBGE é resolvido pela tabela oficial; se não resolver, mande codigo_municipio_destinatario.

codigo_municipio_destinatario
string^[0-9]{7}$
uf_destinatario
string^[A-Z]{2}$
cep_destinatario
string
telefone_destinatario
string
Lista de objects
cnpjs_autorizados_xml
Lista de strings

Quem pode baixar o XML na SEFAZ (contador). Na Bahia a NF-e exige o grupo: sem ele o serviço informa o CNPJ da própria SEFAZ-BA.

informacoes_adicionais_contribuinte
string <= 5000 characters
valor_troco
number
required
Lista de objects [ 1 .. 990 ] items
required
Lista de objects non-empty

Respostas

Exemplos de requisição

Content type
application/json
{
  • "natureza_operacao": "Venda de mercadoria",
  • "cnpj_emitente": "string",
  • "numero": 1,
  • "serie": 1,
  • "tipo_documento": 0,
  • "finalidade_emissao": 1,
  • "local_destino": 1,
  • "consumidor_final": 0,
  • "presenca_comprador": 1,
  • "modalidade_frete": 0,
  • "cnpj_destinatario": "string",
  • "cpf_destinatario": "string",
  • "nome_destinatario": "string",
  • "indicador_inscricao_estadual_destinatario": 1,
  • "inscricao_estadual_destinatario": "string",
  • "email_destinatario": "string",
  • "logradouro_destinatario": "string",
  • "numero_destinatario": "string",
  • "complemento_destinatario": "string",
  • "bairro_destinatario": "string",
  • "municipio_destinatario": "string",
  • "codigo_municipio_destinatario": "string",
  • "uf_destinatario": "string",
  • "cep_destinatario": "string",
  • "telefone_destinatario": "string",
  • "notas_referenciadas": [
    ],
  • "cnpjs_autorizados_xml": [
    ],
  • "informacoes_adicionais_contribuinte": "string",
  • "valor_troco": 0,
  • "items": [
    ],
  • "formas_pagamento": [
    ]
}

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Listar NF-e por período

Listagem paginada (50 por página) das NF-e do emissor no ambiente do token, da mais recente para a mais antiga, para conciliar sem consultar ref por ref. Nunca leva payload nem XML, e não pergunta à SEFAZ: nota pendente aparece como está no serviço.

Authorizations:
basicAuth
query Parameters
de
string <date>

Dia inicial de criação da nota (inclusive), AAAA-MM-DD.

ate
string <date>

Dia final de criação da nota (inclusive), AAAA-MM-DD.

status
string
Valores possíveis: "autorizado" "processando_autorizacao" "erro_autorizacao" "cancelado" "processando_cancelamento" "denegado"

Literal público, o mesmo que o GET por ref devolve. processando_autorizacao cobre recebida e processando.

pagina
integer >= 1
Padrão: 1

50 por página, da mais recente para a mais antiga.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "documento": "nfse",
  • "ambiente": "homologacao",
  • "pagina": 0,
  • "paginas": 0,
  • "total": 0,
  • "por_pagina": 0,
  • "notas": [
    ]
}

Validar o payload da NF-e sem emitir

Roda a mesma validação da emissão (habilitação, UF, cadastro do emissor, CFOP, CSOSN, GTIN, pagamentos, totais) e PARA antes de numerar, assinar e transmitir. 200 quando passa; 422 requisicao_invalida com os mesmos erros[] da emissão quando não passa. Não consome número da série nem toca a SEFAZ, que ainda pode recusar por regra própria dela.

Authorizations:
basicAuth
Request Body schema: application/json
required
natureza_operacao
string <= 60 characters
cnpj_emitente
string

Opcional. Se vier, tem de ser o CNPJ do emissor do token (senão 422 emitente_divergente).

numero
integer [ 1 .. 999999999 ]

Opcional. Sem ele o serviço numera a série. Número já usado por outra ref responde 409 numero_em_uso.

serie
integer [ 0 .. 889 ]
Padrão: 1
tipo_documento
integer
Padrão: 1
Valores possíveis: 0 1

0 entrada, 1 saída. NFC-e só saída.

finalidade_emissao
integer
Padrão: 1
Valores possíveis: 1 2 3 4

1 normal, 2 complementar, 3 ajuste, 4 devolução (exige notas_referenciadas).

local_destino
integer
Padrão: 1
Valores possíveis: 1 2 3

NF-e: recalculado pela UF do destinatário quando divergir.

consumidor_final
integer
Padrão: 1
Valores possíveis: 0 1
presenca_comprador
integer
Padrão: 1

NFC-e aceita só 1 (presencial) e 4 (entrega a domicílio).

modalidade_frete
integer
Padrão: 9
Valores possíveis: 0 1 2 3 4 9
cnpj_destinatario
string

NF-e exige CNPJ ou CPF. NFC-e aceita e não exige.

cpf_destinatario
string
nome_destinatario
string <= 60 characters
indicador_inscricao_estadual_destinatario
integer
Padrão: 9
Valores possíveis: 1 2 9

1 contribuinte (exige inscricao_estadual_destinatario), 2 isento, 9 não contribuinte. NFC-e é sempre 9.

inscricao_estadual_destinatario
string
email_destinatario
string
logradouro_destinatario
string <= 60 characters
numero_destinatario
string <= 60 characters
complemento_destinatario
string <= 60 characters
bairro_destinatario
string <= 60 characters
municipio_destinatario
string

Nome do município. Com uf_destinatario, o código IBGE é resolvido pela tabela oficial; se não resolver, mande codigo_municipio_destinatario.

codigo_municipio_destinatario
string^[0-9]{7}$
uf_destinatario
string^[A-Z]{2}$
cep_destinatario
string
telefone_destinatario
string
Lista de objects
cnpjs_autorizados_xml
Lista de strings

Quem pode baixar o XML na SEFAZ (contador). Na Bahia a NF-e exige o grupo: sem ele o serviço informa o CNPJ da própria SEFAZ-BA.

informacoes_adicionais_contribuinte
string <= 5000 characters
valor_troco
number
required
Lista de objects [ 1 .. 990 ] items
required
Lista de objects non-empty

Respostas

Exemplos de requisição

Content type
application/json
{
  • "natureza_operacao": "Venda de mercadoria",
  • "cnpj_emitente": "string",
  • "numero": 1,
  • "serie": 1,
  • "tipo_documento": 0,
  • "finalidade_emissao": 1,
  • "local_destino": 1,
  • "consumidor_final": 0,
  • "presenca_comprador": 1,
  • "modalidade_frete": 0,
  • "cnpj_destinatario": "string",
  • "cpf_destinatario": "string",
  • "nome_destinatario": "string",
  • "indicador_inscricao_estadual_destinatario": 1,
  • "inscricao_estadual_destinatario": "string",
  • "email_destinatario": "string",
  • "logradouro_destinatario": "string",
  • "numero_destinatario": "string",
  • "complemento_destinatario": "string",
  • "bairro_destinatario": "string",
  • "municipio_destinatario": "string",
  • "codigo_municipio_destinatario": "string",
  • "uf_destinatario": "string",
  • "cep_destinatario": "string",
  • "telefone_destinatario": "string",
  • "notas_referenciadas": [
    ],
  • "cnpjs_autorizados_xml": [
    ],
  • "informacoes_adicionais_contribuinte": "string",
  • "valor_troco": 0,
  • "items": [
    ],
  • "formas_pagamento": [
    ]
}

Exemplos de resposta

Content type
application/json
{
  • "valido": true,
  • "documento": "nfse",
  • "ambiente": "string",
  • "mensagem": "string"
}

DANFE em PDF

Folha A4 em retrato. É a representação impressa; o documento fiscal continua sendo o XML. Não é um layout homologado pela SEFAZ: cumpre a função (identificar a nota e permitir a consulta pela chave) com os campos obrigatórios presentes.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters ^[A-Za-z0-9._-]{1,64}$
Exemplo: venda-2026-000123

A sua chave da transação, a mesma usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "codigo": "nao_autorizado",
  • "mensagem": "Token ausente, inválido, ou de um ambiente diferente do endereço chamado."
}

Consultar NF-e

Nota pendente: a consulta pergunta a SEFAZ pela chave (no máximo uma vez a cada 15 s). Nota recusada volta 422 com o motivo da SEFAZ.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Cancelar NF-e

Só nota autorizada cancela. O prazo é da SEFAZ (24 h para NF-e; NFC-e na Bahia, 30 minutos sem circulação da mercadoria): fora dele a resposta é 422 cancelamento_recusado com o cStat. A justificativa (15 a 255 caracteres) VAI à SEFAZ no evento 110111.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Request Body schema: application/json
required
justificativa
required
string [ 15 .. 255 ] characters

Respostas

Exemplos de requisição

Content type
application/json
{
  • "justificativa": "stringstringstr"
}

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Consultar NF-e por série e número

Recuperação: devolve a nota deste emissor com a série e o número informados, no ambiente do token, com a mesma representação do GET por ref. Use quando a resposta do POST se perdeu (timeout, rede) e o seu sistema não gravou a ref: antes de reenviar o mesmo número, pergunte se ele já existe. Nota de outro emissor responde 404, igual a número inexistente.

Authorizations:
basicAuth
path Parameters
serie
required
integer [ 0 .. 999 ]
Exemplo: 1
numero
required
integer [ 1 .. 999999999 ]
Exemplo: 2012

Respostas

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

Consultar NF-e pela chave de acesso

Recuperação pela chave de acesso de 44 posições (a do DANFE e do Id do XML), com ou sem o prefixo NFe e aceitando o CNPJ alfanumérico, escopada ao emissor do token e ao ambiente. Chave de outro emissor responde 404, igual a chave inexistente; chave com dígito verificador errado responde 422 chave_invalida.

Authorizations:
basicAuth
path Parameters
chave
required
string^(NFe)?[0-9A-Za-z]{44}$
Exemplo: 29260905509541000163650010000020121144422536

Respostas

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "modelo": "55",
  • "serie": "string",
  • "numero": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "chave_nfe": "string",
  • "protocolo": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "data_autorizacao": "2019-08-24T14:15:22Z",
  • "caminho_xml_nota_fiscal": "string",
  • "qrcode_url": "string",
  • "url_consulta_nf": "string",
  • "protocolo_cancelamento": "string",
  • "caminho_xml_cancelamento": "string",
  • "mensagem": "string",
  • "erros": [
    ]
}

XML de distribuição (nfeProc) da NF-e

NFe assinada + protNFe, exatamente como a SEFAZ autorizou. É o arquivo que o emitente guarda por 5 anos e manda ao contador. Também aceito como /{ref}/xml.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "codigo": "nao_autorizado",
  • "mensagem": "Token ausente, inválido, ou de um ambiente diferente do endereço chamado."
}

XML do evento de cancelamento da NF-e

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "codigo": "nao_autorizado",
  • "mensagem": "Token ausente, inválido, ou de um ambiente diferente do endereço chamado."
}

Inutilizações registradas da NF-e

Cada pedido de inutilização do emissor neste ambiente (homologado ou recusado), mais recente primeiro. Desde 22/09/2026 o procInutNFe é guardado e entra no ZIP do mês do painel.

Authorizations:
basicAuth

Respostas

Exemplos de resposta

Content type
application/json
{
  • "inutilizacoes": [
    ]
}

Inutilizar faixa de numeração da NF-e

Declara à SEFAZ que os números de numero_inicial a numero_final da série não serão usados. Faixa com número já usado é recusada antes de ir à SEFAZ.

Authorizations:
basicAuth
Request Body schema: application/json
required
cnpj
string

Opcional; se vier tem de ser o do emissor.

serie
required
integer
numero_inicial
required
integer
numero_final
required
integer
justificativa
required
string [ 15 .. 255 ] characters

Respostas

Exemplos de requisição

Content type
application/json
{
  • "cnpj": "string",
  • "serie": 0,
  • "numero_inicial": 0,
  • "numero_final": 0,
  • "justificativa": "stringstringstr"
}

Exemplos de resposta

Content type
application/json
{
  • "status": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "protocolo": "string"
}

XML (procEventoNFe) de uma carta de correção da NF-e

A CC-e é documento fiscal de guarda (5 anos). Sem sequencia devolve a última registrada. Existe desde 22/09/2026; antes só o texto da correção ficava guardado.

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

query Parameters
sequencia
integer [ 1 .. 20 ]

Respostas

Exemplos de resposta

Content type
application/json
{
  • "codigo": "nao_autorizado",
  • "mensagem": "Token ausente, inválido, ou de um ambiente diferente do endereço chamado."
}

Cartas de correção registradas da NF-e

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "ref": "string",
  • "chave_nfe": "string",
  • "cartas_correcao": [
    ]
}

Carta de correção da NF-e

Evento 110110. Só NF-e autorizada; NFC-e não tem carta de correção. Não corrige valor, quantidade, imposto, remetente, destinatário nem data (regra do Convênio S/N).

Authorizations:
basicAuth
path Parameters
ref
required
string <= 64 characters

A mesma ref usada na emissão.

Request Body schema: application/json
required
correcao
required
string [ 15 .. 1000 ] characters
sequencia
integer [ 1 .. 20 ]
Padrão: 1

Respostas

Exemplos de requisição

Content type
application/json
{
  • "correcao": "stringstringstr",
  • "sequencia": 1
}

Exemplos de resposta

Content type
application/json
{
  • "status": "string",
  • "status_sefaz": "string",
  • "mensagem_sefaz": "string",
  • "protocolo": "string",
  • "numero_carta_correcao": 0
}

Cobertura

Municípios atendidos, com a data de verificação de cada um.

Municípios atendidos, com a data em que cada um foi verificado

Cobertura MEDIDA, não afirmada: cada município da lista teve o webservice da prefeitura consultado e o padrão conferido, e a resposta traz a data dessa verificação. Consulte antes de prometer emissão ao seu cliente.

Município ausente da lista não é necessariamente município impossível: é município que não verificamos ou que usa um provedor para o qual ainda não há driver. Pergunte.

query Parameters
uf
string^[A-Za-z]{2}$

Filtra por UF.

codigo_ibge
string^[0-9]{7}$

Pergunta por um município específico.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "verificado_em": "2019-08-24",
  • "total": 0,
  • "municipios": [
    ]
}

Conta

Uso do mês, que é a base da fatura.

De quem é este token, e o que ele assume por você

Diz em nome de QUAL CNPJ a nota sairia com este token, e quais valores o TexFiscal assume quando o seu payload não manda o campo.

Consulte esta rota ANTES de emitir em sistema multi-inquilino. O caso que ela existe para evitar é concreto: um sistema com vários clientes e UM token no ambiente emite a nota do inquilino B com o CNPJ do inquilino A. A nota sai AUTORIZADA, em nome de quem não prestou o serviço, e o erro só aparece na apuração do contador.

O bloco padroes traz o que vem do CADASTRO do emissor. Seu payload sempre vence: mande o campo e o cadastro é ignorado; omita e o cadastro entra. Assim um cliente com o cadastro completo emite mandando só tomador, valor e discriminação.

Authorizations:
basicAuth

Respostas

Exemplos de resposta

Content type
application/json
{
  • "cnpj": "string",
  • "nome": "string",
  • "inscricao_municipal": "string",
  • "inscricao_estadual": "string",
  • "codigo_municipio": "string",
  • "municipio_nome": "string",
  • "uf": "string",
  • "ambiente": "producao",
  • "situacao": "string",
  • "serie_rps": "string",
  • "endereco": {
    },
  • "padroes": {
    }
}

Uso do mês

Quantidade e valor por status no mês, no ambiente do token. O campo total soma TODOS os status, inclusive os que falharam, então ele não é o valor da fatura: quem responde por isso é cobravel, que aplica o mesmo critério do fechamento (nota que recebeu número da prefeitura, em produção). Em homologação cobravel é sempre 0, porque nada ali é cobrado.

Authorizations:
basicAuth
query Parameters
mes
string^\d{4}-(0[1-9]|1[0-2])$
Exemplo: mes=2026-09

Respostas

Exemplos de resposta

Content type
application/json
{
  • "mes": "2026-09",
  • "ambiente": "homologacao",
  • "por_status": {
    },
  • "total": 22,
  • "cobravel": 9
}

Webhook

O aviso que o serviço manda ao seu sistema quando a nota muda de desfecho, e o cadastro dele por API (/v2/hooks).

Evento de mudança de desfecho de uma nota Webhook

Enviado por nós para a URL que você cadastrar, uma por ambiente (no painel ou por POST /v2/hooks). Vale para NFS-e (nfse_*), NF-e (nfe_*) e NFC-e (nfce_*): o prefixo do evento diz o recurso.

Confira o X-TexFiscal-Assinatura antes de confiar no conteúdo: é o HMAC-SHA256 do CORPO CRU com o segredo do seu webhook. Compare com hash_equals ou equivalente, nunca com == .

Três regras do receptor, e a segunda já custou caro em outros integradores:

  1. Responda 2xx rápido. Nosso timeout na tentativa imediata é 5 s.
  2. DESCARTE evento fora de ordem. Uma entrega reagendada pode chegar DEPOIS de um evento mais novo da mesma ref: por exemplo, uma nfse_autorizada que falhou chegando depois da nfse_cancelada. Guarde o ocorrido_em do último evento aplicado por ref e ignore o que for mais antigo, senão você marca como autorizada uma nota que foi cancelada.
  3. Trate entrega REPETIDA. Reenviamos até 16 vezes enquanto você não responder 2xx, e uma entrega pode chegar duas vezes se a sua resposta se perder. Deduplique pelo evento_id.
Authorizations:
basicAuth
header Parameters
X-TexFiscal-Evento
required
string

O mesmo valor do campo evento.

X-TexFiscal-Tentativa
required
integer

Número da tentativa, comecando em 1.

X-TexFiscal-Assinatura
required
string

HMAC-SHA256 do corpo cru, em hexadecimal, com o segredo do seu webhook.

X-Webhook-Token
required
string

O próprio segredo do webhook, em claro, para o receptor escrito para a Focus continuar funcionando sem mudança. Prefira conferir a assinatura: ela prova o corpo, o token só prova a origem.

Request Body schema: application/json
required
ref
required
string
status
string
Valores possíveis: "autorizado" "processando_autorizacao" "erro_autorizacao" "cancelado" "processando_cancelamento" "denegado"
numero
string or null

Número da NFS-e na prefeitura.

numero_rps
string or null
serie_rps
string or null
codigo_verificacao
string or null
data_emissao
string or null <date-time>
url
string or null

Endereço do DANFSe. Exige o token: não é link público.

caminho_danfse
string or null
caminho_xml_nota_fiscal
string or null
mensagem
string or null
erros
Lista de objects or null
evento
required
string
Valores possíveis: "nfse_autorizada" "nfse_erro" "nfse_cancelada" "nfse_cancelamento_nao_efetivado" "nfe_autorizada" "nfe_erro" "nfe_cancelada" "nfe_denegada" "nfce_autorizada" "nfce_erro" "nfce_cancelada" "nfce_denegada" "teste"

nfse_cancelamento_nao_efetivado significa que o cancelamento NÃO valeu na prefeitura e a nota voltou a estar autorizada: é o único que pede ação sua. nfe_denegada e nfce_denegada: a SEFAZ denegou o uso e o número foi consumido (estado final, XML em /xml). teste: disparado pelo botão do painel, corpo sem nota.

evento_id
required
integer

Único e estável. Use como chave de deduplicação.

ocorrido_em
required
string <date-time>

Quando o evento foi gerado, não quando foi entregue. Use para descartar evento fora de ordem.

Respostas

Exemplos de requisição

Content type
application/json
{
  • "ref": "string",
  • "status": "autorizado",
  • "numero": "string",
  • "numero_rps": "string",
  • "serie_rps": "string",
  • "codigo_verificacao": "string",
  • "data_emissao": "2019-08-24T14:15:22Z",
  • "url": "string",
  • "caminho_danfse": "string",
  • "caminho_xml_nota_fiscal": "string",
  • "mensagem": "string",
  • "erros": [
    ],
  • "evento": "nfse_autorizada",
  • "evento_id": 0,
  • "ocorrido_em": "2019-08-24T14:15:22Z"
}

Webhook cadastrado para o emissor no ambiente do token

Lista o webhook do emissor no ambiente do token (há no máximo um por ambiente), ativo ou desligado. O segredo nunca volta aqui: ele só aparece na resposta do POST.

Authorizations:
basicAuth

Respostas

Exemplos de resposta

Content type
application/json
{
  • "ambiente": "string",
  • "hooks": [
    ]
}

Cadastrar ou substituir o webhook

Cadastra a URL que recebe os eventos do emissor neste ambiente. Só https, sem usuário embutido e sem endereço interno. A resposta 201 traz o segredo UMA vez: guarde-o, ele vai em X-Webhook-Token em cada aviso e assina o corpo em X-TexFiscal-Assinatura. Já existe um ativo: 409 webhook_ja_cadastrado. Repita com substituir: true para trocar a URL, sabendo que o segredo é rotacionado e o seu receptor precisa adotar o novo. É o mesmo cadastro do painel (Webhooks) e do console: quem integra pela API não precisa de acesso ao painel.

Authorizations:
basicAuth
Request Body schema: application/json
required
url
required
string <uri>
substituir
boolean
Padrão: false

true para trocar um webhook ativo; rotaciona o segredo.

Respostas

Exemplos de requisição

Content type
application/json

Exemplos de resposta

Content type
application/json
{
  • "id": 0,
  • "ambiente": "homologacao",
  • "ativo": true,
  • "criado_em": "string",
  • "atualizado_em": "string",
  • "segredo": "string",
  • "mensagem": "string"
}

Desligar o webhook

Desliga o webhook do emissor. As entregas pendentes dele são encerradas sem envio; as notas continuam consultáveis por GET. Cadastrar de novo gera outro segredo.

Authorizations:
basicAuth
path Parameters
id
required
integer

O id devolvido pelo GET ou pelo POST.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "id": 0,
  • "ativo": true,
  • "mensagem": "string"
}

Serviço

Saúde do ambiente.

Saúde do serviço

Única rota sem token. Diz o mínimo de propósito: vigia não precisa de credencial, e o que não se responde não vaza.

Respostas

Exemplos de resposta

Content type
application/json
{
  • "servico": "string",
  • "status": "string"
}