Factuarea APIDevelopers

Anular un pago de una factura

Anula un pago registrado contra una factura, indicando por qué.

  • El pago conserva su importe, fecha, método y referencia, y queda marcado como anulado (is_reversed: true) junto con el motivo, el instante y el autor — nunca se borra, porque un pago que existió y dejó de tener efecto es información contable.

  • reason es obligatorio y pertenece a un catálogo cerrado: direct_debit_return (devolución de adeudo SEPA), card_dispute (disputa o retrocesión de tarjeta), misapplied_payment (imputado a la factura equivocada), bounced_effect (efecto impagado) y recording_error.

  • Un valor fuera del catálogo devuelve 422 payment_reversal_reason_invalid.

  • note es una nota libre opcional de hasta 500 caracteres; superarlos devuelve 422 payment_reversal_invalid.

  • Anular un pago que ya está anulado devuelve 422 payment_already_reversed.

  • Un pago anulado deja de computar en paid_amount, pending_amount y en cualquier agregado de tesorería, así que la factura vuelve al circuito de cobro: overdue si su fecha de vencimiento ya pasó, sent en caso contrario, y vuelve a admitir un pago nuevo.

  • Esa transición se deriva del registro de pagos y solo puede originarse aquí — el endpoint genérico de cambio de estado no puede sacar una factura de paid.

  • ¿Reembolso o anulación? Anula cuando el cliente recuperó su dinero sin que la operación se minore (devolución de adeudo, retrocesión, error de imputación): la deuda sigue viva y quieres cobrarla.

  • Emite una factura rectificativa (POST /v1/invoices/{id}/corrective) cuando lo que se minora es la operación en sí — ahí es donde los ingresos bajan de verdad.

  • Anular nunca emite una rectificativa, y un recibo devuelto no es un crédito incobrable (el art. 80.Cuatro LIVA tiene sus propios requisitos formales).

  • Irreversible: no hay des-anulación.

  • Para rehacer el cobro, registra un pago nuevo.

POST
/invoices/{invoice}/payments/{payment}/reversal
AuthorizationBearer <token>

En: header

Parámetros de ruta

invoice*string
payment*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