Endpoints

Todos os endpoints são prefixados com https://platform.notaas.com.br/api/v1 e requerem o header x-api-key.

Emissão NFS-e

POST/emitir🔑 x-api-key

Enfileira uma NFS-e para emissão assíncrona. Retorna 202 com invoiceId para polling.

Estrutura Geral (Body JSON)

CampoTipoReq?Descrição
tomador.cnpjstringsimCNPJ do tomador (14 dígitos, sem formatação). Obrigatório pelo XSD (nacional) — use CNPJ ou CPF. Para estrangeiros, pode ser omitido caso o nif seja informado.
tomador.cpfstringnãoCPF do tomador (11 dígitos). Alternativo ao CNPJ.
tomador.nifstringnãoNIF (Número de Identificação Fiscal) do tomador estrangeiro. Obrigatório caso seja do exterior e não possua CNPJ/CPF.
tomador.nomestringsimNome ou razão social do tomador. Obrigatório pelo XSD (TCInfoPessoa.xNome).
tomador.emailstringnãoE-mail do tomador para envio da nota.
tomador.telefonestringnãoTelefone do tomador (apenas dígitos).
tomador.endereco.logradourostringnãoLogradouro do tomador.
tomador.endereco.numerostringnãoNúmero do endereço.
tomador.endereco.complementostringnãoComplemento do endereço.
tomador.endereco.bairrostringnãoBairro do tomador.
tomador.endereco.cidadestringnãoNome da cidade do tomador (ex: "Londrina"). Resolvido para código IBGE automaticamente.
tomador.endereco.ufstringnãoSigla do estado (ex: "PR"). Use "EX" para o exterior.
tomador.endereco.cepstringnãoCEP do tomador (apenas dígitos).
tomador.endereco.paisstringnãoSigla ISO2 do país do tomador (ex: "US"). Padrão: "BR". Se diferente de "BR", ativa o fluxo de tomador estrangeiro.
servico.descricaostringsimDescrição detalhada do serviço prestado.
servico.codigostringnãocTribNac LC 116/2003 — 6 dígitos numéricos (ex: "010700"). Opcional: usa o padrão do projeto se omitido.
servico.codigoServicostringnãoCódigo de serviço municipal (SP: 4-5 dígitos, ex: "07498"). Opcional se omitido.
servico.localPrestacaostringnãoCódigo IBGE 7 dígitos do local de prestação do serviço. Em caso de exportação, preencha com a sigla ISO2 do país (ex: "US").
servico.nbsstringnãoCódigo NBS — Nomenclatura Brasileira de Serviços (9 dígitos numéricos). Obrigatório em municípios com engine TBW/SIL.
servico.codigoTributacaoMunicipalstringnãoCódigo de tributação municipal (desdobro) — 3 dígitos numéricos (ex: "001"). Opcional.
valores.totalnumbersimValor bruto do serviço em reais (ex: 1500.00).
valores.aliquotaIssnumbersimAlíquota ISS em % (ex: 2.0 para 2%). Informar 0 para imunidade ou exportação.
valores.issRetidobooleannãoISS retido pelo tomador (padrão: false).
competenciastringnãoCompetência no formato YYYY-MM (padrão: mês atual).
referenciastringnãoIdentificador externo opcional (seu sistema).

Dados Complementares (opcional)

CampoTipoReq?Descrição
servico.informacoesComplementaresstringnãoInformações adicionais/complementares impressas no corpo do DANFSe (limite de 2000 caracteres).
servico.pedidoComprastringnãoNúmero do pedido de compra (PO) associado ao serviço.
servico.documentoReferenciastringnãoContrato ou nota fiscal de referência.

Exportação de Serviços (opcional)

CampoTipoReq?Descrição
valores.exportacaoobjectnãoGrupo de dados adicionais de comércio exterior. Obrigatório quando servico.localPrestacao for uma sigla de país.
valores.exportacao.modoPrestacaonumbernãoModo de prestação: 1-Transfronteiriço, 2-Consumo no Brasil, 3-Presença Comercial no Exterior, 4-Movimento Temporário.
valores.exportacao.vinculoPartesnumbernãoVínculo entre partes: 0-Sem vínculo, 1-Controlada, 2-Controladora, 3-Coligada, 4-Matriz, 5-Filial, 6-Outro.
valores.exportacao.codigoMoedastringnãoCódigo de 3 dígitos da moeda na tabela BACEN (ex: "220" para USD, "978" para EUR).
valores.exportacao.valorServicoMoedanumbernãoValor do serviço expresso na moeda estrangeira.
valores.exportacao.fomentoPrestadorstringnãoCódigo de fomento do prestador (padrão: "01" para nenhum).
valores.exportacao.fomentoTomadorstringnãoCódigo de fomento do tomador (padrão: "01" para nenhum).
valores.exportacao.movimentacaoTemporariaBensnumbernãoMovimentação temporária de bens: 1-Não, 2-Declaração Importação, 3-Declaração Exportação.
valores.exportacao.compartilharMdicbooleannãoEnviar dados da NFS-e para a SECEX/MDIC.
valores.exportacao.paisResultadostringsimSigla ISO2 do país onde se produz o resultado do serviço. Obrigatório em notas de exportação.

Dados de Obra (opcional)

CampoTipoReq?Descrição
servico.obraobjectnãoInformações sobre a obra de construção civil associada ao serviço.
servico.obra.inscricaoImobiliariastringnãoInscrição imobiliária municipal da obra (IPTU/Inscrição Cadastral).
servico.obra.codigoObrastringnãoNúmero do cadastro CNO (Cadastro Nacional de Obras) ou CEI.
servico.obra.codigoCibstringnãoCódigo do Cadastro Imobiliário Brasileiro (CIB) da obra.
servico.obra.artstringnãoAnotação de Responsabilidade Técnica (ART) da obra (obrigatório para motores ABRASF).
servico.obra.enderecoobjectnãoEndereço específico da execução da obra (estrutura igual ao endereço do tomador).

Tributação Federal e Retenções (opcional)

CampoTipoReq?Descrição
valores.totaisTributosAproximadosobjectnãoTotais aproximados de tributos por esfera — Lei 12.741/2012 (Transparência Fiscal). Envie percentuais OU valores em R$, nunca ambos. Exclusivo para SNNFSE.
↳ percentualTributacaoFederalnumbernãoOpção A (percentual): tributos federais aproximados em %.
↳ percentualTributacaoEstadualnumbernãoOpção A (percentual): tributos estaduais aproximados em %.
↳ percentualTributacaoMunicipalnumbernãoOpção A (percentual): tributos municipais (ISS) aproximados em %.
↳ valorTributacaoFederalnumbernãoOpção B (valor R$): tributos federais em reais.
↳ valorTributacaoEstadualnumbernãoOpção B (valor R$): tributos estaduais em reais.
↳ valorTributacaoMunicipalnumbernãoOpção B (valor R$): tributos municipais (ISS) em reais.
valores.pisCofinsobjectnãoOverride de tributação federal PIS/COFINS por nota. Exclusivo para SNNFSE (ignorado para MEI e Simples Nacional).
↳ cststringnãoCST PIS/COFINS (2 dígitos). Ex: "01", "07".
↳ baseCalculonumbernãoBase de cálculo em R$. Padrão: total do serviço.
↳ aliquotaPisnumbernãoAlíquota PIS em % (ex: 0.65).
↳ aliquotaCofinsnumbernãoAlíquota COFINS em % (ex: 3.00).
↳ valorPisnumbernãoOverride do valor do PIS em R$.
↳ valorCofinsnumbernãoOverride do valor do COFINS em R$.
↳ tipoRetencaonumbernãoTipo de retenção: 0=Não Retidos, 1=PIS/COFINS Retidos, 3=Todos Retidos.
valores.retencaoIrrfnumbernãoValor retenção IRRF em R$.
valores.retencaoCpnumbernãoValor retenção Contribuição Previdenciária (INSS) em R$.
valores.retencaoCsllnumbernãoValor retenção CSLL em R$.

Atividades de Eventos (opcional)

CampoTipoReq?Descrição
servico.eventoobjectnãoInformações do evento associado à prestação de serviços (item 12 da LC 116).
servico.evento.nomestringsimNome ou descrição do evento (ex: "Show de Música Ao Vivo").
servico.evento.dataIniciostringsimData de início do evento no formato YYYY-MM-DD.
servico.evento.dataFimstringsimData de término do evento no formato YYYY-MM-DD.
servico.evento.idstringnãoIdentificador único do evento (opcional).
{
  "tomador": {
    "nome": "Empresa Tomadora Ltda",
    "cnpj": "12345678000195",
    "email": "[email protected]",
    "endereco": {
      "logradouro": "Rua das Flores",
      "numero": "100",
      "bairro": "Centro",
      "cidade": "Londrina",
      "uf": "PR",
      "cep": "86010010"
    }
  },
  "servico": {
    "descricao": "Desenvolvimento de software personalizado",
    "codigo": "010302"
  },
  "valores": {
    "total": 5000.00,
    "aliquotaIss": 2.0,
    "issRetido": false
  },
  "competencia": "2026-06",
  "referencia": "OS-2026-001"
}
{
  "queued": true,
  "invoiceId": "inv_abc123",
  "status": "queued",
  "pollUrl": "/api/v1/invoices/inv_abc123/status"
}

💰 Tributação Federal (PIS/COFINS/IRRF) — SNNFSE

  • MEI / Simples Nacional: campos federais são ignorados silenciosamente — PIS/COFINS já são recolhidos no DAS.
  • Prioridade de valores: API request (override) → Configuração do projeto (Settings) → Derivado do regime.
  • Se o projeto tem cstPisCofins e alíquotas configurados em Settings, o bloco <tribFed> é gerado automaticamente — sem precisar enviar na API.
  • Campos retencaoIrrf, retencaoCp e retencaoCsll são inseridos no XML apenas quando informados (valores em R$).
POST/cancelar🔑 x-api-key

Solicita o cancelamento assíncrono de uma NFS-e já emitida (status issued).

Body (JSON)

CampoTipoReq?Descrição
invoiceIdstringsimID da nota a cancelar
motivostringnãoMotivo do cancelamento (texto livre, max 255 chars)

Status & Polling

GET/invoices/{id}/status🔑 x-api-key

Retorna o status atual de uma NFS-e individual.

Resposta

CampoTipoReq?Descrição
statusstringnãoqueued | processing | issued | error | cancelled
chNFSestringnãoChave/código de verificação da NFS-e (disponível quando status=issued)
numeroNfestringnãoNúmero da NFS-e (disponível quando status=issued)
emittedAtstring (ISO 8601)nãoTimestamp de emissão (disponível quando status=issued)
ambientestringnão"producao" ou "homologacao" (disponível quando status=issued)
pdfUrlstring (URL)nãoURL pública CDN do PDF (disponível quando documentsCached=true). Acesso direto, sem autenticação.
xmlUrlstring (URL)nãoURL pública CDN do XML (disponível quando documentsCached=true). Acesso direto, sem autenticação.
documentsCachedbooleannãotrue quando XML e PDF foram armazenados no CDN. URLs disponíveis em pdfUrl e xmlUrl.
errorCodestringnãoCódigo do erro (disponível quando status=error)
errorMessagestringnãoMensagem de erro legível (disponível quando status=error)
errorsarraynãoArray detalhado de erros da SEFAZ [{Codigo, Descricao, Complemento}] (disponível quando status=error)
cancelledAtstring (ISO 8601)nãoTimestamp do cancelamento (disponível quando status=cancelled)
cancelXmlUrlstring (URL)nãoURL pública CDN do XML de cancelamento (disponível quando status=cancelled e documentsCached=true)

Documentos da NFS-e

GET/invoices/{id}/xml🔑 x-api-key

Retorna o XML da NFS-e. Sem parâmetros, retorna o XML de emissão. Com ?type=cancel, retorna o XML de cancelamento.

Query Parameters

CampoTipoReq?Descrição
typestringnãoTipo de XML: "emission" (default) ou "cancel". O tipo "cancel" retorna o XML de cancelamento — disponível apenas para notas com status cancelled.

Comportamento

CampoTipoReq?Descrição
Cache R2 (302)redirectnãoQuando cacheado no CDN, redireciona para URL pública (cache immutable).
Fallback (200)application/xmlnãoQuando não cacheado, retorna o XML do banco com Content-Type application/xml.

Erros

CampoTipoReq?Descrição
409ConflictnãoInvoice ainda não emitida (status ≠ issued ou cancelled)
409Conflictnão?type=cancel: nota não está cancelada
404Not FoundnãoXML não disponível para esta nota
GET/invoices/{id}/pdf🔑 x-api-key

Retorna o PDF (DANFSE) da NFS-e. Se cacheado no R2, redireciona (302) para a URL pública CDN. Caso contrário, busca ao vivo no portal municipal.

Comportamento

CampoTipoReq?Descrição
Cache R2 (302)redirectnãoQuando documentsCached=true, redireciona para URL pública CDN (cache immutable).
SNNFSE federal200 PDFnãoGeração local do DANFSe v2.0 a partir do XML da nota (substitui o ADN Federal descontinuado).
Pronim (Cidade360)200 PDFnãoFallback: consulta portal Cidade360 e retorna PDF inline.
São Paulo (SP)302 redirectnãoFallback: redireciona para o portal da Prefeitura SP.
WebISS200 PDF / 302nãoFallback: GET no portal WebISS (público ou mTLS).

Erros

CampoTipoReq?Descrição
409ConflictnãoInvoice ainda não emitida (status ≠ issued)
422UnprocessablenãoDados insuficientes: certificado A1 ausente, chave de acesso inválida
501Not ImplementednãoSistema municipal não suporta download de PDF (DSF, Centi)
502Bad GatewaynãoPortal externo retornou erro

Lote (Batch)

POST/emitir/batch🔑 x-api-key

Emite múltiplas NFS-e de forma assíncrona. Retorna batchId para acompanhamento.

Body (JSON)

CampoTipoReq?Descrição
itemsarraysimArray de objetos com o mesmo formato do POST /emitir
GET/invoices/batch/{batchId}/status🔑 x-api-key

Retorna o progresso de um lote: total, processados, emitidos, erros.

Resposta

CampoTipoReq?Descrição
batchIdstringnãoID do lote
statusstringnãoprocessing | completed | partial | failed
totalnumbernãoTotal de itens no lote
processednumbernãoItens já processados
issuednumbernãoItens emitidos com sucesso
errorsnumbernãoItens com erro
items[].invoiceIdstringnãoID da invoice
items[].statusstringnãoStatus individual do item
items[].pdfUrlstring (URL)nãoURL para download do PDF (disponível quando status=issued)
items[].chNFSestringnãoChave/código de verificação (disponível quando status=issued)
items[].errorCodestringnãoCódigo do erro (disponível quando status=error)

Endpoints de Webhook

POST/webhooks/endpoints🔑 x-api-key

Cadastra um novo endpoint de webhook para a organização/projeto.

Body (JSON)

CampoTipoReq?Descrição
urlstringsimURL HTTPS que receberá o POST
eventsstring[]simEx: ["nfse.issued", "nfse.error", "nfse.cancelled", "nfse.documents_ready", "batch.completed"]
secretstringnãoSecret para assinatura HMAC-SHA256 via X-Notaas-Signature (opcional)
GET/webhooks/endpoints🔑 x-api-key

Lista todos os endpoints de webhook configurados.

PATCH/webhooks/endpoints/{id}🔑 x-api-key

Atualiza URL, eventos, status ativo/inativo ou secret de um endpoint. Envie secret: null ou secret: '' para remover a assinatura.

DELETE/webhooks/endpoints/{id}🔑 x-api-key

Remove um endpoint de webhook.

POST/webhooks/endpoints/{id}/test🔑 x-api-key

Envia um payload de teste para validar a configuração do endpoint.

GET/webhooks/deliveries🔑 x-api-key

Lista o histórico de entregas de webhook com status e tentativas.

Eventos Suportados

Eventos

CampoTipoReq?Descrição
nfse.issuedeventnãoNFS-e emitida com sucesso. Payload inclui número da nota e código de verificação.
nfse.erroreventnãoFalha na emissão. Payload inclui código e mensagem de erro.
nfse.cancelledeventnãoNFS-e cancelada com sucesso. Payload inclui invoiceId, numeroNfse e cancelledAt.
nfse.documents_readyeventnãoDocumentos cacheados no CDN. Payload inclui xmlUrl, pdfUrl, cancelXmlUrl (para notas canceladas) e documentStatus.
batch.completedeventnãoTodos os itens de um lote foram processados.

⚠️ nfse.documents_ready — comportamento de entrega

Este evento pode ser disparado até 2 vezes para a mesma invoice:

  • 1ª chamada: documentStatus: "partial" — XML pronto, PDF pode estar indisponível (pdfUrl: null)
  • 2ª chamada (até 10 min depois): documentStatus: "complete" — XML e PDF prontos. Se o retry esgotar sem sucesso, nenhum webhook adicional é enviado.

Use o campo documentStatus para determinar se todos os documentos estão disponíveis.

Para notas canceladas, o payload inclui o campo adicional cancelXmlUrl com a URL do XML de cancelamento. cancelXmlUrl é null para notas emitidas.

Em engines que não emitem PDF (ex.: dsf, centi), o evento chega uma única vez com pdfUrl: null e documentStatus: "complete".

ℹ️ Compatibilidade de Webhook

Campos adicionais podem ser incluídos nos payloads de webhook sem aviso prévio. Seu código deve ignorar campos desconhecidos para manter compatibilidade futura (Postel's Law).