---
title: "Cancelamento de DC-e"
description: "Como cancelar uma DC-e — a janela de 24 horas, a justificativa obrigatória, e por que 204 não significa cancelada."
source_url: https://nfe.io/docs/documentacao/declaracao-de-conteudo-eletronica/integracao-api/cancelamento
last_updated: 2026-09-04
---

# Cancelamento de DC-e

```
DELETE /v2/companies/{companyId}/ContentDeclarations/{id}
```

Solicita o cancelamento de uma DC-e autorizada, com justificativa.

```json title="Corpo do pedido"
{
  "reason": "Cancelamento por erro na descricao dos itens declarados"
}
```

`reason` é obrigatório, de **15 a 255 caracteres** — fora disso, `400`.

## `204` significa "pedido aceito", não "cancelada"

O cancelamento é transmitido à SEFAZ de forma assíncrona. O `204` diz que o pedido passou na validação de entrada e foi enfileirado — **o desfecho vem depois**.

Confirme o resultado de uma das duas formas:

- `GET {id}` — quando o cancelamento é homologado, `status` vira `Cancelled`
- `GET {id}/events` — aparecem os eventos `CancelRequested`, `Cancelled` ou `CancelRejected`, com o `cStat` da SEFAZ

:::caution Não trate 204 como confirmação de cancelamento
Um `204` seguido de `CancelRejected` no histórico é um cenário real e esperado — o pedido foi aceito pela API, mas a SEFAZ recusou o cancelamento em si. Trate o `status`/histórico como fonte da verdade, não o código HTTP da chamada de cancelamento.
:::

## Duas regras que só a SEFAZ responde

Não viram erro no `204` — a SEFAZ é quem decide, depois:

- **Prazo de 24 horas**, contado da autorização — fora dele, o cancelamento é rejeitado
- **O documento tem que estar autorizado** — cancelar o que não autorizou é rejeitado

## Concorrência (`If-Match`)

```
DELETE /v2/companies/{companyId}/ContentDeclarations/{id}
If-Match: W/"3"
```

`If-Match` com a versão esperada do documento (formato de ETag fraca, `W/"3"`, ou o número puro `3`) faz o cancelamento falhar com `412` se o documento mudou desde a sua leitura. Sem o cabeçalho, não há pré-condição — o pedido segue mesmo que o documento tenha mudado.

## Erros

| Código | O que significa |
|---|---|
| `400` | Justificativa fora do limite de 15 a 255 caracteres (`xJust`, regra `L-XJUST`) |
| `401` | Token ausente, expirado, com audiência errada, ou chave de API no lugar de JWT |
| `403` | Token válido mas sem o escopo/papel da operação, ou assinatura não determinada |
| `404` | Documento inexistente, ou fora da assinatura do token |
| `409` | O documento já está cancelado |
| `412` | O `If-Match` enviado não corresponde à versão atual do documento — releia o documento e tente de novo |

```json title="400 — justificativa fora do limite"
[
  {
    "memberNames": [],
    "errorMessage": "Reason: xJust deve ter entre 15 e 255 caracteres [L-XJUST]"
  }
]
```

## Veja também

- [Como consultar uma DC-e](./como-consultar-uma-declaracao-de-conteudo.md)
- [Emitir uma DC-e](./emitir-uma-declaracao-de-conteudo.md)
