Skip to main content
Anular un DTE no lo elimina: el documento permanece disponible con toda su información original, pero queda marcado como anulado y deja de tener validez fiscal como comprobante vigente. Fegora expone dos rutas equivalentes para anular — una nueva y una legacy — que internamente ejecutan la misma operación.

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

curl -X POST https://api.fegora.com/dte/8F3A1C2E-9B7D-4E51-8A0F-1234567890AB/anular \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...ejemplo" \
  -H "Content-Type: application/json" \
  -d '{
        "dteId": "8F3A1C2E-9B7D-4E51-8A0F-1234567890AB",
        "motivoAnulacion": "Error en el NIT del receptor"
      }'
CampoTipoObligatorioDescripción
dteIdstring (UUID)Debe coincidir exactamente con el {id} de la URL — si difieren, el API responde 400 (“DTE ID mismatch”).
motivoAnulacionstringMotivo de la anulación. Máximo 500 caracteres.
fechaAnulaciondatetimeNoFecha/hora de la anulación. Por defecto, el momento de la solicitud. No puede ser futura.
numeroDocumentoAnulacionstringNoIdentificador interno de la anulación para su propio sistema. Máximo 100 caracteres.
forzarAmbientePruebasbooleanNoFuerza el ambiente de la anulación, con el mismo comportamiento que forzarAmbientePruebas al crear un DTE — vea Ambientes.
forzarActualizacionbooleanNoOmite 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 devuelve 200 OK con el DTE completo, ya reflejando el nuevo estado:
{
  "id": "8F3A1C2E-9B7D-4E51-8A0F-1234567890AB",
  "tipo": "factura",
  "estado": "Anulado",
  "anulado": true,
  "datosAnulacion": {
    "motivoAnulacion": "Error en el NIT del receptor",
    "fechaAnulacion": "2026-07-12T15:40:02",
    "fechaCertificacion": "2026-07-12T15:40:05"
  },
  "archivoXmlUri": "https://cdn.fegora.com/dtes/8F3A1C2E-9B7D-4E51-8A0F-1234567890AB.xml",
  "archivoPdfUri": "https://cdn.fegora.com/pdfs/8F3A1C2E-9B7D-4E51-8A0F-1234567890AB.pdf"
}
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:
curl -X PATCH https://api.fegora.com/dte \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...ejemplo" \
  -H "Content-Type: application/json" \
  -H "x-force: true" \
  -d '{
        "id": "8F3A1C2E-9B7D-4E51-8A0F-1234567890AB",
        "anulado": true,
        "datosAnulacion": { "motivoAnulacion": "Error en el NIT del receptor" }
      }'
  • Si se omite datosAnulacion.motivoAnulacion, el motivo registrado es literalmente “Anulación”.
  • El header x-force: true equivale a forzarActualizacion: true de 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:
{
  "id": "8F3A1C2E-9B7D-4E51-8A0F-1234567890AB",
  "anulado": false
}
No existe un POST /dte/{id}/desanular equivalente a la ruta nueva de anulación — la desanulación sólo está disponible por esta vía legacy.
Esta operación es únicamente local: cambia el estado del documento en Fegora, pero no se comunica con el certificador ni con la autoridad fiscal (SAT/MH/DGII) para revertir la anulación ante ellos. Si el documento ya fue anulado ante el certificador, usar “Marcar como no anulado” deja el registro de Fegora desincronizado del estado real ante la autoridad fiscal. Úsela sólo para corregir una anulación hecha por error en Fegora, no como mecanismo para “deshacer” una anulación ya certificada.

Errores comunes

CódigoHTTPCuándo ocurre
FEG_DET_OBTE_INEX400El id indicado no corresponde a un DTE existente (o no pertenece a una cuenta a la que el usuario tiene acceso).
FEG_DTE_INVALID_OPERATION400El 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.
Vea el catálogo completo en Manejo de errores.
Solo República Dominicana. Al momento de escribir esta página, la anulación contra el certificador Digifact NUC DO devuelve un error 404 del lado del certificador (no un “documento no encontrado” de Fegora) — un problema de endpoint/ambiente de prueba del certificador, no de los datos enviados. Confirme el estado actual con el equipo antes de depender de la anulación en DO.

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.