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.Crear varias deudas en un request
El mismo endpoint acepta hasta 50 deudas por request enviando el sobredebts. 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.
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.El resultado del cobro automático
Cada respuesta incluyeautopay y, cuando es false, el motivo en autopayReason:
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
productIdoexternalProductIdque no existe devuelve404 RESOURCE_NOT_FOUNDy la deuda no se crea.

