Reembolsos

Registra y consulta devoluciones de un pago.

Reembolsos

POST /v1/payments/:payment/refunds
{
  "amount": 1000,
  "reason": "Solicitud del cliente",
  "reference": "00123456789"
}

El importe está en la moneda de liquidación. Omite amount para devolver el importe restante reembolsable. Usa una clave de idempotencia estable para esa devolución. Las comisiones del pago no se devuelven.

mode dice quién devuelve el dinero:

  • manual: tu negocio, desde su banco por Pago Móvil. Es lo normal: Billete no guarda el dinero de tu negocio, porque el neto de cada pago ya salió a tu Pago Móvil. Devuelve el dinero antes de llamar a la API y envía en reference la referencia que te dio tu banco: el reembolso queda succeeded en el acto, y tu cliente recibe el comprobante por correo con esa referencia.
  • provider: el proveedor del método, cuando el dinero sigue donde lo cobró. Queda pending hasta que confirma, también mientras el proveedor no esté disponible: sale solo cuando vuelve. Atiende refund.failed.
  • billete: solo en reembolsos de antes de que Billete dejara de guardar el dinero de los negocios. Ya no se crean.

reference vuelve en el reembolso una vez devuelto (null mientras no se sabe).

Reembolsos pendientes

Un reembolso manual también puede nacer pending: tu negocio le debe el dinero a su cliente y todavía no se lo envió. Su monto sale del pago en el acto, así que no se puede reembolsar dos veces. Nace así cuando:

  • Un cambio de suscripción se paga con su cotización vencida: Billete pide el reembolso completo de ese pago.
  • Billete decide que tu cliente tiene la razón en un problema con una entrega, o un envío no sale a tiempo.
  • En el dashboard, alguien pide un reembolso que necesita aprobación y se aprueba, o le pide sus datos a tu cliente para devolvérselo.

A dónde enviarlo. Si tu cliente escribió su Pago Móvil completo al pagar (banco, teléfono y cédula), ese es el destino desde el principio. Si no, Billete le escribe por correo con un enlace a la página de su reembolso, donde lo indica (devolución al cliente). En el dashboard, el pago muestra el reembolso por pagar, sus datos completos (cada consulta queda en el historial de tu negocio) y, si el Pago Móvil no funciona, Los datos no funcionaron: tu cliente recibe tu mensaje y vuelve a indicarlo.

Plazo. Desde que se sabe a dónde enviarlo tienes 7 días para devolverlo y registrarlo; Billete te lo recuerda cada día. Si vence, tus cobros de ese entorno se pausan (account_suspended) hasta que lo registres.

Registrarlo. Con POST /v1/payments/:payment/refunds, sin amount o con el importe completo pendiente, y la reference de tu Pago Móvil: confirma ese mismo reembolso, sin crear otro. Otro importe responde refund_amount_mismatch.

Aprobación de reembolsos

En el dashboard, tu negocio puede pedir que los reembolsos desde un monto esperen la aprobación de otro propietario o administrador (Configuración › Cobros). Esa regla es para las personas del negocio: la API con tu clave secreta reembolsa como siempre. Un reembolso aprobado en el dashboard aparece en la API como cualquier otro, con su evento refund.created; si es manual, queda pendiente como se explica arriba.

Devolución al cliente

Tu cliente sigue su reembolso pendiente en la página alojada de Billete (/r/:token, el enlace de su correo). Si construyes la tuya, el cliente del navegador tiene client.refunds.retrieve(token) y client.refunds.setDestination(token, input):

GET /v1/client/refunds/:token
{
  "object": "refund",
  "merchant": { "name": "Café La Esquina", "logoUrl": null },
  "refund": {
    "amount": 1000,
    "currency": "VES",
    "status": "needs_destination",
    "destination": null,
    "problem": null,
    "reference": null,
    "paidAt": null
  }
}

merchant.logoUrl es el logo de tu negocio, si subiste uno en Configuración › General (null si no). status es needs_destination mientras espera dónde enviarlo, processing mientras tu negocio lo envía y paid cuando lo registró, con reference y paidAt. destination es el Pago Móvil enmascarado (Banesco · 0414 •••• 567) y problem, por qué no funcionó el anterior.

PUT /v1/client/refunds/:token/destination
{ "bank": "0134", "phone": "0414 1234567", "holderId": "V-12345678" }

holderId es la cédula o el RIF del titular. Solo se acepta mientras espera un destino; si no, responde 409 refund_destination_not_needed. Una vez indicado, tu cliente no lo cambia desde la página: te lo pide a ti, y tú usas Los datos no funcionaron. Un token que no es de un reembolso responde 404.

MétodoRutaAcción
POST / GET/v1/payments/:payment/refundsRegistrar / listar reembolsos