> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invo.work/llms.txt
> Use this file to discover all available pages before exploring further.

# Novidades

> Mudanças na API da Invo que afetam as integrações.

<Update label="Outubro de 2026" description="Webhooks" tags={["Webhooks"]}>
  ## Tipo do evento no payload

  * Todo payload de webhook ganha o campo `evento`, com o tipo do evento, como `nfe_autorizada` ou `nfe_cancelamento_rejeitado`. Veja [Campos comuns](/webhooks#campos-comuns).
  * Antes, o consumidor só tinha a `situacao`. Ela não separa todos os eventos: `nfe_autorizada` e `nfe_cancelamento_rejeitado` chegam com `"situacao": "autorizada"`.
  * O POST de teste do botão Validar já usava a mesma chave, com `"evento": "webhook_teste"`.

  Se a sua integração recusa campos desconhecidos no payload, ajuste-a para aceitar `evento`.
</Update>

<Update label="Outubro de 2026" description="API NF-e e API NFS-e" tags={["NF-e", "NFS-e"]}>
  ## Erro de tamanho em logradouro e bairro

  * O schema de `POST /notas` passa a declarar o limite de 2 a 60 caracteres para `logradouro` e `bairro`. Na NF-e, os campos ficam em `destinatario.endereco`. Na NFS-e, em `tomador.endereco`.
  * Um valor fora do limite retorna `422` com `"error": "invalid_params"` e o campo em `params`. Antes, o `422` trazia a mensagem do cadastro, como `Logradouro é muito curto (mínimo: 2 caracteres)`. Veja [Erros](/erros).
  * O limite em si não mudou. Ele vale desde julho de 2026.

  Se a sua integração lê o texto de `error` nesse caso, ajuste-a para o formato `invalid_params`.
</Update>

<Update label="Setembro de 2026" description="API NF-e" tags={["NF-e"]}>
  ## Intermediador na NF-e

  * `POST /notas` aceita o campo opcional `intermediador`, com `cnpj` e `identificador_cadastro`. Use o campo quando a venda passa por um intermediador, como um marketplace. Veja a seção [Venda em marketplace](/pagamentos#venda-em-marketplace).
  * Com `intermediador`, o `indicador_presenca` é obrigatório.
  * As respostas de `POST /notas`, `GET /notas` e `GET /notas/{id}` passam a trazer `intermediador`. Uma nota sem intermediador retorna `"intermediador": null`.
  * Sem `intermediador`, o XML enviado à SEFAZ não muda.

  Se a sua integração recusa campos desconhecidos no JSON de resposta, ajuste-a para aceitar `intermediador`.
</Update>

<Update label="Setembro de 2026" description="API NF-e" tags={["NF-e"]}>
  ## Grupo de pagamento na NF-e

  * `POST /notas` aceita os campos `pagamentos` e `troco`. Os dois são opcionais. Veja o [guia de pagamentos](/pagamentos).
  * As respostas de `POST /notas`, `GET /notas` e `GET /notas/{id}` passam a trazer `pagamentos` e `troco`. Uma nota sem pagamento retorna `"pagamentos": []` e `"troco": "0.0"`.
  * Sem `pagamentos`, a nota continua saindo como sem pagamento (`tPag=90`). O XML enviado à SEFAZ não muda.

  Se a sua integração recusa campos desconhecidos no JSON de resposta, ajuste-a para aceitar `pagamentos` e `troco`.
</Update>

<Update label="Julho de 2026" description="API NF-e e API NFS-e" tags={["NF-e", "NFS-e"]}>
  ## Código externo por ambiente e limite de endereço

  * O `codigo_externo` passa a ser único por empresa e por ambiente. Um código usado em produção pode ser usado também em sandbox. Veja [Sandbox](/sandbox#isolamento-de-dados).
  * `logradouro` e `bairro` do endereço do destinatário ou do tomador passam a aceitar de 2 a 60 caracteres. É o limite do layout da NF-e. Um valor fora do limite retorna `422`.
</Update>

<Update label="Junho de 2026" description="Webhooks" tags={["Webhooks"]}>
  ## Webhooks por conta

  * O endpoint de webhook passa a ser da conta, um por ambiente. Ele recebe os eventos de todas as empresas da conta.
  * Os payloads ganham o campo `empresa_cnpj`, com o CNPJ da empresa emitente só com dígitos. Use esse campo para separar os eventos por empresa.
  * Os endpoints que já existiam mantêm a mesma `chave_seguranca`. A verificação da assinatura não muda.
  * Só um administrador da conta configura o webhook.
  * Uma entrega que falha com `5xx`, timeout ou erro de rede ganha novas tentativas automáticas. Veja [Novas tentativas](/webhooks#novas-tentativas).

  Se a sua integração recusa campos desconhecidos no payload, ajuste-a para aceitar `empresa_cnpj`.
</Update>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.