Anulación de cobros
Anula un cobro conservando el registro original y su trazabilidad. El saldo de la factura refleja la anulación y las integraciones reciben el evento correspondiente.
Un pago que se ha devuelto — un adeudo SEPA devuelto, una retrocesión de
tarjeta, un efecto impagado — tiene ya una vía propia para registrarse, y la
factura que pagaba vuelve al circuito de cobro en lugar de quedarse paid
para siempre. Consulta Registrar pagos.
- Operación nueva —
POST /v1/invoices/{id}/payments/{payment_id}/reversalanula un pago de una factura de venta indicando unreasonde un catálogo cerrado (direct_debit_return,card_dispute,misapplied_payment,bounced_effect,recording_error) y unanoteopcional. Devuelve200con el pago ya anulado. Scope:invoices:write— no existe una familia de scopespayments:*. - El pago no se borra nunca — conserva su importe, fecha, método y
referencia, y gana
is_reversed,reversed_at,reversal_reason,reversal_reason_textyreversal_note, los cinco publicados ya en todos los pagos de una factura. Un pago anulado sigue en el ledger: leeis_reversed, no deduzcas la anulación de que una entrada desaparezca. - La factura vuelve al circuito de cobro — un importe anulado deja de
computar en
paid_amountypending_amount, así que una facturapaidpasa aoverduesi su vencimiento ya pasó y asenten caso contrario, y vuelve a admitir un pago. Solo el ledger puede producir esa transición: el endpoint genérico de cambio de estado sigue sin poder sacar una factura depaid. - Evento nuevo
payment.reversed— cierra el ciclo quepayment.receiveddejaba contado a medias. Sudata.reversallleva elreasony unorigin(gatewaycuando fue la pasarela la que informó de la devolución,manualcuando lo registró una persona). Consulta Eventos. - Tool MCP nueva
revert_invoice_payment— el espejo de la ruta para agentes, con el mismo scopeinvoices:write. Consulta el catálogo de tools. - Tres códigos de error nuevos, los tres
422:payment_already_reversed,payment_reversal_reason_invalidypayment_reversal_invalid.
Anular no es rectificar. Un recibo devuelto significa que el cliente recuperó su dinero sin que la operación se minore: la deuda sigue viva y no hay nada que rectificar. Un reembolso genuino sí baja los ingresos y conserva su rectificativa. Un recibo devuelto tampoco es el supuesto de crédito incobrable del art. 80.Cuatro LIVA, que tiene sus propios requisitos formales. Consulta ¿Anulación o rectificativa?.
Corrección de contrato (clientes generados). POST /v1/invoices/{id}/payments
y GET /v1/invoices/{id}/payments publicaban en el spec OpenAPI el schema de
factura, heredado del prefijo del path, cuando la API devuelve un
cobro — y el listado anunciaba además un objeto singular en lugar de un
array. Ambas publican ya InvoicePaymentDetail (un array en el listado).
Ninguna respuesta ha cambiado por el cable: es una corrección de
documentación, no un cambio que rompe, porque ninguna integración tipada
podía funcionar contra el tipo anterior. Si usas un SDK generado o el CLI,
vuelve a generarlo: tu modelo de estas dos operaciones cambiará.
Nuevos endpoints1
| Endpoint | Descripción |
|---|---|
POST/v1/invoices/{invoice}/payments/{payment}/reversal | Anular un pago de una factura |