Cuándo se puede anular
- El documento debe estar certificado (
estado: "Certificado"). Un documento ya anulado no puede anularse de nuevo. - Debe indicarse un motivo de anulación (obligatorio, máximo 500 caracteres).
- La fecha de anulación es opcional — si se omite, se usa el momento de la solicitud. Si se indica explícitamente, no puede ser una fecha futura.
Ruta recomendada: POST /dte/{id}/anular
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
dteId | string (UUID) | Sí | Debe coincidir exactamente con el {id} de la URL — si difieren, el API responde 400 (“DTE ID mismatch”). |
motivoAnulacion | string | Sí | Motivo de la anulación. Máximo 500 caracteres. |
fechaAnulacion | datetime | No | Fecha/hora de la anulación. Por defecto, el momento de la solicitud. No puede ser futura. |
numeroDocumentoAnulacion | string | No | Identificador interno de la anulación para su propio sistema. Máximo 100 caracteres. |
forzarAmbientePruebas | boolean | No | Fuerza el ambiente de la anulación, con el mismo comportamiento que forzarAmbientePruebas al crear un DTE — vea Ambientes. |
forzarActualizacion | boolean | No | Omite la comunicación con el certificador y guarda la anulación directamente. Pensado para cuentas de prueba cuyo certificador de pruebas rechaza la solicitud de anulación. |
Respuesta
Una anulación exitosa devuelve200 OK con el DTE completo, ya reflejando el nuevo estado:
archivoXmlUri pasa a apuntar al XML de anulación (firmado y, cuando aplica, certificado ante la autoridad fiscal) — el XML de emisión original ya no es el que se sirve en esa URL.
Ruta legacy: PATCH /dte
Se mantiene por compatibilidad con integraciones existentes. Ejecuta la misma operación que la ruta anterior:
- Si se omite
datosAnulacion.motivoAnulacion, el motivo registrado es literalmente “Anulación”. - El header
x-force: trueequivale aforzarActualizacion: truede la ruta nueva.
El header
x-force sólo existe en esta ruta legacy. No debe confundirse con forzarAmbientePruebas — vea Ambientes: pruebas y producción para el mecanismo de ambiente por documento.Desanulación
PATCH /dte con anulado: false revierte el estado del documento a no-anulado:
POST /dte/{id}/desanular equivalente a la ruta nueva de anulación — la desanulación sólo está disponible por esta vía legacy.
Errores comunes
| Código | HTTP | Cuándo ocurre |
|---|---|---|
FEG_DET_OBTE_INEX | 400 | El id indicado no corresponde a un DTE existente (o no pertenece a una cuenta a la que el usuario tiene acceso). |
FEG_DTE_INVALID_OPERATION | 400 | El documento ya está anulado, no está certificado (no se puede anular algo que no llegó a certificarse), o falta el motivo de anulación. El detalle exacto viaja en mensaje. |
Páginas relacionadas
Casos especiales
Contingencia, exportación, plantillas y otros flujos fuera de la emisión estándar.
Manejo de errores
Formato de errores y catálogo completo de códigos.