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
/emitir🔑 x-api-keyEnfileira uma NFS-e para emissão assíncrona. Retorna 202 com invoiceId para polling.
Estrutura Geral (Body JSON)
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| tomador.cnpj | string | sim | CNPJ 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.cpf | string | não | CPF do tomador (11 dígitos). Alternativo ao CNPJ. |
| tomador.nif | string | não | NIF (Número de Identificação Fiscal) do tomador estrangeiro. Obrigatório caso seja do exterior e não possua CNPJ/CPF. |
| tomador.nome | string | sim | Nome ou razão social do tomador. Obrigatório pelo XSD (TCInfoPessoa.xNome). |
| tomador.email | string | não | E-mail do tomador para envio da nota. |
| tomador.telefone | string | não | Telefone do tomador (apenas dígitos). |
| tomador.endereco.logradouro | string | não | Logradouro do tomador. |
| tomador.endereco.numero | string | não | Número do endereço. |
| tomador.endereco.complemento | string | não | Complemento do endereço. |
| tomador.endereco.bairro | string | não | Bairro do tomador. |
| tomador.endereco.cidade | string | não | Nome da cidade do tomador (ex: "Londrina"). Resolvido para código IBGE automaticamente. |
| tomador.endereco.uf | string | não | Sigla do estado (ex: "PR"). Use "EX" para o exterior. |
| tomador.endereco.cep | string | não | CEP do tomador (apenas dígitos). |
| tomador.endereco.pais | string | não | Sigla ISO2 do país do tomador (ex: "US"). Padrão: "BR". Se diferente de "BR", ativa o fluxo de tomador estrangeiro. |
| servico.descricao | string | sim | Descrição detalhada do serviço prestado. |
| servico.codigo | string | não | cTribNac LC 116/2003 — 6 dígitos numéricos (ex: "010700"). Opcional: usa o padrão do projeto se omitido. |
| servico.codigoServico | string | não | Código de serviço municipal (SP: 4-5 dígitos, ex: "07498"). Opcional se omitido. |
| servico.localPrestacao | string | não | Có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.nbs | string | não | Código NBS — Nomenclatura Brasileira de Serviços (9 dígitos numéricos). Obrigatório em municípios com engine TBW/SIL. |
| servico.codigoTributacaoMunicipal | string | não | Código de tributação municipal (desdobro) — 3 dígitos numéricos (ex: "001"). Opcional. |
| valores.total | number | sim | Valor bruto do serviço em reais (ex: 1500.00). |
| valores.aliquotaIss | number | sim | Alíquota ISS em % (ex: 2.0 para 2%). Informar 0 para imunidade ou exportação. |
| valores.issRetido | boolean | não | ISS retido pelo tomador (padrão: false). |
| competencia | string | não | Competência no formato YYYY-MM (padrão: mês atual). |
| referencia | string | não | Identificador externo opcional (seu sistema). |
Dados Complementares (opcional)
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| servico.informacoesComplementares | string | não | Informações adicionais/complementares impressas no corpo do DANFSe (limite de 2000 caracteres). |
| servico.pedidoCompra | string | não | Número do pedido de compra (PO) associado ao serviço. |
| servico.documentoReferencia | string | não | Contrato ou nota fiscal de referência. |
Exportação de Serviços (opcional)
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| valores.exportacao | object | não | Grupo de dados adicionais de comércio exterior. Obrigatório quando servico.localPrestacao for uma sigla de país. |
| valores.exportacao.modoPrestacao | number | não | Modo de prestação: 1-Transfronteiriço, 2-Consumo no Brasil, 3-Presença Comercial no Exterior, 4-Movimento Temporário. |
| valores.exportacao.vinculoPartes | number | não | Vínculo entre partes: 0-Sem vínculo, 1-Controlada, 2-Controladora, 3-Coligada, 4-Matriz, 5-Filial, 6-Outro. |
| valores.exportacao.codigoMoeda | string | não | Código de 3 dígitos da moeda na tabela BACEN (ex: "220" para USD, "978" para EUR). |
| valores.exportacao.valorServicoMoeda | number | não | Valor do serviço expresso na moeda estrangeira. |
| valores.exportacao.fomentoPrestador | string | não | Código de fomento do prestador (padrão: "01" para nenhum). |
| valores.exportacao.fomentoTomador | string | não | Código de fomento do tomador (padrão: "01" para nenhum). |
| valores.exportacao.movimentacaoTemporariaBens | number | não | Movimentação temporária de bens: 1-Não, 2-Declaração Importação, 3-Declaração Exportação. |
| valores.exportacao.compartilharMdic | boolean | não | Enviar dados da NFS-e para a SECEX/MDIC. |
| valores.exportacao.paisResultado | string | sim | Sigla ISO2 do país onde se produz o resultado do serviço. Obrigatório em notas de exportação. |
Dados de Obra (opcional)
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| servico.obra | object | não | Informações sobre a obra de construção civil associada ao serviço. |
| servico.obra.inscricaoImobiliaria | string | não | Inscrição imobiliária municipal da obra (IPTU/Inscrição Cadastral). |
| servico.obra.codigoObra | string | não | Número do cadastro CNO (Cadastro Nacional de Obras) ou CEI. |
| servico.obra.codigoCib | string | não | Código do Cadastro Imobiliário Brasileiro (CIB) da obra. |
| servico.obra.art | string | não | Anotação de Responsabilidade Técnica (ART) da obra (obrigatório para motores ABRASF). |
| servico.obra.endereco | object | não | Endereço específico da execução da obra (estrutura igual ao endereço do tomador). |
Tributação Federal e Retenções (opcional)
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| valores.totaisTributosAproximados | object | não | Totais aproximados de tributos por esfera — Lei 12.741/2012 (Transparência Fiscal). Envie percentuais OU valores em R$, nunca ambos. Exclusivo para SNNFSE. |
| ↳ percentualTributacaoFederal | number | não | Opção A (percentual): tributos federais aproximados em %. |
| ↳ percentualTributacaoEstadual | number | não | Opção A (percentual): tributos estaduais aproximados em %. |
| ↳ percentualTributacaoMunicipal | number | não | Opção A (percentual): tributos municipais (ISS) aproximados em %. |
| ↳ valorTributacaoFederal | number | não | Opção B (valor R$): tributos federais em reais. |
| ↳ valorTributacaoEstadual | number | não | Opção B (valor R$): tributos estaduais em reais. |
| ↳ valorTributacaoMunicipal | number | não | Opção B (valor R$): tributos municipais (ISS) em reais. |
| valores.pisCofins | object | não | Override de tributação federal PIS/COFINS por nota. Exclusivo para SNNFSE (ignorado para MEI e Simples Nacional). |
| ↳ cst | string | não | CST PIS/COFINS (2 dígitos). Ex: "01", "07". |
| ↳ baseCalculo | number | não | Base de cálculo em R$. Padrão: total do serviço. |
| ↳ aliquotaPis | number | não | Alíquota PIS em % (ex: 0.65). |
| ↳ aliquotaCofins | number | não | Alíquota COFINS em % (ex: 3.00). |
| ↳ valorPis | number | não | Override do valor do PIS em R$. |
| ↳ valorCofins | number | não | Override do valor do COFINS em R$. |
| ↳ tipoRetencao | number | não | Tipo de retenção: 0=Não Retidos, 1=PIS/COFINS Retidos, 3=Todos Retidos. |
| valores.retencaoIrrf | number | não | Valor retenção IRRF em R$. |
| valores.retencaoCp | number | não | Valor retenção Contribuição Previdenciária (INSS) em R$. |
| valores.retencaoCsll | number | não | Valor retenção CSLL em R$. |
Atividades de Eventos (opcional)
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| servico.evento | object | não | Informações do evento associado à prestação de serviços (item 12 da LC 116). |
| servico.evento.nome | string | sim | Nome ou descrição do evento (ex: "Show de Música Ao Vivo"). |
| servico.evento.dataInicio | string | sim | Data de início do evento no formato YYYY-MM-DD. |
| servico.evento.dataFim | string | sim | Data de término do evento no formato YYYY-MM-DD. |
| servico.evento.id | string | não | Identificador ú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
cstPisCofinse alíquotas configurados em Settings, o bloco<tribFed>é gerado automaticamente — sem precisar enviar na API. - Campos
retencaoIrrf,retencaoCperetencaoCsllsão inseridos no XML apenas quando informados (valores em R$).
/cancelar🔑 x-api-keySolicita o cancelamento assíncrono de uma NFS-e já emitida (status issued).
Body (JSON)
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| invoiceId | string | sim | ID da nota a cancelar |
| motivo | string | não | Motivo do cancelamento (texto livre, max 255 chars) |
Status & Polling
/invoices/{id}/status🔑 x-api-keyRetorna o status atual de uma NFS-e individual.
Resposta
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| status | string | não | queued | processing | issued | error | cancelled |
| chNFSe | string | não | Chave/código de verificação da NFS-e (disponível quando status=issued) |
| numeroNfe | string | não | Número da NFS-e (disponível quando status=issued) |
| emittedAt | string (ISO 8601) | não | Timestamp de emissão (disponível quando status=issued) |
| ambiente | string | não | "producao" ou "homologacao" (disponível quando status=issued) |
| pdfUrl | string (URL) | não | URL pública CDN do PDF (disponível quando documentsCached=true). Acesso direto, sem autenticação. |
| xmlUrl | string (URL) | não | URL pública CDN do XML (disponível quando documentsCached=true). Acesso direto, sem autenticação. |
| documentsCached | boolean | não | true quando XML e PDF foram armazenados no CDN. URLs disponíveis em pdfUrl e xmlUrl. |
| errorCode | string | não | Código do erro (disponível quando status=error) |
| errorMessage | string | não | Mensagem de erro legível (disponível quando status=error) |
| errors | array | não | Array detalhado de erros da SEFAZ [{Codigo, Descricao, Complemento}] (disponível quando status=error) |
| cancelledAt | string (ISO 8601) | não | Timestamp do cancelamento (disponível quando status=cancelled) |
| cancelXmlUrl | string (URL) | não | URL pública CDN do XML de cancelamento (disponível quando status=cancelled e documentsCached=true) |
Documentos da NFS-e
/invoices/{id}/xml🔑 x-api-keyRetorna o XML da NFS-e. Sem parâmetros, retorna o XML de emissão. Com ?type=cancel, retorna o XML de cancelamento.
Query Parameters
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| type | string | não | Tipo de XML: "emission" (default) ou "cancel". O tipo "cancel" retorna o XML de cancelamento — disponível apenas para notas com status cancelled. |
Comportamento
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| Cache R2 (302) | redirect | não | Quando cacheado no CDN, redireciona para URL pública (cache immutable). |
| Fallback (200) | application/xml | não | Quando não cacheado, retorna o XML do banco com Content-Type application/xml. |
Erros
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| 409 | Conflict | não | Invoice ainda não emitida (status ≠ issued ou cancelled) |
| 409 | Conflict | não | ?type=cancel: nota não está cancelada |
| 404 | Not Found | não | XML não disponível para esta nota |
/invoices/{id}/pdf🔑 x-api-keyRetorna 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
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| Cache R2 (302) | redirect | não | Quando documentsCached=true, redireciona para URL pública CDN (cache immutable). |
| SNNFSE federal | 200 PDF | não | Geração local do DANFSe v2.0 a partir do XML da nota (substitui o ADN Federal descontinuado). |
| Pronim (Cidade360) | 200 PDF | não | Fallback: consulta portal Cidade360 e retorna PDF inline. |
| São Paulo (SP) | 302 redirect | não | Fallback: redireciona para o portal da Prefeitura SP. |
| WebISS | 200 PDF / 302 | não | Fallback: GET no portal WebISS (público ou mTLS). |
Erros
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| 409 | Conflict | não | Invoice ainda não emitida (status ≠ issued) |
| 422 | Unprocessable | não | Dados insuficientes: certificado A1 ausente, chave de acesso inválida |
| 501 | Not Implemented | não | Sistema municipal não suporta download de PDF (DSF, Centi) |
| 502 | Bad Gateway | não | Portal externo retornou erro |
Lote (Batch)
/emitir/batch🔑 x-api-keyEmite múltiplas NFS-e de forma assíncrona. Retorna batchId para acompanhamento.
Body (JSON)
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| items | array | sim | Array de objetos com o mesmo formato do POST /emitir |
/invoices/batch/{batchId}/status🔑 x-api-keyRetorna o progresso de um lote: total, processados, emitidos, erros.
Resposta
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| batchId | string | não | ID do lote |
| status | string | não | processing | completed | partial | failed |
| total | number | não | Total de itens no lote |
| processed | number | não | Itens já processados |
| issued | number | não | Itens emitidos com sucesso |
| errors | number | não | Itens com erro |
| items[].invoiceId | string | não | ID da invoice |
| items[].status | string | não | Status individual do item |
| items[].pdfUrl | string (URL) | não | URL para download do PDF (disponível quando status=issued) |
| items[].chNFSe | string | não | Chave/código de verificação (disponível quando status=issued) |
| items[].errorCode | string | não | Código do erro (disponível quando status=error) |
Endpoints de Webhook
/webhooks/endpoints🔑 x-api-keyCadastra um novo endpoint de webhook para a organização/projeto.
Body (JSON)
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| url | string | sim | URL HTTPS que receberá o POST |
| events | string[] | sim | Ex: ["nfse.issued", "nfse.error", "nfse.cancelled", "nfse.documents_ready", "batch.completed"] |
| secret | string | não | Secret para assinatura HMAC-SHA256 via X-Notaas-Signature (opcional) |
/webhooks/endpoints🔑 x-api-keyLista todos os endpoints de webhook configurados.
/webhooks/endpoints/{id}🔑 x-api-keyAtualiza URL, eventos, status ativo/inativo ou secret de um endpoint. Envie secret: null ou secret: '' para remover a assinatura.
/webhooks/endpoints/{id}🔑 x-api-keyRemove um endpoint de webhook.
/webhooks/endpoints/{id}/test🔑 x-api-keyEnvia um payload de teste para validar a configuração do endpoint.
/webhooks/deliveries🔑 x-api-keyLista o histórico de entregas de webhook com status e tentativas.
Eventos Suportados
Eventos
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| nfse.issued | event | não | NFS-e emitida com sucesso. Payload inclui número da nota e código de verificação. |
| nfse.error | event | não | Falha na emissão. Payload inclui código e mensagem de erro. |
| nfse.cancelled | event | não | NFS-e cancelada com sucesso. Payload inclui invoiceId, numeroNfse e cancelledAt. |
| nfse.documents_ready | event | não | Documentos cacheados no CDN. Payload inclui xmlUrl, pdfUrl, cancelXmlUrl (para notas canceladas) e documentStatus. |
| batch.completed | event | não | Todos 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).