Cancelamento de DC-e
DELETE /v2/companies/{companyId}/ContentDeclarations/{id}
Solicita o cancelamento de uma DC-e autorizada, com justificativa.
{
"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,statusviraCancelledGET {id}/events— aparecem os eventosCancelRequested,CancelledouCancelRejected, com ocStatda SEFAZ
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 |
[
{
"memberNames": [],
"errorMessage": "Reason: xJust deve ter entre 15 e 255 caracteres [L-XJUST]"
}
]