Factuarea APIDevelopers

Anular una factura

Retira una factura emitida con un motivo documentado.

  • Aquí reason es obligatorio (3–500 caracteres); esa es la única diferencia con POST /v1/invoices/{id}/void, que hace exactamente la misma operación y persiste un texto de relleno cuando lo omites.

  • Prefiere este endpoint siempre que el motivo tenga que ser trazable: el texto que envías se conserva en el rastro de auditoría de la factura y, cuando la empresa está acogida a VeriFactu, pasa a ser el motivo del registro de anulación ante la AEAT.

  • La factura pasa a annulled y voided_at empieza a informar de cuándo ocurrió.

  • El estado es terminal y la operación es irreversible: no hay vuelta a sent ni a draft, y el número correlativo de la serie ni se libera ni se reutiliza.

  • Efecto en la AEAT. Con VeriFactu activo, anular encola un registro de anulación a la AEAT de forma asíncrona: un 200 significa que la factura está anulada en Factuarea, no que la AEAT ya lo haya procesado — consulta la factura para ver su estado VeriFactu.

  • El registro de alta original no se borra ni se reescribe; la AEAT conserva ambos apuntes, la emisión y su anulación.

  • Con VeriFactu inactivo la anulación es puramente interna y no se transmite nada.

  • ¿Anular o rectificar? La anulación retira el documento entero y solo funciona antes del cobro; no produce ningún documento rectificativo, así que nunca reexpresa un importe.

  • Una rectificativa (POST /v1/invoices/{id}/corrective) crea una nueva factura que corrige a la original y es el único camino para una factura que ya está paid o que solo está mal en parte.

  • Límites: solo se puede anular una factura en sent u overdue.

  • Un draft no se anula, se borra; paid, cancelled y annulled devuelven 422. Una factura que es rectificativa no se puede anular nunca — emite en su lugar una nueva rectificativa de la original.

  • Usa GET /v1/invoices/{id}/can-annul para comprobar la elegibilidad, y si se creará un registro de anulación VeriFactu, antes de llamar aquí.

POST
/invoices/{invoice}/annul
AuthorizationBearer <token>

En: header

Parámetros de ruta

invoice*string

Headers

Idempotency-Key*string

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.

Longitud1 <= length <= 255
Factuarea-Version?string

Fija 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.

Formatodate
X-Active-Profile?string

Opera 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.

Formatouuid

Cuerpo 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