O painel da NFE.io está recebendo uma nova interface e esta documentação está sendo atualizada junto. Alguns nomes de menus e telas podem estar diferentes do que você vê. Em caso de divergência, fale com o suporte.
Manifestação de NF-e
A manifestação é a forma como você comunica à SEFAZ o que aconteceu com uma NF-e destinada à sua empresa. É um processo legalmente obrigatório para empresas que utilizam a Escrituração Fiscal Digital (EFD).
Sumário
- Por que é Obrigatória
- Fluxo recomendado
- Prazos para Manifestar
- Tipos de Manifestação
- Registrar Manifestação via API
- Eventos da Reforma Tributária (NT 2025.002-RTC)
- Manifestação Automática
- Como Manifestar Manualmente (Painel)
Por que é Obrigatória
A SEFAZ precisa saber se você:
- Recebeu a mercadoria conforme descrito na NF-e
- Não reconhece aquela operação
- A operação não foi concluída (mercadoria devolvida, por exemplo)
Sem a manifestação, você pode ter problemas em auditorias fiscais.
Fluxo recomendado
Prazos para Manifestar
Os prazos são contados a partir da data de autorização da NF-e pela SEFAZ:
| Tipo de Manifestação | Prazo Máximo |
|---|---|
| Ciência da Operação | 10 dias após a autorização da NF-e |
| Confirmação da Operação | 180 dias após a autorização da NF-e |
| Desconhecimento da Operação | 180 dias após a autorização da NF-e |
| Operação Não Realizada | 180 dias após a autorização da NF-e |
Passados 10 dias da autorização, a SEFAZ rejeita a Ciência da Operação com cStat 596. Não
há como reenviar depois disso, por nenhum canal.
Quando isso acontece, ainda é possível liberar o XML completo com Confirmação da Operação
(210200), que tem prazo de 180 dias — mas ela é uma manifestação definitiva: afirma que a
mercadoria foi recebida conforme a NF-e, e depois dela não cabe mais Desconhecimento nem Operação Não
Realizada. Só use se a operação de fato ocorreu.
⚠️ Atenção ao ativar o serviço para um CNPJ novo: documentos autorizados mais de 10 dias antes da ativação já chegam com a janela da Ciência fechada. Isso vale inclusive para a carga histórica.
Atenção: Após 180 dias sem manifestação de confirmação, desconhecimento ou operação não realizada, a SEFAZ pode considerar a operação como confirmada automaticamente. Mantenha seus registros em dia.
Tipos de Manifestação
Ciência da Operação
O que significa: "Eu sei que existe esta NF-e destinada para mim."
Esta é a manifestação mais básica e deve ser feita assim que você toma conhecimento da NF-e. Não confirma recebimento físico.
Quando usar: Sempre que uma NF-e chegar para sua empresa — mesmo que você ainda não tenha recebido a mercadoria.
Confirmação da Operação
O que significa: "Recebi a mercadoria exatamente como descrito nesta NF-e."
Quando usar: Após conferir que a mercadoria chegou e está de acordo com o que foi faturado.
Desconhecimento da Operação
O que significa: "Não reconheço esta operação — não comprei nada disso."
Quando usar: Quando chega uma NF-e de uma compra que sua empresa não realizou. Pode ser uma fraude ou erro do emitente.
Atenção: Use com cuidado. Esta manifestação tem implicações legais e pode acionar investigação da SEFAZ sobre o emitente.
O que fazer se suspeitar de fraude:
- Registre o Desconhecimento da Operação imediatamente
- Documente a ocorrência internamente
- Se identificar uso indevido do seu CNPJ, registre um Boletim de Ocorrência e notifique a Receita Federal
- Entre em contato com sua assessoria jurídica ou contábil
Operação Não Realizada
O que significa: "A operação estava prevista, mas não foi concluída."
Quando usar: Quando a mercadoria foi devolvida, o pedido foi cancelado após a emissão da NF-e, ou qualquer situação onde a operação não se concretizou conforme descrito.
Registrar Manifestação via API
A manifestação também pode ser registrada via API, integrando com seu ERP. A rota recomendada é manifestation-events, que aceita os quatro tipos acima e também os eventos da Reforma Tributária:
curl -X POST "https://api.nfse.io/v2/companies/{company_id}/inbound/productinvoices/by-access-key/{access_key}/manifestation-events" \
-H "Authorization: SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"eventCode": 210210,
"nSequencia": 1
}'
| Campo | Obrigatório | Descrição |
|---|---|---|
eventCode | Sim | Código do evento (tpEvento). Veja a tabela abaixo |
nSequencia | Não | Sequência do evento (nSeqEvento). Default 1; menor que 1 responde 400 |
detail | Depende | Conteúdo específico do evento. Opcional para 210200, 210210 e 210220; obrigatório para 210240 |
Tipos de manifestação (eventCode):
| Código | Tipo | detail |
|---|---|---|
210210 | Ciência da Operação | Opcional (sem campos) |
210200 | Confirmação da Operação | Opcional (sem campos) |
210220 | Desconhecimento da Operação | Opcional (sem campos) |
210240 | Operação não Realizada | Obrigatório: { "justification": "..." } com 15 a 255 caracteres |
A Operação não Realizada exige a justificativa já na submissão:
{
"eventCode": 210240,
"nSequencia": 1,
"detail": { "justification": "Mercadoria nao foi entregue ao destinatario." }
}
Sem detail.justification válida, a API responde 400 na hora e nada é enviado à SEFAZ. Antes, o pedido era aceito e o evento terminava Rejected depois.
O processamento é assíncrono
A resposta é 202 Accepted com o evento em status: "Pending" e o header Location apontando para o detalhe. O envio à SEFAZ acontece em segundo plano. Não há webhook de conclusão: acompanhe o resultado por polling.
GET /v2/companies/{company_id}/inbound/productinvoices/manifestation-events/{id}
GET /v2/companies/{company_id}/inbound/productinvoices/by-access-key/{access_key}/manifestation-events
O primeiro devolve o evento com requestXmlGZipB64 (XML enviado) e responseXmlGZipB64 (resposta da SEFAZ), ambos em GZip + Base64. O segundo devolve { "items": [...] }, do mais recente para o mais antigo.
Resposta (202):
{
"id": "66f0a1b2c3d4e5f601234567",
"companyId": "comp_123",
"accessKey": "35240112345678000195550010000012341234567890",
"eventCode": 210210,
"eventType": "CienciaOperacao",
"nSequencia": 1,
"status": "Pending",
"environment": "Production",
"attemptCount": 0,
"createdOn": "2026-09-22T14:00:00Z"
}
status | Significado |
|---|---|
Pending | Na fila, ainda não concluído |
Accepted | Registrado na SEFAZ (cStat 135 ou 136). O 573 (duplicidade) também resulta em Accepted: o evento já estava registrado, e a submissão é tratada como sucesso idempotente |
Rejected | Recusado pela SEFAZ: qualquer outro cStat, inclusive 596 (evento fora do prazo), com errorCode = BadRequest. Ou recusado na montagem do XML, com errorCode = VALIDATION |
Failed | Falha antes do envio. errorCode: CERT_NOT_FOUND, CERT_LOAD_FAILED, CERT_EXPIRED, COMPANY_NOT_FOUND, AUTOR_UF_UNRESOLVED, STRATEGY_NOT_FOUND ou MAX_ATTEMPTS_EXCEEDED |
errorMessage é texto livre (por exemplo, o motivo devolvido pela SEFAZ). Não faça parsing dele.
Respostas do POST:
| HTTP | Quando |
|---|---|
202 | Evento aceito e enfileirado |
400 | Chave sem 44 dígitos, nSequencia < 1, código não aceito, detail inválido para o código (ex.: 210240 sem justificativa) ou inbound de NF-e não ativo na empresa |
409 | Já existe evento Pending ou Accepted para a mesma (accessKey, eventCode, nSequencia). Eventos Rejected ou Failed podem ser reenviados |
Rota legada POST /manifest (depreciada)
POST /v2/companies/{company_id}/inbound/{access_key}/manifest?tpEvent=210210
Authorization: SUA_API_KEY
A rota continua disponível por compatibilidade, mas está depreciada. Ela não tem corpo: o evento vem de tpEvent (default 210210) e a sequência é sempre 1.
- Ela também é assíncrona: responde
200com o evento emstatus: "Pending", e não com uma mensagem da SEFAZ. Acompanhe pelas mesmas rotasGETacima. - As mesmas validações e o mesmo
409da rotamanifestation-eventsse aplicam. tpEvent=210240responde400: o evento exige justificativa, e esta rota não tem corpo para enviá-la. Usemanifestation-eventscomdetail.justification.- O parâmetro
engineaceitav2(padrão) ev1. Oengine=v1é o caminho síncrono antigo, está depreciado e não funciona no runtime atual. Não use.
Eventos da Reforma Tributária (NT 2025.002-RTC)
Os quatro tipos acima (Ciência, Confirmação, Desconhecimento, Não Realizada) continuam valendo. A NT 2025.002-RTC acrescentou uma família nova de eventos, ligados à apuração de IBS e CBS — apropriação de crédito, imobilização, perecimento, sucessão — além do cancelamento genérico de evento.
Eles usam a mesma rota manifestation-events, também assíncrona, e o corpo tem um grupo detail cuja estrutura varia por código:
curl -X POST "https://api.nfse.io/v2/companies/{company_id}/inbound/productinvoices/by-access-key/{access_key}/manifestation-events" \
-H "Authorization: SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"eventCode": 211128,
"nSequencia": 1,
"detail": { "indAceitacao": "1" }
}'
Códigos aceitos (13 no total): 4 de manifestação do destinatário (210200, 210210, 210220, 210240), 6 do destinatário na NT-RTC (211110, 211124, 211128, 211130, 211140, 211150), 2 de sucessora (212110 IBS, 212120 CBS) e 1 de cancelamento de evento (110001). A tabela com o detail exigido por cada um está em Tipos e enums.
211120 (consumo pessoal) foi removidoO evento saiu da NT 2025.002-RTC na versão 1.40, depois da revogação do §6º do art. 57 da LC 214/2025 pela LC 227/2026. A SEFAZ não reconhece mais tpEvento=211120 e rejeita o lote com cStat 225 — Falha no Esquema XML. Submissões novas são sempre recusadas com 400 antes de sair — o código segue reconhecido apenas na leitura de eventos já registrados.
A idempotência é por (accessKey, eventCode, nSequencia). Reenviar enquanto já existe um evento Pending ou Accepted retorna 409, sem nova submissão à SEFAZ. Um evento Rejected ou Failed pode ser reenviado. Para uma re-submissão legítima de evento multi-sequência, incremente nSequencia (default 1).
Eventos do Fisco (412120 e 412130, manifestação sobre transferência de crédito IBS/CBS em sucessão) chegam pela distribuição, mas são somente leitura: tentar submetê-los retorna 400.
Manifestação Automática
O serviço pode fazer a Ciência da Operação automaticamente para você. Assim que uma NF-e é recebida, aguardamos o tempo configurado (ex: 60 minutos) e registramos a ciência automaticamente. Configure via AutomaticManifesting.MinutesToWaitAwarenessOperation no payload de ativação (ver Ativar via API).
Vantagens:
- Você não precisa manifestar manualmente cada NF-e
- Garante conformidade legal de forma automática
- Economiza tempo
Importante: A manifestação automática registra apenas Ciência da Operação. Você ainda precisa registrar Confirmação ou Operação Não Realizada manualmente quando aplicável.
Como Manifestar Manualmente (Painel)
Na listagem NF-e Capturadas, use o menu ⋮ da linha (ou o botão Enviar Evento no detalhe da nota) e escolha o Tipo de Evento: Ciência da Operação, Confirmação da Operação, Desconhecimento da Operação ou Operação não Realizada.
Ou, se sua equipe de TI integrou com nossa API, a manifestação pode ser acionada diretamente do seu sistema de gestão.
Veja também
- Ativar via API — onde se configura
AutomaticManifesting - Consultar no painel
- Endpoints de NF-e
- Tipos e enums
- FAQ