Envio do lote e consulta
Envio do lote
POST /v1/lotes com Content-Type: application/json e o corpo { "notas": [ ... ] }.
- Tamanho: de 1 a 500 notas por envio. Acima disso, o lote inteiro é recusado com
400LOTE_ACIMA_DO_LIMITEe nenhuma nota é recebida: divida o envio em lotes menores. O corpo aceita até 5 MB (413CORPO_ACIMA_DO_LIMITEacima disso). - Envelope inválido (sem
notas,notasvazio ou que não é lista, campo além denotas):400VALIDACAO_CAMPO, com o detalhe emcampos. - Resposta
202imediata, mesmo quando alguma nota é recusada: a emissão acontece depois, em segundo plano. - Campos da nota:
idOperacao,competencia,tomador,servicoevalores, entre outros. Os objetos são estritos: campo não previsto recusa a nota. A lista completa, com regras e tamanhos, está na referência do envio do lote.
Requisição:
POST /v1/lotes HTTP/1.1
Host: hml.nfse.lideraweb.com
Authorization: Bearer <seu-token>
Content-Type: application/json
{
"notas": [
{
"idOperacao": "FAT-1001",
"competencia": "2026-11-10",
"tomador": {
"documento": "11222333000181",
"nome": "Cliente Exemplo Ltda",
"email": "financeiro@cliente.example",
"endereco": {
"cep": "30130000",
"logradouro": "Rua Exemplo",
"numero": "100",
"bairro": "Centro",
"codigoMunicipio": "3106200"
}
},
"servico": {
"codigoTributacaoNacional": "010701",
"descricao": "Desenvolvimento de sistema sob encomenda"
},
"valores": {
"valorServico": 1500,
"issRetido": false
}
}
]
}
Com curl:
curl -X POST "$BASE_URL/lotes" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
--data '{
"notas": [
{
"idOperacao": "FAT-1001",
"competencia": "2026-11-10",
"tomador": {
"documento": "11222333000181",
"nome": "Cliente Exemplo Ltda",
"email": "financeiro@cliente.example",
"endereco": {
"cep": "30130000",
"logradouro": "Rua Exemplo",
"numero": "100",
"bairro": "Centro",
"codigoMunicipio": "3106200"
}
},
"servico": {
"codigoTributacaoNacional": "010701",
"descricao": "Desenvolvimento de sistema sob encomenda"
},
"valores": {
"valorServico": 1500,
"issRetido": false
}
}
]
}'
Sem o cabeçalho Content-Type, o curl envia o corpo como application/x-www-form-urlencoded, recusado com 415 CONTEUDO_NAO_SUPORTADO.
Resposta 202:
{
"loteId": "7c1e9a4b-2f3d-4e8a-b5c6-1d2e3f4a5b6c",
"notas": [
{
"idOperacao": "FAT-1001",
"aceita": true,
"id": "3f8b2c1a-6d4e-4b7f-9a21-0c5e8d7f6a10",
"status": "recebida",
"existente": false
}
]
}
notasvem na mesma ordem em que as notas foram enviadas: relacione cada resultado à nota enviada pela posição.aceita: truetraz oidda nota e ostatus. Guarde oid: é a chave da consulta, do webhook e dos downloads. Guarde também oloteId, para a consulta do lote.aceita: falsetrazerros, comcampoemensagemem português. A nota não foi gravada: corrija o campo indicado e reenvie com o mesmoidOperacao.
Valores e texto
valores.valorServicoé número JSON (não texto), em reais, com no máximo 2 casas decimais e mínimo0.01. A API não arredonda: mais de 2 casas recusam a nota. Converta o valor guardado como texto ou no formato brasileiro (150,25) antes de gerar o JSON.- Os valores dos grupos
valores.totTribevalores.tribFedsão texto decimal com ponto e até 2 casas (por exemplo"6.50"); o detalhe está na referência do envio do lote. - O JSON precisa estar em UTF-8. Nos campos de endereço do tomador e em
informacoesComplementares, só caracteres da faixa Latin-1, sem tabulação nem quebra de linha: travessão, aspas curvas e emoji recusam a nota, e a API não troca caracteres.
Idempotência por idOperacao
O idOperacao identifica a operação no seu sistema (por exemplo a fatura), não o conteúdo da nota:
- Reenvio do mesmo
idOperacaode uma nota já gravada devolve a nota existente, comexistente: truee o status atual, sem duplicar a emissão. O conteúdo reenviado é ignorado, mesmo que seja diferente do original. Cada operação nova precisa de umidOperacaonovo. - Nota recusada na recepção (
aceita: false) não foi gravada: corrija e reenvie com o mesmoidOperacao. - Nota
rejeitadajá foi gravada: o mesmoidOperacaosó devolve a nota rejeitada. Para emitir de novo, corrija os dados e use umidOperacaonovo (por exemploFAT-1001-2). - Nota
pendente_intervencao: nunca reenvie com outroidOperacao, porque a nota pode já estar registrada na Sefin Nacional e haveria duas NFS-e para a mesma operação. Aguarde e consulte. Se a nota continuar pendente e você precisar de retorno sobre ela, informe oidda nota. A LideraNota executa este passo: pedir pelo WhatsApp. - Falha de rede ou tempo esgotado no envio: reenvie o mesmo lote, com os mesmos
idOperacao. As notas já gravadas voltam comexistente: truee nada é emitido em dobro. O reenvio recebe outroloteId, mas as notas continuam ligadas ao lote original: acompanhe-as peloidOperacaoou peloid.
Consulta do lote e da nota
As consultas são a alternativa e o complemento do webhook. As três rotas só enxergam lotes e notas do emitente do token: lote ou nota de outro emitente recebe o mesmo 404 de um inexistente.
Quando consultar: depois de uma falha de rede no envio, para saber se a nota foi gravada; para notas enviadas há muito tempo sem webhook, em especial as pendente_intervencao, que não geram webhook; e enquanto o webhook do seu sistema estiver fora do ar. Use uma rotina periódica com intervalo de minutos, não um laço contínuo. Para uma nota que continua pendente_intervencao, a LideraNota executa este passo: pedir pelo WhatsApp, informando o id da nota.
Consulta do lote
GET /v1/lotes/{loteId} devolve loteId, recebidoEm, totalNotas, contagemPorStatus e notas, com as notas gravadas por aquele lote, sem paginação (referência). totalNotas conta todos os itens enviados, inclusive os recusados e os reenvios de idOperacao já recebido; contagemPorStatus traz só os status presentes. Erros: 400 VALIDACAO_CAMPO (loteId fora do formato UUID) e 404 LOTE_NAO_ENCONTRADO.
GET /v1/lotes/7c1e9a4b-2f3d-4e8a-b5c6-1d2e3f4a5b6c HTTP/1.1
Host: hml.nfse.lideraweb.com
Authorization: Bearer <seu-token>
curl -X GET "$BASE_URL/lotes/7c1e9a4b-2f3d-4e8a-b5c6-1d2e3f4a5b6c" \
-H "Authorization: Bearer $TOKEN"
Consulta da nota
GET /v1/notas/{notaId} devolve a nota (referência). Erros: 400 VALIDACAO_CAMPO (notaId fora do formato UUID) e 404 NOTA_NAO_ENCONTRADA.
GET /v1/notas/3f8b2c1a-6d4e-4b7f-9a21-0c5e8d7f6a10 HTTP/1.1
Host: hml.nfse.lideraweb.com
Authorization: Bearer <seu-token>
curl -X GET "$BASE_URL/notas/3f8b2c1a-6d4e-4b7f-9a21-0c5e8d7f6a10" \
-H "Authorization: Bearer $TOKEN"
Resposta 200 de uma nota autorizada:
{
"id": "3f8b2c1a-6d4e-4b7f-9a21-0c5e8d7f6a10",
"idOperacao": "FAT-1001",
"loteId": "7c1e9a4b-2f3d-4e8a-b5c6-1d2e3f4a5b6c",
"status": "autorizada",
"ambiente": "homologacao",
"numeroNfse": "123",
"chaveAcesso": "31062002211222333000181000000000012326110000001234",
"autorizadaEm": "2026-11-10T14:05:40.000Z",
"links": {
"xml": "https://hml.nfse.lideraweb.com/v1/notas/3f8b2c1a-6d4e-4b7f-9a21-0c5e8d7f6a10/xml",
"danfse": "https://hml.nfse.lideraweb.com/v1/notas/3f8b2c1a-6d4e-4b7f-9a21-0c5e8d7f6a10/danfse"
}
}
A nota rejeitada traz erro (codigo e mensagem); a nota com pedido de cancelamento traz cancelamento; a nota com pedido de análise fiscal traz analiseFiscal; a substituta traz substitui e a original substituída traz substituidaPor. É o mesmo objeto na consulta da nota, na busca por idOperacao, em cada nota da consulta do lote e no webhook.
Busca pelo idOperacao
GET /v1/notas?idOperacao={idOperacao} devolve a nota pelo identificador do seu sistema (referência). 404 NOTA_NAO_ENCONTRADA quer dizer que a nota não foi recebida: depois de uma falha de rede, reenvie com o mesmo idOperacao. 400 VALIDACAO_CAMPO quando o idOperacao falta, está vazio, se repete ou passa de 64 caracteres. Codifique o valor para URL quando ele tiver espaço ou caracteres especiais.
GET /v1/notas?idOperacao=FAT-1001 HTTP/1.1
Host: hml.nfse.lideraweb.com
Authorization: Bearer <seu-token>
curl -X GET "$BASE_URL/notas?idOperacao=FAT-1001" \
-H "Authorization: Bearer $TOKEN"