Skip to main content
TapiPay puede cobrar tus deudas por domiciliación bancaria sin que declares un medio de pago en cada deuda: el cobro lo gobierna el medio de pago default que cada usuario final registra una sola vez. Este flujo vive en POST /v2/debts.

Cómo funciona

El modelo se apoya en tres piezas:

Productos

Cada deuda pertenece a un producto (por ejemplo “Colegiatura”). La domiciliación se gestiona por producto: al enrolarse, el usuario se adhiere al producto completo.

Medio de pago default

El usuario registra su cuenta una sola vez en la página de enrolamiento de TapiPay (no por API). Ese medio queda como default y ejecuta los cobros.

Deudas v2

Creas las deudas por API referenciando el producto. La respuesta te dice si el cobro automático quedó activo y por qué.
En POST /v2/debts la deuda no declara medio de pago: los campos paymentMethods y autopay no se aceptan y devuelven 400 INVALID_REQUEST (solo aplican a suscripciones). Si el usuario tiene un default debitable, la adhesión se gestiona sola en cada creación de deuda.

Requisitos previos

  • Tu compañía debe tener habilitado el medio de pago default (se configura con tu ejecutivo de Tapi).
  • Tus productos deben existir antes de crear deudas. Puedes crearlos con tu propio identificador (externalProductId) para no guardar IDs de Tapi.

Crear una deuda

La identidad del producto viaja por uno solo de estos dos campos (nunca ambos): El resto del contrato es el mismo de crear una deuda: monto, vencimiento, deudor.
Respuesta 201
autopayReason solo aparece en la respuesta cuando autopay es false (el motivo del rechazo). Cuando autopay es true, la clave no está presente. autopayInstrument solo aparece cuando autopay es true.
productName no se acepta en POST /v2/debts: los productos nunca se crean desde este endpoint. Enviarlo devuelve 400 INVALID_REQUEST. Los campos paymentMethods, paymentMethod y autopay tampoco se aceptan (400 INVALID_REQUEST): el medio con el que se cobra automáticamente siempre lo define el default del usuario, nunca el body de la deuda. En general, POST /v2/debts rechaza con 400 cualquier campo fuera de su contrato e indica el campo en details[].field. Ver los campos aceptados en Deudas.

Crear varias deudas en un request

El mismo endpoint acepta hasta 50 deudas por request enviando el sobre debts. Cada ítem tiene el mismo contrato que una deuda suelta más un externalRequestId obligatorio y único dentro del lote: es la idempotencia de cada deuda (el header Idempotency-Key no se usa en este modo). Si el body trae debts, solo se acepta debts en el nivel superior: cualquier otro campo en la raíz devuelve 400. Un array JSON en la raíz, sin el sobre { "debts": [...] }, también devuelve 400.
Cómo se comporta:
Las deudas del lote se crean de forma independiente: una que falle en el sistema de cobranzas no frena a las demás. Los code de errors[] son los mismos que devolvería el endpoint para una deuda suelta. Un externalRequestId que ya existía devuelve la deuda existente sin duplicarla.
Cuando varias deudas del lote son del mismo deudor o del mismo producto, esa información se resuelve una sola vez para todo el request. Agrupar las deudas de un mismo usuario en el mismo lote hace el request más rápido.

El resultado del cobro automático

Cada respuesta incluye autopay y, cuando es false, el motivo en autopayReason:
La deuda siempre se crea, tenga o no cobro automático. autopay: false no es un error: esa deuda se paga por los medios tradicionales (su paymentUrl) hasta que el usuario se enrole. Al crear la siguiente deuda del producto, la adhesión se retoma sola.
autopayInstrument es una referencia al instrumento: nunca viajan datos sensibles (la CLABE no se expone ni se almacena en este servicio).

Consultar los medios de pago de un usuario

GET /payment-methods lista las referencias de los medios que registró un usuario. externalClientId es obligatorio, debe ser exactamente el mismo identificador del enrolamiento y no admite los caracteres ', ", \, ;. La respuesta no está paginada.
Respuesta 200
paymentMethodType puede ser: Si el externalClientId no tiene medios registrados o no existe, la respuesta es 200 con data: []. Además del 400 por externalClientId faltante o inválido, el endpoint puede responder 404 RESOURCE_NOT_FOUND o 422 BUSINESS_RULE_VIOLATION.

Reglas a tener en cuenta

  • Un solo default por usuario: el primer medio registrado queda como default automáticamente; los siguientes no lo desplazan salvo pedido explícito durante el enrolamiento.
  • Producto inexistente: un productId o externalProductId que no existe devuelve 404 RESOURCE_NOT_FOUND y la deuda no se crea.