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
tomadorobjectnãoDados do tomador do serviço. Opcional para emissões B2C / consumidor final (Tomador Não Identificado) em 43 das 45 engines (exceto barueri e atendenet). Quando omitido ou enviado como {}, o bloco do tomador (<toma> / <Tomador> / <TomadorServico>) é omitido do XML.
tomador.cnpjstringnãoCNPJ do tomador (14 posições: numérico tradicional \d{14} ou alfanumérico [0-9A-Z]{12}\d{2} conforme IN RFB nº 2.229/2024 e NT-009 SNNFSE, com ou sem máscara SS.SSS.SSS/SSSS-DD). Suportado no Ambiente Nacional (snnfse); provedores municipais legados cujos XSDs exigem \d{14} retornam HTTP 400 (CNPJ_ALFANUMERICO_NAO_SUPORTADO). Exclusivo entre cnpj, cpf, nif e motivoAusenciaNif.
tomador.cpfstringnãoCPF do tomador (11 dígitos, sem formatação). Exclusivo entre cnpj, cpf, nif e motivoAusenciaNif.
tomador.nifstringnãoNIF (Número de Identificação Fiscal, 1 a 40 caracteres) do tomador estrangeiro. Suportado nas 9 engines DPS Nacional (snnfse, pronim_snnfse, el_nacional, issnet_nacional, tiplan, infisc, coplan, betha, tbw) e nas 5 engines municipais com <NifTomador> / NIF posicional (el, dbseller, gissonline, campogrande, barueri).
tomador.motivoAusenciaNifnumber (0 | 1 | 2)nãoMotivo para ausência do NIF em tomador estrangeiro sem NIF (exclusivo das 9 engines DPS Nacional): 0 = Não informado na nota de origem; 1 = Dispensado do NIF; 2 = Não exigência do NIF.
tomador.nomestringnãoNome ou razão social do tomador (alias aceito: tomador.razaoSocial). Obrigatório quando o tomador é identificado (com cnpj, cpf, nif ou motivoAusenciaNif). Se enviado sem documento fiscal, retorna HTTP 400 (Tomador parcial inválido).
tomador.emailstringnãoE-mail do tomador para envio da nota (exige tomador identificado).
tomador.telefonestringnãoTelefone do tomador — apenas dígitos (exige tomador identificado).
tomador.endereco.logradourostringnãoLogradouro do tomador (exige tomador identificado).
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 onde o serviço foi prestado (ex: "3205200"). Em prestação transfronteiriça (modo 1), informe o município onde foi executado e defina o país de destino em valores.exportacao.paisResultado. A Notaas resolve o município de incidência legal (cLocIncid) automaticamente conforme a LC 116/2003.
servico.nbsstringnãoCódigo NBS — Nomenclatura Brasileira de Serviços (9 dígitos numéricos). Obrigatório em municípios com engine TBW/SIL e Betha. Nas engines São Paulo (sp_prefeitura Layout v2), DBSeller, GINFES, GISSOnline e Betha, define o enquadramento IBS/CBS junto com valores.ibscbs (ou é resolvido automaticamente pelo Anexo VIII quando unívoco).
servico.ncmstringnãoCódigo NCM — Nomenclatura Comum do Mercosul (8 dígitos numéricos, ex: "49019900"). Opcional; utilizado no Layout v2 de São Paulo (tag <NCM>) para operações com bens móveis (locação/cessão). Alias: codigoNcm.
servico.codigoTributacaoMunicipalstringnãoCódigo de tributação municipal (desdobro) — 3 dígitos numéricos (ex: "001"). Opcional.
servico.caepfstring | nullnãoCAEPF (Cadastro de Atividade Econômica da Pessoa Física — 14 dígitos numéricos ou máscara XXX.XXX.XXX/XXX-XX) do prestador PF para a tag <CAEPF> da DPS Nacional (SNNFSE). Opcional e exclusivo para projetos com CPF (11 dígitos); rejeitado com HTTP 400 em projetos CNPJ. Se omitido, herda o caepf cadastrado no projeto; envie null ou "" para suprimir o <CAEPF> pontualmente na nota. Aliases aceitos: prestador.caepf, caepf.
valores.totalnumbersimValor bruto do serviço em reais (ex: 1500.00).
valores.descontoIncondicionadonumbernãoDesconto incondicionado em R$ (ex: 150.00). Deduz da base de cálculo do ISS e do valor líquido. Utilizado também em Curitiba (Portaria SMF nº 43/2025) para dedução de repasses de agências de turismo (09.02) e publicidade (17.06). Aliases: vDescIncond, desconto.
valores.descontoCondicionadonumbernãoDesconto condicionado em R$ (ex: 50.00). Condicionado a evento futuro (ex: pontualidade no pagamento); não altera a base do ISS nem o valor líquido padrão. Alias: vDescCond.
valores.aliquotaIssnumbersimAlíquota ISS em % (ex: 2.0 para 2%). Informar 0 para imunidade ou exportação.
valores.issRetidobooleannãoISSQN retido pelo tomador de serviço (true = tpRetISSQN 2 / retido pelo tomador; false = tpRetISSQN 1 / não retido). Padrão: false.
valores.tribISSQNnumbernãoForma de tributação do ISSQN: 1-Tributável, 2-Imunidade, 3-Exportação, 4-Não Incidência. Opcional: para exportação de serviços, é derivado automaticamente como 3 quando o grupo valores.exportacao for informado.
valores.tipoImunidadenumbernãoTipo de Imunidade do ISSQN (obrigatório somente quando valores.tribISSQN = 2): 0-Imunidade geral (tipo não informado na nota de origem), 1-Patrimônio/renda/serviços recíprocos (CF88 Art. 150 VI a), 2-Templos de qualquer culto (CF88 Art. 150 VI b), 3-Partidos políticos, sindicatos, instituições de educação e assistência social sem fins lucrativos (CF88 Art. 150 VI c), 4-Livros, jornais, periódicos e papel de impressão (CF88 Art. 150 VI d), 5-Fonogramas e videofonogramas musicais brasileiros (CF88 Art. 150 VI e). Alias técnico: valores.tpImunidade.
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).

Deduções e Reduções de Base de Cálculo (opcional)

CampoTipoReq?Descrição
valores.deducoesobjectnãoDeduções/reduções da base de cálculo do ISS (convertido automaticamente para <vDedRed> ou <vAjusteBC> conforme a Nota Técnica SE/CGNFS-e nº 009 v1.01). Exclusivo do padrão nacional (SNNFSE, Pronim-SNNFSE e ISSNet Nacional) — nas demais engines a API responde HTTP 400. Informe exatamente UM dos três modos abaixo (percentual, valor ou documentos).
↳ percentualnumbernãoModo 1 — percentual padrão de dedução sobre o valor do serviço (pDR / pAjusteBCISSQN). De 0 a 100, até 2 casas decimais (ex: 30 ou 12.50).
↳ valornumbernãoModo 2 — valor monetário direto a deduzir, em R$ (vDR / vAjusteBCISSQN). Até 2 casas decimais; não pode superar valores.total.
↳ documentosarraynãoModo 3 — documentos comprobatórios da dedução (docDedRed / docAjusteBC). De 1 a 1000 itens; o total deduzido é a soma de valorDeducao.
↳ chaveNFSe | chaveNFe | nfseMunicipal | nfNfs | numeroDocFiscal | numeroDocNaoFiscalstring | objectsimIdentificador do documento — informe exatamente UM. chaveNFSe: 50 posições (no SNNFSE com leiaute NT-009 aceita TSChaveNFSe alfanumérica [0-9]{6}[0-9A-Z]{14}[0-9]{30}; no leiaute NT-004 exige [0-9]{50}); chaveNFe: 44 posições (numérica ou com CNPJ alfanumérico nas posições 7 a 20 no SNNFSE); nfseMunicipal: { codigoMunicipio (IBGE 7 díg.), numero (15 díg.), codigoVerificacao (1–9 caract.) }; nfNfs: { numero (7 díg.), modelo (15 díg.), serie (1–15 caract.) }; numeroDocFiscal / numeroDocNaoFiscal: 1–255 caracteres (use numeroDocNaoFiscal para recibo ou contrato de parceria).
↳ tiponumbersimTipo da dedução (tpDedRed): 1, 2, 3, 4, 5, 6, 7, 8, 9 ou 99. Veja a tabela de tipos abaixo (no leiaute SNNFSE NT-009 v1.01, apenas os tipos 2, 5, 6, 7, 8, 9 e 99 são aceitos para dedução de ISSQN).
↳ descricaoOutrasDeducoesstringnãoDescrição da dedução (1–150 caracteres). Obrigatória quando tipo=99; proibida nos demais tipos.
↳ dataEmissaostringsimData de emissão do documento, YYYY-MM-DD. Não pode ser futura.
↳ valorDedutivelnumbersimValor total dedutível/redutível do documento (R$ — vDedutivelRedutivel / vTotDoc).
↳ valorDeducaonumbersimValor efetivamente deduzido nesta NFS-e (R$ — vDeducaoReducao / vAjusteAplic). Deve ser ≤ valorDedutivel.
↳ fornecedorobjectnãoFornecedor/parceiro do documento (opcional). Informe exatamente UM identificador entre cnpj (14 posições: numérico ou alfanumérico [0-9A-Z]{12}\d{2} no SNNFSE), cpf (11 dígitos), nif ou cNaoNIF (0, 1 ou 2).
↳ cnpj | cpfstringnãoCNPJ (14 posições, numérico ou alfanumérico no SNNFSE) ou CPF (11 dígitos) do fornecedor/profissional parceiro.
↳ nomestringsimNome ou razão social do fornecedor/parceiro (1–300 caracteres). Obrigatório quando fornecedor é informado.
↳ inscricaoMunicipalstringnãoInscrição municipal do fornecedor (opcional).

Tipos de dedução (tipo / tpDedRed)

CampoTipoReq?Descrição
1tiponãoAlimentação e bebidas/frigobar (leiaute pré-NT-009; descontinuado no XSD NT-009 v1.01 do SNNFSE)
2tiponãoMateriais
3tiponãoProdução externa (leiaute pré-NT-009; descontinuado no XSD NT-009 v1.01 do SNNFSE)
4tiponãoReembolso de despesas (leiaute pré-NT-009; descontinuado para ISSQN no XSD NT-009 v1.01 do SNNFSE)
5tiponãoRepasse consorciado
6tiponãoRepasse plano de saúde
7tiponãoServiços
8tiponãoSubempreitada de mão de obra
9tiponãoProfissional parceiro — Salão Parceiro (Lei 13.352/2016). Use para a parcela do valor repassada ao profissional parceiro (cabeleireiro, barbeiro, manicure, esteticista etc.). Informe o fornecedor com CPF/CNPJ e nome do parceiro.
99tiponãoOutras deduções de ISSQN — exige descricaoOutrasDeducoes.

🧮 Cálculo do ISS com deduções

  • Base de cálculo = valores.total (vServ) − deduções (vDedRed / vAjusteBC). No modo percentual: total × percentual / 100; no modo documentos: soma de valorDeducao.
  • O ISS estimado e o ISS retido do valor líquido usam essa base. Deduções não são desconto: o valor do serviço (vServ) enviado no DPS continua sendo o valor total.
  • A base de cálculo oficial é apurada pela SEFIN/ADN a partir do DPS; a plataforma envia automaticamente <vDedRed> ou <vAjusteBC> conforme a vigência da NT-009 v1.01 em cada ambiente.
  • Sem valores.deducoes, o comportamento é idêntico ao anterior.

Descontos Incondicionados e Condicionados (opcional)

CampoTipoReq?Descrição
valores.descontoIncondicionadonumbernãoValor do desconto incondicionado em R$. Reduz diretamente a base de cálculo do ISS e o valor líquido da nota fiscal. Homologado para DPS Nacional (SNNFSE, Pronim-SNNFSE, ISSNet Nacional, Betha). Aliases: vDescIncond, desconto.
valores.descontoCondicionadonumbernãoValor do desconto condicionado em R$. Não altera a base de cálculo do ISS nem o valor líquido (exige evento futuro, como pontualidade de pagamento). Homologado para DPS Nacional. Alias: vDescCond.

🏛️ Caso Curitiba/PR — Portaria SMF nº 43/2025 (Agências de Turismo e Publicidade)

  • Em Curitiba (IBGE 4106902), os prestadores de serviços de intermediação turística (subitem 09.02) e publicidade/propaganda (subitem 17.06) devem informar os valores repassados a terceiros/veículos diretamente em valores.descontoIncondicionado (ou vDescIncond).
  • O Emissor Nacional (SNNFSE) abaterá automaticamente essa quantia da base de cálculo do ISS, garantindo que o imposto municipal recaia estritamente sobre a receita de intermediação / remuneração própria da agência.
  • Nas informações complementares (servico.informacoesComplementares), a agência pode especificar a discriminação detalhada dos repasses conforme praxe fiscal.

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.destacarTributosAproximadosbooleannãoOpcional. false declara a opção de NÃO destacar o valor aproximado dos tributos (Decreto Federal 8.264/2014 → <indTotTrib>0</indTotTrib>). Suportado em GISSOnline via endpoint individual /api/v1/emitir (Guarulhos, Suzano, Santo André e demais; emissão em lote não é suportada pelo sistema GISS); para MEI é aceito como no-op (o DPS SNNFSE já declara indTotTrib=0). Não pode ser combinado com totaisTributosAproximados. Nos demais motores/regimes retorna 400. Não habilita percentuais/valores aproximados no GISS nem altera a semântica de totaisTributosAproximados.
valores.pisCofinsobjectnãoConfiguração/override de PIS/COFINS de apuração própria (<piscofins>) e tipo de retenção por nota.
↳ 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 de PIS de apuração própria em % (ex: 0.65 ou 1.65).
↳ aliquotaCofinsnumbernãoAlíquota de COFINS de apuração própria em % (ex: 3.00 ou 7.60).
↳ valorPisnumbernãoValor do débito de apuração própria do PIS em R$ (<vPis>). Atenção: deduz a base de cálculo (vBC) do IBS/CBS. Não preencha com PIS retido na fonte.
↳ valorCofinsnumbernãoValor do débito de apuração própria da COFINS em R$ (<vCofins>). Atenção: deduz a base de cálculo (vBC) do IBS/CBS. Não preencha com COFINS retida na fonte.
↳ tipoRetencaonumbernãoTipo de retenção PIS/COFINS/CSLL (NT-007: 0=Não Retidos, 3=PIS/COFINS/CSLL Retidos, 4=PIS/COFINS Retidos, 5=PIS Retido, 6=COFINS Retido, 7=COFINS/CSLL Retidos, 8=CSLL Retida, 9=PIS/CSLL Retidos).
valores.retencaoIrrfnumbernãoValor de retenção IRRF na fonte em R$ (<vRetIRRF>). Aliases: retencaoIr, ir.
valores.retencaoCpnumbernãoValor de retenção Contribuição Previdenciária (INSS) na fonte em R$ (<vRetCP>). Aliases: retencaoInss, inss.
valores.retencaoCsllnumbernãoValor de retenção CSLL na fonte em R$ (<vRetCSLL>). Alias: csll. Na DPS Nacional (NT-007), quando retencaoPis/retencaoCofins são informados, o motor consolida automaticamente PIS + COFINS + CSLL em <vRetCSLL>.
valores.retencaoPisnumbernãoValor de retenção PIS na fonte em R$. Alias: pis. Na DPS Nacional consolida em <vRetCSLL> sem afetar <vPis> próprio nem a base do IBS/CBS; em motores municipais preenche <ValorPIS>.
valores.retencaoCofinsnumbernãoValor de retenção COFINS na fonte em R$. Alias: cofins. Na DPS Nacional consolida em <vRetCSLL> sem afetar <vCofins> próprio nem a base do IBS/CBS; em motores municipais preenche <ValorCOFINS>.
valores.tipoRetencaoPisCofinsnumbernãoTipo de retenção PIS/COFINS/CSLL (0 a 9 — NT-007). Alias: tpRetPisCofins. Se omitido, é derivado automaticamente das retenções informadas (ex: 3 quando há PIS+COFINS+CSLL).
valores.regimeApuracaoSimplesNacionalnumber (1 | 2 | 3)nãoRegime de apuração dos tributos no Simples Nacional para ME/EPP e Excesso de Sublimite: 1 = Tributos federais e municipal pelo SN (ISS incluído no DAS — padrão); 2 = Tributos federais pelo SN e ISSQN por fora do SN conforme legislação municipal do tributo (destaca alíquota municipal e valor do ISSQN Apurado na NFS-e e no DANFSe); 3 = Tributos federais e municipal por fora do SN. Se omitido, herda a configuração cadastrada no projeto (projects.reg_ap_trib_sn). Aliases: valores.regimeApuracao, valores.regimeApuracaoIss, valores.regApTribSN.
valores.regimeEspecialTributacaonumber (0 | 1 | 2 | 3 | 4 | 5 | 6 | 9)nãoRegime Especial de Tributação (tag <regEspTrib> da DPS Nacional v1.01 — TSRegEspTrib): 0 = Nenhum (padrão); 1 = Ato Cooperado (Cooperativa); 2 = Estimativa; 3 = Microempresa Municipal; 4 = Notário ou Registrador; 5 = Profissional Autônomo; 6 = Sociedade de Profissionais (ISS fixo anual/mensal por profissional, ex: clínicas médicas e escritórios); 9 = Outros. Se omitido, herda a configuração cadastrada no projeto (projects.reg_esp_trib). Aliases: valores.regEspTrib, servico.regimeEspecialTributacao, regEspTrib.

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"). Alias: xNome.
servico.evento.dataIniciostringsimData de início do evento no formato YYYY-MM-DD. Alias: dtIni.
servico.evento.dataFimstringsimData de término do evento no formato YYYY-MM-DD. Alias: dtFim.
servico.evento.idstringnãoIdentificador único do evento (opcional). Alias: idAtvEvt.
servico.evento.enderecoobjectnãoEndereço de realização do evento (cep, logradouro, numero, complemento, bairro, cidade + uf ou pais no exterior). Obrigatório quando servico.evento é informado no Layout v2 de São Paulo (<atvEvento><end>). Alias: end.

Reforma Tributária — IBS / CBS (opcional)

CampoTipoReq?Descrição
valores.ibscbsobjectnãoGrupo IBS/CBS (LC 214/2025). Também aceito como servico.ibscbs. Precedência campo a campo: valores.ibscbs > servico.ibscbs > Configurações do Projeto no Dashboard (seção "Reforma Tributária (IBS / CBS)") > resolução automática pela tabela oficial do Anexo VIII da Receita Federal.
↳ classificacaoTributariastringnãoClassificação tributária (cClassTrib) — 6 dígitos. Ex: "000001" (tributação integral), "200046" (operações com bens imóveis). Alias técnico: cClassTrib.
↳ indicadorOperacaostringnãoIndicador da operação (cIndOp) — 6 dígitos. Ex: "100301" (domicílio do adquirente), "020301" (local do imóvel). Aliases técnicos: cIndOp, indOp.
↳ cststringnãoCST IBS/CBS — 3 dígitos. Ex: "000" (tributação integral), "200" (redução), "410" (imunidade). Alias: cstIbscbs.
↳ nbsstringnãoCódigo NBS — 9 dígitos (ex: "110012100"). Também aceito em servico.nbs. Alias: codigoNbs.
↳ consumidorFinalbooleannãoIndica consumidor final (uso/consumo pessoal). Aceita true/false ou "0"/"1". Alias técnico: indFinal. Padrão: false.
↳ destinatarioPrincipalstringnãoIndica se o destinatário do serviço é diferente do tomador (indDest): "0" (tomador é o destinatário — padrão) ou "1" (destinatário distinto informado em destinatario).
↳ destinatarioobjectnãoIdentificação do destinatário do serviço quando distinto do tomador (destinatarioPrincipal = "1"). Reaproveita a mesma estrutura amigável de tomador: { cnpj | cpf | nif | naoNif, nome, email?, telefone?, endereco?: { logradouro, numero, complemento?, bairro, cep, cidade + uf ou codigoMunicipio, pais? } }. Alias técnico: dest.
↳ tipoOperacaostring | numbernãoTipo de operação (tpOper — Regra E0903): 1 – Fornecimento com pagamento posterior; 2 – Recebimento do pagamento com fornecimento já realizado; 3 – Fornecimento com pagamento já realizado; 4 – Recebimento do pagamento com fornecimento posterior; 5 – Fornecimento e recebimento concomitantes. Obrigatório em compras governamentais (tipoEnteGovernamental informado) ou quando servico.codigo pertencer aos subitens 100501, 100502, 150901, 171201 ou 250501; vedado nos demais casos. Alias técnico: tpOper.
↳ chavesNfseReferenciadasstring[]nãoLista de 1 a 99 chaves de acesso de NFS-e referenciadas (50 posições — grupo <gRefNFSe><refNFSe>: no SNNFSE NT-009 aceita [0-9]{6}[0-9A-Z]{14}[0-9]{30}; no leiaute NT-004 exige [0-9]{50}; na NotaControl aceita [0-9]{9}[A-EGHJ-NPRSTV-Z0-9]{12}[0-9]{29}). Obrigatório quando tipoOperacao = 2 ou 3; vedado quando tipoOperacao = 1, 4, 5 ou omitido. Aliases: nfseReferenciadas, refNFSe.
↳ tipoEnteGovernamentalstring | numbernãoEsfera governamental (tpEnteGov) para compras públicas: 1 – Federal; 2 – Estadual; 3 – Distrital; 4 – Municipal; 9 – Outros (exclusivo ABRASF/GISS; não aceito no SNNFSE nem em SP v2). Aliases: enteGovernamental, tpEnteGov.
↳ percentualRedutornumbernãoPercentual de redução de alíquota em compra governamental (pRedutor — 0 a 99.99). Aliases: redutorCompraGovernamental, pRedutor.
↳ tributacaoRegularobjectnãoTributação regular alternativa (<gTribRegular>): { cst (3 dígitos, alias cstReg/CSTReg), classificacaoTributaria (6 dígitos, alias cClassTribReg/cClassTrib) }. Alias técnico: gTribRegular.
↳ reembolsoRepassearray | objectnãoDocumentos de reembolso, repasse e ressarcimento (<gReeRepRes>). Aceita lista de 1 a 100 itens (ou { documentos: [...] }) reaproveitando o padrão de valores.deducoes.documentos: { chaveNFSe | chaveNFe | chaveCTe | dfeNacional | documentoFiscalOutro | documentoOutro (ou numeroDocNaoFiscal + descricaoDocumento), fornecedor?: { cnpj | cpf | nif | naoNif, nome }, dataEmissao (YYYY-MM-DD), dataCompetencia? (YYYY-MM-DD, padrão = dataEmissao), tipo ("01"|"02"|"03"|"04"|"99" ou 1|2|3|4|99), descricaoTipo? (obrigatório quando tipo=99), valor (R$) }. Aliases: documentosReembolso, gReeRepRes, reeRepRes.
↳ imovelobjectnãoIdentificação do imóvel/obra objeto da operação (grupo <IBSCBS><imovel> na DPS Nacional ou <imovelobra> em São Paulo v2, que também unifica automaticamente servico.obra). Obrigatório quando indicadorOperacao for "020101", "020201" ou "020301". Exige exclusivamente UMA opção entre cib (ou codigoCib), codigoObra (em SP v2) OU endereco.
↳ inscricaoImobiliariaFiscalstringnãoInscrição imobiliária fiscal (IPTU / matrícula fiscal — 1 a 30 caracteres). Opcional. Aliases: inscricaoImobiliaria, inscImobFisc.
↳ codigoMunicipiostringnãoCódigo IBGE de 7 dígitos do município onde se situa o imóvel (ex: "5208707"). Tem precedência sobre cidade + uf. Quando omitido, pode ser resolvido automaticamente enviando cidade + uf em imovel.endereco ou no próprio objeto imovel (em conjunto com cib ou endereco — não substitui a exigência de cib ou endereco). Obrigatório em municípios ISSNet Nacional (Goiânia/GO, Aparecida de Goiânia/GO, Brasília/DF) e no leiaute SNNFSE NT-009. Alias técnico: cMun.
↳ cidade / ufstringnãoAliases amigáveis no topo de imovel (ex: cidade: "Goiânia", uf: "GO") para resolver automaticamente codigoMunicipio (7 dígitos IBGE) quando codigoMunicipio não for informado, especialmente útil quando o imóvel é identificado por cib no leiaute NT-009. Devem ser informados juntos e sempre acompanhados de cib ou endereco.
↳ cibstringnãoCódigo no Cadastro Imobiliário Brasileiro (CIB — exatos 8 caracteres). Alternativo a endereco (XOR). Suportado no SNNFSE, engines DPS Nacional e São Paulo v2; não suportado no ISSNet Nacional (que exige endereco completo). Aliases: codigoCib, cCIB.
↳ enderecoobjectnãoEndereço do imóvel (alternativo a cib — obrigatório no ISSNet Nacional): logradouro, numero, complemento (opcional), bairro, cep (8 dígitos no Brasil; código postal no exterior), codigoMunicipio (7 dígitos IBGE) ou cidade + uf (2 letras, ex: "GO"). Para imóvel no exterior, informe pais (ISO2 de 2 letras, ex: "US", "PT"), cep, cidade e uf (estado/província). Alias técnico: end.

🏙️ São Paulo (Prefeitura — Layout v1 vs Layout v2 IBS/CBS)

  • Em São Paulo (IBGE 3550308), a transição do Layout v1 para o Layout v2 (IBS/CBS — Manual v3.3.5) é 100% automática pela data de competência: a partir de 2026-10 para Regime Normal e 2027-01 para Simples Nacional (MEI continua emitindo via SNNFSE).
  • Para testar ou antecipar voluntariamente o Layout v2 antes de outubro/2026, basta enviar o bloco valores.ibscbs no payload da emissão (ou definir NFSE_SP_SCHEMA_VERSION=2 / NFSE_RTC_FORCE_ENABLED=1 no ambiente). Sem valores.ibscbs em competências anteriores a 2026-10, a plataforma mantém o Layout v1 sem qualquer alteração para os clientes atuais.
  • No Layout v2 de São Paulo, a prefeitura retorna a Chave da Nota Nacional de 50 dígitos (<ChaveNotaNacional>), exposta automaticamente no campo chNFSe do status e do webhook.

Coerência IBS/CBS: a combinação NBS + indicadorOperacao + classificacaoTributaria deve formar uma tupla válida do Anexo VIII da Receita Federal. Se o item da LC 116 tiver mais de um enquadramento possível (ex: 17.12 — administração de imóveis × gestão de negócios) e nem o payload nem o projeto definirem o enquadramento, a API responde HTTP 400 com a lista das combinações válidas — a plataforma nunca "chuta" uma classificação fiscal. Para emitir sem alterar o payload, configure os valores padrão em Dashboard → Configurações → Reforma Tributária (IBS / CBS).

{
  "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",
  "referencia": "NFSE-ALFA-2026-001",
  "status": "queued",
  "pollUrl": "/api/v1/invoices/inv_abc123/status"
}

🔤 CNPJ Alfanumérico (IN RFB nº 2.229/2024 & Nota Técnica SE/CGNFS-e nº 009)

  • Formato Oficial (SS.SSS.SSS/SSSS-DD): aceita 14 posições no formato [0-9A-Z]{12}\d{2} (8 caracteres alfanuméricos na raiz + 4 na ordem do estabelecimento + 2 dígitos verificadores estritamente numéricos calculados via Módulo 11 com conversão ASCII - 48). Pode ser enviado com ou sem máscara e em maiúsculas ou minúsculas (normalizado automaticamente para 14 caracteres maiúsculos sem pontuação).
  • Suporte Completo no Ambiente Nacional (snnfse): habilitado em todos os papéis da DPS Nacional — prestador (project.cnpj e Id="DPS..." de 45 posições), tomador.cnpj, intermediario.cnpj, valores.ibscbs.destinatario.cnpj, fornecedor.cnpj em deduções e reembolso/repasse, chaves de 44 posições alfanuméricas (chaveNFe / chaveCTe), cancelamento (<CNPJAutor> no evento e101101) e impressão formatada no DANFSe.
  • Guardrail Fail-Closed em Provedores Municipais Legados (CNPJ_ALFANUMERICO_NAO_SUPORTADO): sistemas municipais próprios cujos schemas XSD ainda restringem o tipo tsCnpj/TCnpj a 14 dígitos numéricos (\d{14} — incluindo motores ABRASF, sp_prefeitura, ginfes, barueri, atendenet, equiplano, coplan, tiplan, el_nacional, betha, fiorilli, issnet_nacional, infisc e tbw) bloqueiam preventivamente CNPJ alfanumérico com HTTP 400 na entrada da API (e NonRetryableError nos workers), evitando falhas de schema no webservice municipal.

🛒 Tomador Não Identificado (Consumidor Final / B2C) & Tomador no Exterior

  • Emissão B2C sem tomador: omita o objeto tomador (ou envie "tomador": {}) para emitir NFS-e a consumidor final não identificado. Suportado em 43 das 45 engines — todas exceto barueri (que exige tomador identificado com cpf, cnpj ou tomador.nif explícito) e atendenet (que exige tomador identificado com cpf ou cnpj brasileiro).
  • Proibição de tomador parcial (Fail-Closed HTTP 400): enviar apenas tomador.nome, tomador.email, tomador.telefone ou tomador.endereco sem um documento fiscal (cpf, cnpj, nif ou motivoAusenciaNif), ou enviar documento sem nome/razaoSocial, retorna HTTP 400.
  • Operações que exigem tomador identificado (HTTP 400 se omitido):1. Retenção de ISSQN (valores.issRetido: true);
    2. Exportação de serviços (valores.tribISSQN: 3 ou grupo valores.exportacao);
    3. Cessão de mão de obra tributável (servico.codigo: "170501" — regra RN_170501_TOMADOR_OBRIGATORIO);
    4. Sistemas municipais barueri (posicional PMB004 V4.4) e atendenet (IPM SOAP/REST).
  • Suporte a Tomador Estrangeiro por Engine:• DPS Nacional (nif ou motivoAusenciaNif: 0 | 1 | 2): snnfse, pronim_snnfse, el_nacional, issnet_nacional, tiplan, infisc, coplan, betha e tbw.
    • ABRASF / Posicional com NIF (exige tomador.nif explícito; não possui motivoAusenciaNif): el, dbseller, gissonline, campogrande e barueri.
    • Demais 31 engines municipais: quando o tomador é identificado, o XSD municipal exige cpf ou cnpj brasileiro (rejeita tomador estrangeiro sem CPF/CNPJ com HTTP 400).

👤 Prestador Pessoa Física (CPF e CAEPF) — NFS-e Nacional (SNNFSE)

  • Identificação automática na DPS: quando o projeto é cadastrado com CPF (11 dígitos) e certificado e-CPF A1, o motor gera automaticamente tpInscr = 1 com CPF preenchido com zeros à esquerda para 14 posições no Id da DPS (DPS...1000<CPF>...) e emite <prest><CPF>...</CPF></prest>.
  • CAEPF opcional (TSCAEPF): o CAEPF de 14 dígitos pode ser configurado uma única vez no projeto (Org API) ou enviado/sobrescrito por nota em servico.caepf (aliases: prestador.caepf, caepf). Para omitir pontualmente o CAEPF do projeto em uma emissão específica, envie servico.caepf: null.
  • DANFSe e Cancelamento: quando presente no XML, o CAEPF é impresso formatado (XXX.XXX.XXX/XXX-XX) no quadro do Prestador do DANFSe; no cancelamento (POST /cancelar), o evento e101101 utiliza automaticamente <CPFAutor>.

💰 Tributação Federal e Retenções na Fonte (PIS/COFINS/CSLL/IRRF/INSS — NT-007)

  • Retenção na Fonte vs. Débito de Apuração Própria: informe retenções na fonte nos campos de valores (retencaoIrrf/ir, retencaoPis/pis, retencaoCofins/cofins, retencaoCsll/csll, retencaoCp/inss). Na DPS Nacional (NT-007), o motor consolida automaticamente pis + cofins + csll em <vRetCSLL> com <tpRetPisCofins> derivado (3..9), reduzindo o vLiq sem preencher <vPis>/<vCofins> próprios e sem reduzir a base de cálculo (vBC) do IBS/CBS.
  • Quando usar valores.pisCofins: se não houver débito próprio na nota, omita valorPis e valorCofins (ex.: "pisCofins": { "cst": "01", "baseCalculo": 18000, "tipoRetencao": 3 } ou apenas envie ir, pis, cofins e csll na raiz de valores). Preencha pisCofins.valorPis / valorCofins exclusivamente quando desejar destacar débito de apuração própria do prestador.
  • Prioridade de valores: API request (override) → Configuração do projeto (Settings) → Derivado do regime.

🏛️ Regras Fiscais de Incidência do ISSQN & Retenção (LC 116/2003)

  • Resolução Automática do Município de Incidência: Você não precisa calcular ou informar a cidade de incidência do imposto. A plataforma Notaas determina a incidência legal automaticamente pelo código de tributação nacional (cTribNac) e Anexo I da NFS-e — cobrindo a regra geral do prestador (277 subitens) e as exceções no local da prestação (58 subitens).
  • Local da Prestação (servico.localPrestacao): Informe o código IBGE apenas quando o serviço for executado fisicamente em outro município. O motor Notaas faz a correta separação entre a localização física e o município credor do tributo.
  • Retenção pelo Tomador (valores.issRetido): Informe issRetido: true quando o imposto for recolhido pelo tomador de serviço (tpRetISSQN = 2). A retenção é mantida de forma independente do município credor. Operações imunes, isentas ou de exportação não admitem retenção.
POST/cancelar🔑 x-api-key

Solicita o cancelamento assíncrono de uma NFS-e já emitida (status issued). No Padrão Nacional (SNNFSE), o Pedido de Registro de Evento (e101101) identifica automaticamente o autor com <CNPJAutor> (14 posições — numérico \d{14} ou alfanumérico [0-9A-Z]{12}\d{2}) ou <CPFAutor> (11 dígitos) conforme o documento do projeto.

Body (JSON)

CampoTipoReq?Descrição
invoiceIdstringsimID da nota a cancelar
motivostringnãoJustificativa do cancelamento (15 a 255 chars). Opcional. Aliases aceitos: justificativa, xMotivo.
codigoMotivonumbernãoCódigo do motivo do cancelamento (opcional. Padrão Nacional SNNFSE: 1=Erro na emissão [padrão], 2=Serviço não prestado, 9=Outros. ISSNet Nacional Goiânia: padrão 2. ABRASF: 1 a 5 [padrão 1]. Tiplan: 1, 2, 3, 9). Aliases aceitos: cMotivo.
{
  "invoiceId": "inv_alfa001",
  "codigoMotivo": 1,
  "motivo": "Erro no preenchimento dos dados do serviço na emissão original"
}

Status & Polling

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

Retorna o status atual de uma NFS-e individual. Inclui o campo referencia informado na emissão para conciliação automática com sua fatura interna.

Resposta

CampoTipoReq?Descrição
invoiceIdstringnãoID único da nota gerado pela Notaas
referenciastringnãoIdentificador externo enviado pelo seu sistema no POST /emitir (presente quando informado)
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.
cancelOutcomestringnão"pending_analysis" | "rejected" | "approved" (presente quando houve tentativa de cancelamento em nota issued ou quando status=cancelled)
cod_rejeicao / errorCodestringnãoCódigo do erro ou da situação do cancelamento (disponível quando status=error ou em tentativa de cancelamento pendente/recusada)
msg_rejeicao / errorMessagestringnãoMensagem detalhada do erro ou da análise fiscal de cancelamento
rejection_errors / errorsarraynãoArray detalhado de mensagens da prefeitura/SEFAZ [{Codigo, Descricao, Complemento}]
cancelRequestedAtstring (ISO 8601)nãoData/hora do pedido de cancelamento (quando houve solicitação de cancelamento registrada)
cancelDecisionAtstring (ISO 8601)nãoData/hora do deferimento (e105104) ou indeferimento (e105105) do cancelamento, quando aplicável
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)
{
  "invoiceId": "inv_abc123",
  "referencia": "OS-2026-001",
  "status": "issued",
  "chNFSe": "35260100000000000000000000000000000000000000",
  "numeroNfe": "1234",
  "emittedAt": "2026-10-07T11:00:00.000Z",
  "ambiente": "producao",
  "documentsCached": true,
  "pdfUrl": "https://documents.notaas.com.br/pdf/inv_abc123.pdf",
  "xmlUrl": "https://documents.notaas.com.br/xml/inv_abc123.xml"
}

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).