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.

Body (JSON)

CampoTipoReq?Descrição
tomador.cnpjstringsimCNPJ do tomador (14 dígitos, sem formatação). Obrigatório pelo XSD — use CNPJ ou CPF.
tomador.cpfstringnãoCPF do tomador (11 dígitos). Alternativo ao CNPJ.
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 — resolvido para código IBGE automaticamente. Obrigatório se endereco for informado.
tomador.endereco.ufstringnãoSigla do estado (ex: "SP"). Obrigatório se endereco for informado.
tomador.endereco.cepstringnãoCEP do tomador (apenas dígitos). Recomendado — XSD exige CEP no endereço nacional.
servico.descricaostringsimDescrição do serviço prestado
servico.codigostringnãocTribNac LC 116/2003 — 6 dígitos numéricos (ex: "010700"). Opcional: usa o Código de Tributação padrão do projeto se omitido. ❌ "1.07" → ✅ "010700". Não aplicável para São Paulo. Códigos do Item 99 (ex: "990101" — sem incidência de ISSQN/ICMS): informar aliquotaIss: 0.
servico.codigoServicostringnãoCódigo de serviço SP (4–5 dígitos, ex: "07498"). Opcional para projetos em SP — usa padrão do projeto se omitido.
servico.localPrestacaostringnãoCódigo IBGE 7 dígitos do local de prestação. Opcional — padrão: município do projeto.
valores.totalnumbersimValor bruto do serviço em reais (ex: 1500.00)
valores.aliquotaIssnumbersimAlíquota ISS em % (ex: 2.0 para 2%). Para serviços sem incidência de ISSQN/ICMS (cTribNac do Item 99, ex: "990101"), informar 0.
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)
{
  "queued": true,
  "invoiceId": "inv_abc123",
  "status": "queued",
  "pollUrl": "/api/v1/invoices/inv_abc123/status"
}
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 para download do PDF da NFS-e (disponível quando status=issued)
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)

PDF da NFS-e

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

Retorna o PDF (DANFSE) da NFS-e emitida. Disponível apenas quando status=issued.

Comportamento por sistema

CampoTipoReq?Descrição
SNNFSE federal200 PDFnãoProxy mTLS → ADN Federal (adn.nfse.gov.br) → PDF inline. Requer certificado A1 ativo no projeto.
Pronim (Cidade360)200 PDFnãoConsulta portal Cidade360 e retorna PDF inline.
São Paulo (SP)302 redirectnãoRedireciona para o portal da Prefeitura SP com CCM, número e código de verificação.

Erros

CampoTipoReq?Descrição
409ConflictnãoInvoice ainda não emitida (status ≠ issued)
422UnprocessablenãoDados insuficientes: certificado A1 ausente, chave de acesso inválida ou dados Pronim incompletos
501Not ImplementednãoSistema municipal não suporta download de PDF via API neste momento
502Bad GatewaynãoPortal externo (ADN ou portal municipal) 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", "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 ou status ativo/inativo de um endpoint.

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.