Anular una factura
Retira una factura emitida.
-
La factura pasa a
annulled,voided_atempieza a informar de cuándo ocurrió y el estado es terminal: anular es irreversible y no hay vuelta asentni adraft. -
¿Anular o rectificar? Anula cuando el documento entero nunca debería haber existido y no se ha cobrado — la factura se retira en bloque y no se produce ningún documento rectificativo.
-
Emite una rectificativa (
POST /v1/invoices/{id}/corrective) cuando la factura ya estaba cobrada, o cuando solo está mal en parte (importe, destinatario, devolución parcial): una facturapaidno se puede anular nunca, y anular no corrige jamás una cifra. -
Lo que anular no hace: el número correlativo de la serie ni se libera ni se reutiliza (el contador de la serie solo avanza), la factura original no se borra y su registro de alta en VeriFactu no se retira.
-
Cuando la empresa está acogida a VeriFactu, se encola un registro de anulación ante la AEAT de forma asíncrona con tu
reasoncomomotivo— un200significa que la factura está anulada de nuestro lado, no que la AEAT ya haya procesado la anulación. -
Con VeriFactu inactivo la anulación es puramente interna.
-
Límites: solo se puede anular una factura en
sentuoverdue. -
Un
draftno es anulable (bórralo en su lugar), ypaid,cancelledyannulleddevuelven 422. Una factura que es rectificativa no se puede anular nunca — para deshacer una rectificativa equivocada, emite una nueva rectificativa de la original. -
Fíjate en que lo inverso sí se admite: tener rectificativas no impide anular la original.
-
Llama antes a
GET /v1/invoices/{id}/can-annulsi necesitas comprobar la elegibilidad sin intentar el cambio. -
Aquí
reasones opcional y se persiste un texto de relleno cuando lo omites. -
POST /v1/invoices/{id}/annules exactamente la misma operación conreasonobligatorio — prefiérela siempre que el motivo tenga que quedar documentado.
En: header
Parámetros de ruta
Headers
Clave opaca generada por el cliente (hasta 255 caracteres; se recomienda UUID v7) que permite reintentos seguros: la primera respuesta se almacena y se reproduce en las repeticiones sin volver a ejecutar la mutación. Reutilizar una clave con un cuerpo distinto devuelve 409 idempotency_key_reused. Consulta la guía de idempotencia. Obligatoria en esta operación: repetirla produce un efecto irreversible (un email enviado, un archivo generado, una llamada a un tercero o un cargo), por lo que una petición sin esta cabecera se rechaza con 422 idempotency_key_required antes de ejecutar lógica de negocio.
1 <= length <= 255Fija la versión de la API (YYYY-MM-DD, versionado por fecha estilo Stripe) para esta petición; omítelo para usar la versión fijada de la clave, o la última si no hay ninguna. Versión no soportada → 400 unsupported_api_version; malformada → 400 parameter_invalid_format. La versión efectiva se refleja en la cabecera de respuesta Factuarea-Version. Consulta la guía de Versioning.
dateOpera en nombre de una empresa hija (API key maestra de gestoría): pasa su id público (UUID v7) y la petición se ejecuta contra los datos de esa hija sin cambiar el scope, el tier ni el environment de la clave (omítelo para usar la propia empresa de la clave). UUID inválido → 400 parameter_invalid_uuid; id desconocido o no propio → 404 profile_not_found. Consulta la guía de Acting on behalf.
uuidCuerpo de la petición
application/json
Definiciones de TypeScript
Usa el tipo request body en TypeScript.
Cuerpo de la respuesta
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json