Anular un documento sellado
Anular no es borrar. POST /v1/dte/{codigoGeneracion}/invalidate produce un evento aparte: su propio documento firmado, con su propio código de generación y su propio sello del Ministerio. El documento original no desaparece de ningún registro — cambia de estado, y esta ruta devuelve el sello que lo prueba. No hay forma de deshacer una anulación.
Los tres tipos no son intercambiables
CAT-024 del catálogo oficial define tres motivos, y cada uno exige cosas distintas:
| Tipo | Qué es | Exige |
|---|---|---|
1 | Error en el documento | motivo y codigoGeneracionReemplazo — emita primero el documento correcto |
2 | Rescisión de la operación | Ninguno de los dos — nombrar un reemplazo aquí es un error |
3 | Otro | Igual que el 1: motivo y codigoGeneracionReemplazo |
curl -X POST "$FACTA_API_BASE_URL/v1/dte/7875BC7A-9580-441D-94E4-FA455E9D8BD0/invalidate" \
-H "X-Facta-Key: $FACTA_API_KEY" \
-H "X-Facta-Sign-Key: $FACTA_SIGN_KEY" \
-H "Idempotency-Key: anulacion-venta-00417" \
-H "Content-Type: application/json" \
-d '{
"tipoAnulacion": 1,
"motivo": "El precio unitario iba sin el descuento pactado",
"codigoGeneracionReemplazo": "9C1E77A2-0B44-4E0F-9E31-0C2A6F4D1B88",
"responsable": { "nombre": "Ana Rivas", "tipoDocumento": "36", "numDocumento": "06142803901121" },
"solicita": { "nombre": "Beto Cruz", "tipoDocumento": "13", "numDocumento": "012345678" }
}'responsable es quien responde por la anulación ante Hacienda; solicita es quien la pidió — pueden ser la misma persona, pero el esquema los pide siempre por separado.
Solo se anula lo que tiene sello
Un documento rechazado nunca existió para Hacienda, así que no hay nada que anular: su correlativo lo reutiliza el documento corregido, no un evento de anulación (§167 de la normativa).
Por qué exige Idempotency-Key sin gastar correlativo
Anular no reserva un número nuevo, pero sí exige Idempotency-Key igual que las rutas que sí gastan uno: un reintento por timeout mandaría un segundo evento de anulación contra un documento que el primero ya anuló, y eso es exactamente el tipo de duplicado que esta cabecera existe para prevenir en cualquier operación irreversible, gaste o no un correlativo.
Anular algo que ya estaba anulado
No es un error. La respuesta es 200 con yaEstabaInvalidado: true, y no se manda ningún evento nuevo al Ministerio. Un reintento que en cambio recibiera un error enseñaría a hacer algo peor: forzar una segunda anulación sobre un documento que ya la tiene.
Otras guías
Emitir un DTE
Cómo llamar a POST /v1/dte, qué llega firmado por dentro y las tres respuestas que puede recibir.
Leer →Preparar y firmar por separado
Por qué separar la reserva del correlativo de la firma, el prepareToken y sus 15 minutos, y qué pasa si el documento cambia entre las dos llamadas.
Leer →