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

# Changelog

> O que mudou na superfície pública da engineAPI, release a release.

## 2026-08-05: CSOSN do Simples Nacional recusa antes da SEFAZ, por regime e documento

**`csosn` fora do que o motor emite corretamente agora recusa com `422
CSOSN_NAO_SUPORTADO`, antes de qualquer chamada à SEFAZ.** O conjunto que
emite hoje é `102`, `103`, `300` e `400` (Simples), com domínio mais estreito
para MEI. A tabela completa está em [Erros e
Rejeições](/guides/errors#catlogo-de-cdigos-de-negcio) e em [Cobertura
Fiscal](/cobertura#cst-e-csosn).

<Warning>
  **Duas mudanças de comportamento conscientes, se você já integra:**

  * `csosn: "500"` (ICMS já cobrado por Substituição Tributária) e `csosn:
    "900"` (categoria residual) agora recusam com `422`. Os dois validam na
    forma do leiaute, mas exigem informação que a engineAPI ainda não
    resolve sozinha (CEST/CFOP para `500`; resolução do destinatário para
    `900`): emitir sem ela arriscaria um documento tecnicamente válido mas
    faticamente incorreto.
  * `csosn` aceito (`102`/`103`/`300`/`400`) junto com `icms.aliquota`,
    `icms.baseCalculo` ou `icms.valor` agora recusa com `422
    CSOSN_VALORES_NAO_SUPORTADOS`: nenhum desses campos existe no grupo do
    leiaute desses códigos, e antes eram descartados em silêncio.

  Se o seu cadastro usa `500`, `900` ou envia esses 3 campos junto com
  `csosn`, revise antes de atualizar em produção.
</Warning>

**MEI (`crt: 4`) com `csosn: "102"` agora exige CFOP compatível** (`5102`/
`6102` na NF-e; só `5102` na NFC-e). Fora disso, `422
CSOSN_CFOP_MEI_INCOMPATIVEL`.

## 2026-08-05: ICMS monofásico de combustíveis (CST 02 e 61)

**Revenda de combustível e de GLP passa a emitir.**
O ICMS de combustível não é percentual: é **monofásico e ad rem**, um valor em
reais por unidade de medida, cobrado uma vez só na cadeia. O item agora aceita
o grupo do leiaute em `items[].icms`: `qBCMono`, `adRemICMS` e `vICMSMono`
(CST `02`, tributação própria) ou `qBCMonoRet`, `adRemICMSRet` e
`vICMSMonoRet` (CST `61`, cobrada anteriormente, o caso da revenda). Vale nos
dois regimes, **inclusive Simples Nacional**, e na NFC-e (onde o leiaute
aceita só o CST `61`).

```json theme={null}
"icms": {
  "origem": 0,
  "cst": "61",
  "qBCMonoRet": 13,
  "adRemICMSRet": 1.2196,
  "vICMSMonoRet": 15.85
}
```

Antes de emitir, a engineAPI confere o que a SEFAZ vai conferir: o valor tem
que ser quantidade × alíquota ad rem, medido no número que vai no documento, e
o item precisa do grupo `combustivel` com o código da ANP. Divergência devolve
`422` sem consumir número fiscal. CST `15` (retenção) e `53` (diferimento)
ainda não são emitidos, e dizem isso com `422 ICMS_MONOFASICO_NAO_SUPORTADO`.

**O grupo `combustivel` chegou à NFC-e.**
Quem revende no balcão (posto, distribuidora de GLP) emite NFC-e, e agora pode
informar o código da ANP no mesmo documento. Detalhe completo: [Guia de
combustíveis](/guides/combustiveis).

## 2026-08-04: contrato de emissão mais estrito, cobertura fiscal documentada

**Campo desconhecido no payload agora recusa com `400` acionável.**
Antes, um campo fora do contrato de emissão (por exemplo, um grupo do leiaute
que a API ainda não suporta) era descartado antes de chegar à SEFAZ, e a nota
podia sair autorizada sem o dado que você enviou. Agora todo objeto dos
payloads de emissão (NF-e, NFC-e, NFS-e, lote e todos os sub-objetos) é
estrito: campo desconhecido devolve `400` antes de qualquer efeito, sem
número fiscal consumido, citando o campo, o objeto e os campos aceitos ali.

<CodeGroup>
  ```json Antes theme={null}
  // POST /v1/nfe com um campo fora do contrato dentro de "transporte"
  // 200: nota AUTORIZADA sem o dado enviado, sem aviso nenhum
  ```

  ```json Depois theme={null}
  // POST /v1/nfe com um campo fora do contrato dentro de "transporte"
  // 400
  {
    "error": {
      "campo": "transporte.veiculo",
      "motivo": "campo desconhecido",
      "camposAceitos": ["modFrete", "transportadora", "volumes"]
    }
  }
  ```
</CodeGroup>

**Nova página: [Cobertura Fiscal](/cobertura).**
Antes de integrar, agora dá para responder "o cenário do meu cliente emite
hoje?" sem abrir chamado: documento cruzado com regime tributário e operação,
célula a célula, com o estado real (disponível, disponível em breve, não
suportado) e o erro exato para os cenários ainda não suportados.

## 2026-08-04: combustíveis, inutilização de notas e mensagens de erro sem laço

**Grupo de combustíveis (GLP) emite de verdade.**
NF-e com CFOP de combustível agora aceita e valida o grupo `combustivel`
(código ANP, percentuais de GLP, `vPart`) contra o leiaute oficial. Sem o
grupo, um CFOP de combustível recusa antes com `422
COMBUSTIVEL_GRUPO_OBRIGATORIO`: a engineAPI nunca deixa a SEFAZ rejeitar
depois de consumir o número fiscal. Detalhe completo: [Guia de
combustíveis](/guides/combustiveis).

**Inutilização de faixa de numeração para NF-e e NFC-e.**
Novo endpoint para inutilizar uma faixa de números não usados, com os mesmos
limites de tamanho de justificativa e de tamanho de faixa por chamada nos
dois documentos.

**Mensagens de erro pararam de se contradizer.**
Um mesmo cenário podia recusar com `TRIBUTACAO_NAO_RESOLVIDA` numa chamada e
com `CST_NAO_SUPORTADO` na chamada seguinte, para o mesmo payload, sem
caminho de saída. A mensagem agora é determinística e nomeia o motivo real na
primeira resposta. Formato completo: [Erros e Rejeições](/guides/errors).
