Atualizado em .
Como ler este histórico
As entradas descrevem o que mudou para quem consome a API, não o que mudou por dentro da plataforma. Mudanças que apenas acrescentam campos opcionais são compatíveis com integrações existentes; quando uma regra passa a recusar algo que antes passava, a entrada diz isso com todas as letras.
Outubro de 2026
Novo regime tributário simples_excesso no campo tax_regime da empresa. Emite a tag CRT com valor 2 na NF-e e CT-e, calculando o ICMS via CST normal (como CST 10, 20 e 90) em vez de CSOSN.
Setembro de 2026
A logomarca em PNG com canal alpha (transparência) não era desenhada no DANFSe: a biblioteca de PDF recusa esse formato e a falha era silenciosa, deixando a faixa vazia. Como PNG exportado por ferramenta de design normalmente tem transparência, a maioria das logos era afetada. Agora o PNG é achatado sobre branco antes de ser enviado ao PDF. As logos que já funcionavam não mudam.
A série de NFS-e (series no draft e no payload) aceitava no máximo 999 — limite copiado da NF-e, sem relação com a NFS-e. O schema nacional (TSSerieDPS) permite até 5 dígitos, de 1 a 89999 (a faixa 90000-99999 é reservada pelo próprio padrão). Corrigido para acompanhar o schema real, permitindo migrar uma empresa que já emite com série de 5 dígitos por outro sistema sem trocar numeração.
O token.environment (homologacao ou producao) agora vem em GET /me. Resolve um risco real: POST /companies sem default_environment explícito herda o ambiente do próprio token usado na chamada — sem esse campo, o integrador só descobria o ambiente herdado depois de a empresa já ter sido criada, de forma permanente.
A logomarca cadastrada em POST /companies/{company}/logo (já usada em DANFE, DANFCe e DACTe/DAMDFe) agora também aparece no DANFSe — nos quatro layouts (padrão nacional, ISSNet, Salvador e São Paulo). Sem logo cadastrada, o layout permanece idêntico ao de antes.
Novo endpoint GET /companies/{company}/nfse/adn-convenio/{city_code}: consulta ao vivo no Ambiente de Dados Nacional se um município (qualquer um, não precisa ser o da empresa) aderiu ao emissor público nacional da NFS-e, autenticando via mTLS com o certificado de uma empresa já cadastrada. Resposta cacheada por 1 hora, compartilhada por município.
Novo campo cancellation_code (1 a 5, conforme o CodigoCancelamento da ABRASF) em POST /nfse/drafts/{id}/cancel. Corrigida a classificação: recusa do cancelamento pelo provedor municipal passava a ser marcada como erro interno nosso; agora usa o código real do provedor. cancellation_status_code, antes sempre vazio numa falha de cancelamento, passou a vir preenchido.
Novo endpoint GET /utils/nfse-coverage/{city_code}: responde se um município usa o padrão nacional ou um layout municipal próprio, sem precisar de uma empresa cadastrada. Campo verified distingue município já confirmado por um caso real do comportamento padrão (nacional) ainda não testado individualmente.
Em NFS-e, CT-e, MDF-e e NF-e, uma falha não classificada pelo provedor caía num fallback que usava o nome da classe da exceção PHP (ex.: "RuntimeException") como código de erro — formato que não bate com nenhuma convenção (X###/FISCAL-* para o motor, numérico/E#### para o provedor). Agora usa um código fixo por tipo de documento (FISCAL-{NFSE,CTE,MDFE,NFE}-INTERNAL-ERROR).
O payload de NFS-e passou a aceitar amounts.inss_amount e amounts.csll_amount, transportados como passthrough simples (sem apuração própria) — ValorInss/ValorCsll no layout municipal, vRetCP/vRetCSLL no padrão nacional. Antes eram recusados sempre que diferentes de zero.
Novo campo service.incidence_city_code sobrepõe o município de incidência do ISS por nota (antes sempre o da própria empresa). service.iss_tax_situation ganhou isencao, susp_judicial e susp_administrativa para empresas de layout municipal — as duas últimas exigem o novo campo service.process_number. Corrigido também: os valores de exportação/não incidência/imunidade que já existiam eram validados mas silenciosamente ignorados para empresas de layout municipal.
taker.municipal_registration e taker.phone já eram aceitos e transportados, mas não estavam documentados. Corrigido também um bug: os dois eram apagados do documento sempre que taker.address não vinha junto no mesmo payload, mesmo com valor preenchido.
Agosto de 2026
O payload de NFS-e passou a aceitar amounts.ir_amount, gerando a tag vRetIRRF na DPS nacional e ValorIr nos provedores municipais, com dedução automática no valor líquido.
O payload de NFS-e passou a aceitar amounts.pis_amount, amounts.cofins_amount, pis_rate, cofins_rate, pis_cst e pis_cofins_withheld, preenchendo o grupo tribFed/piscofins da DPS nacional com CST, base, alíquotas, valores e tpRetPisCofins=2 (débito próprio). O débito próprio não abate do valor líquido. INSS e CSLL seguem recusados.
Cada seção passou a ter link direto, o índice lateral acompanha a leitura, os blocos de código ganharam realce e botão de copiar, e cada página mostra quando foi atualizada.
O payload de NFS-e passou a aceitar desconto incondicionado e condicionado, deduções e o bloco de informações complementares.
Os códigos do Tinus passaram a chegar traduzidos na resposta, incluindo o E138. O E0039 indica adesão do município ao emissor nacional, não erro do payload.
Substituição de NFS-e pelo grupo Subst, com chave substituída, código e motivo da substituição.
Durante a rotação as entregas passam a ser assinadas com as duas chaves, para o endpoint do integrador não ficar mudo no meio da troca.
O convênio passou a ser resolvido por ambiente. Com registro no CNC a inscrição municipal é obrigatória (E0116); sem registro, é proibida (E0120).
O grupo card continua exigido na NFC-e. Na NF-e a ausência virou aviso, não recusa.
Emissão pelo leiaute municipal de São Paulo, com alocação do próximo RPS livre quando o número não é informado.
A API passou a expor o número da NFS-e autorizada, e não o número do RPS.
O cadastro de empresa passou a aceitar CNPJ alfanumérico.
O limite por minuto deixou de funcionar como teto comercial do plano e passou a ser apenas proteção de infraestrutura. A cota do plano continua sendo contada por evento.
Julho de 2026
IPI de pauta, PIS/COFINS por quantidade, PIS/COFINS por substituição tributária e ST desonerado passaram a ter contrato próprio no item.
Cartão, PIX, boleto e data de pagamento, incluindo a descrição do meio de pagamento 99 (xPag), que faltava no contrato.
ISSQN na NF-e com a separação correta dos totais, exportação com drawback e exportação indireta, e diferimento no ICMS (CST 51) e no IBS/CBS (gDif).
Tabelas oficiais versionadas com vínculo por vigência, redução de alíquota, tributação regular (gTribRegular), imunidade e não incidência.
ST a recolher e ST retido no regime normal, CSOSN 201, 202, 203, 500 e 900 no Simples Nacional, FCP no item, redução de base, cBenef e partilha do ICMS interestadual (ICMSUFDest).
Rastreabilidade por lote, grupo de medicamentos, local de entrega, local de retirada, e frete e seguro por item ou rateados pela nota.
Contrato próprio para complementar e ajuste, e ICMS desonerado com a tabela de cBenef que destravou os CST de benefício.
IPI devolvido pelo grupo impostoDevol e referência por item, respeitando a data de cada ambiente.
NF-e sem intermediador passou a enviar indIntermed 0.
Antes de julho de 2026
A plataforma esteve em construção antes desse período e o contrato mudava sem aviso público. O histórico começa no ponto em que a v1 passou a ser tratada como compromisso com quem integra.