Cobros recurrentes
IrreversibleQué cubre#
Cuatro herramientas de lectura sobre los planes de cobro recurrente y sus suscriptores, y una sensible que pausa, reactiva o elimina un suscriptor. Esa última afecta cobros futuros: pedí confirmación humana antes de ejecutarla.
Herramientas#
Listar planes de cobro recurrente
Sólo lecturatilopay_recurring_list_plans
Lista los planes de cobro recurrente configurados en Tilopay.
Operación del API: POST /api/v1/getPlansRepeat
Parámetros
Sin parámetros.
Devuelve
{ result }
Respuesta cruda del API de Tilopay bajo la llave `result`.
Detalle de un plan recurrente
Sólo lecturatilopay_recurring_get_plan
Obtiene el detalle de un plan de cobro recurrente por su ID.
Operación del API: POST /api/v1/getPlanRepeat
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | sí | ID del plan |
Devuelve
{ result }
Respuesta cruda del API de Tilopay bajo la llave `result`.
Detalle de un suscriptor
Sólo lecturatilopay_recurring_get_subscriber
Obtiene el detalle de un suscriptor de un plan recurrente por su ID.
Operación del API: POST /api/v1/getSuscriptorRepeat
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | sí | ID del suscriptor |
Devuelve
{ result }
Respuesta cruda del API de Tilopay bajo la llave `result`.
Pagos de un suscriptor
Sólo lecturatilopay_recurring_subscriber_payments
Lista los pagos realizados por un suscriptor recurrente.
Operación del API: POST /api/v1/getSuscriptorPayments
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | sí | ID del suscriptor |
Devuelve
{ result }
Respuesta cruda del API de Tilopay bajo la llave `result`.
Cobros recurrentes fallidos
Sólo lecturatilopay_recurring_failed_payments
Lista los últimos cobros recurrentes que fallaron (plan, suscriptor, monto, fecha y motivo). Una sola llamada basta.
Operación del API: POST /api/v1/getSuscriptorPayments
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
limit | integer | — | Máximo de cobros (por defecto 10) |
startDate | string | — | Desde, "YYYY-MM-DD HH:mm:ss" |
endDate | string | — | Hasta, "YYYY-MM-DD HH:mm:ss" |
Devuelve
{ total, source, failures[] }
failures = cobros recurrentes rechazados, con plan, suscriptor, monto, moneda y motivo del rechazo; total = cuántos se encontraron; source = la ruta del API de la que se obtuvieron. Combina la consulta de planes, suscriptores y sus pagos.
Pausar, reactivar o eliminar un suscriptor
Sensibletilopay_recurring_manage_subscriber
Pausa, reactiva o elimina un suscriptor de un plan recurrente en Tilopay. Operación sensible: afecta cobros futuros y requiere segundo factor. Llámela primero sin `confirmation_code`: se envía un código de 6 dígitos al correo del comercio y la respuesta trae `requires_confirmation`. Repita la misma llamada agregando `confirmation_code`.
Operación del API: POST /api/v1/pauseSuscriptorRepeat, /reactiveSuscriptorRepeat o /deleteSuscriptorRepeat
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
idSubscriber | string | sí | ID del suscriptor |
action | string (pause | reactivate | delete) | sí | Acción a realizar |
confirmation_code | string | — | Código de 6 dígitos recibido por correo para autorizar la operación |
Devuelve
{ result }
Respuesta cruda del endpoint correspondiente a la acción: pause, reactivate o delete.
Crear plan de suscripción
Escrituratilopay_recurring_create_plan
Crea un plan de cobro recurrente (suscripción) en Tilopay con su título, moneda, frecuencia y modalidades (nombre y monto). Devuelve el ID del plan creado; luego use tilopay_recurring_subscription_url para obtener el enlace con el que los clientes se suscriben.
Operación del API: POST /api/v1/createPlanRepeat
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
title | string | sí | Título del plan |
modality | array<object> | sí | Modalidades del plan (al menos una): nombre y monto por ciclo |
frequency | string (diario | semanal | mensual | anual | quincenal | bimestral | trimestral | cuatrimestral | semestral) | sí | Frecuencia de cobro |
description | string | — | Descripción del plan |
currency | string | — | Moneda ISO 4217, ej. USD o CRC. Si se omite se usa la del país del comercio. |
first_amount | number | — | Monto del pago inicial (0 si no hay) |
trial_days | integer | — | Días de prueba gratis (0 si no hay prueba) |
attempts | integer | — | Reintentos ante un cobro fallido (1 por defecto) |
end_at | string | — | Fecha de fin del plan en formato DD-MM-YYYY (opcional) |
thanks_url | string | — | URL de agradecimiento tras suscribirse (opcional) |
webhook_subscribe | string | — | Webhook al suscribirse un cliente (opcional) |
webhook_payment | string | — | Webhook al cobrarse un pago (opcional) |
webhook_rejected | string | — | Webhook al rechazarse un cobro (opcional) |
webhook_unsubscribe | string | — | Webhook al cancelarse una suscripción (opcional) |
webhook_reactive | string | — | Webhook al reactivarse una suscripción (opcional) |
Devuelve
{ result, currency, frequency }
result = respuesta del API con el plan creado; currency y frequency = la moneda y la frecuencia con la que quedó el plan.
Editar plan de suscripción
Escrituratilopay_recurring_edit_plan
Modifica un plan de cobro recurrente existente: título, descripción, frecuencia, moneda, monto por ciclo (modality), pago inicial, prueba gratis, reintentos, estado o fecha de fin. Consulte primero tilopay_recurring_get_plan para conocer los valores actuales.
Operación del API: POST /api/v1/editPlanRepeat
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | sí | ID del plan |
title | string | sí | Título del plan |
frequency | string (diario | semanal | mensual | anual | quincenal | bimestral | trimestral | cuatrimestral | semestral) | sí | Frecuencia de cobro |
modality | array<object> | — | Modalidades con su monto por ciclo; envíelas cuando cambie el precio del plan |
currency | string | — | Moneda ISO 4217 |
description | string | — | Descripción del plan |
first_amount | number | — | Monto del pago inicial |
trial_days | integer | — | Días de prueba gratis |
attempts | integer | — | Reintentos ante cobro fallido |
status | string (inactive | active | closed_to_new) | — | Estado: inactive (inactivo), active (activo) o closed_to_new (activo sin registros nuevos) |
end_at | string | — | Fecha de fin del plan en formato DD-MM-YYYY (opcional) |
thanks_url | string | — | URL de agradecimiento |
webhook_subscribe | string | — | Webhook al suscribirse |
webhook_payment | string | — | Webhook al cobrarse un pago |
webhook_rejected | string | — | Webhook al rechazarse un cobro |
webhook_unsubscribe | string | — | Webhook al cancelarse |
webhook_reactive | string | — | Webhook al reactivarse |
Devuelve
{ result }
result = respuesta del API al editar el plan. Los campos que no se envían se conservan.
Eliminar plan de suscripción
Sensibletilopay_recurring_delete_plan
Elimina un plan de cobro recurrente en Tilopay. Afecta los cobros futuros del plan: confirme con el comercio antes de ejecutarla.
Operación del API: POST /api/v1/deletePlanRepeat
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | sí | ID del plan |
Devuelve
{ result }
result = respuesta del API al eliminar el plan. Los suscriptores del plan dejan de cobrarse.
Enlace de suscripción a un plan
Sólo lecturatilopay_recurring_subscription_url
Devuelve el enlace con el que un cliente se registra en un plan recurrente (o lo renueva si el correo ya está suscrito). Entregue la URL completa, sin recortarla.
Operación del API: POST /api/v1/recurrentUrl
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | sí | ID del plan |
email | string | — | Correo del cliente; si ya está suscrito devuelve el enlace de renovación |
Devuelve
{ url, result }
url = enlace de suscripción al plan, para compartir con el cliente; result = respuesta del API tal cual.
Editar suscriptor de un plan
Sensibletilopay_recurring_edit_subscriber
Cambia el estado de un suscriptor (activo, pausado o eliminado) y/o su fecha de expiración. Afecta cobros futuros: confirme con el comercio antes de ejecutarla.
Operación del API: POST /api/v1/editSuscriptorRepeat
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | sí | ID del suscriptor |
status | string (active | paused | deleted) | — | Nuevo estado del suscriptor |
expire | string | — | Fecha de expiración del plan para ese suscriptor en formato YYYY-MM-DD |
Devuelve
{ result }
result = respuesta del API al editar los datos del suscriptor (correo, teléfono, monto o fecha de vencimiento, según el plan).
Crear cupón de descuento
Escrituratilopay_recurring_create_coupon
Crea un cupón de descuento para un plan de suscripción: porcentaje o monto fijo, fecha de vencimiento, correos permitidos y límites de uso.
Operación del API: POST /api/v1/createCoupon
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
planId | string | sí | ID del plan recurrente |
discount_type | string (percentage | fixed) | sí | Tipo de descuento: percentage (porcentaje) o fixed (monto fijo) |
discount | number | sí | Valor del descuento |
expire | string | sí | Fecha de vencimiento del cupón en formato YYYY-MM-DD |
allow_existing_users | boolean | — | true si también lo pueden usar clientes ya registrados (false = solo nuevos) |
emails | array<string> | — | Correos autorizados; si se omite, cualquier correo puede usarlo |
usage | integer | — | Cantidad total de usos |
renews | integer | — | Renovaciones válidas con el cupón |
renews_by_user | integer | — | Usos por un mismo cliente |
Devuelve
{ result }
result = respuesta del API con el cupón de descuento creado para el plan.
Cupones de un plan
Sólo lecturatilopay_recurring_list_coupons
Lista los cupones de descuento asociados a un plan de suscripción.
Operación del API: POST /api/v1/getRepeatCoupons
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
planId | string | sí | ID del plan recurrente |
Devuelve
{ result }
result = cupones del plan tal cual los devuelve el API.
Detalle de un cupón
Sólo lecturatilopay_recurring_get_coupon
Obtiene el detalle de un cupón de descuento por su ID.
Operación del API: POST /api/v1/getCoupon
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | sí | ID del cupón |
Devuelve
{ result }
result = detalle de un cupón tal cual lo devuelve el API.
Eliminar un cupón
Sensibletilopay_recurring_delete_coupon
Elimina un cupón de descuento de un plan de suscripción.
Operación del API: POST /api/v1/deleteCoupon
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | sí | ID del cupón |
Devuelve
{ result }
result = respuesta del API al eliminar el cupón.
Iniciar paso a paso de un plan de suscripción
Escrituratilopay_recurring_plan_wizard_start
Inicia el paso a paso guiado para crear (mode=create) o editar (mode=edit con plan_id) un plan de suscripción. Devuelve la primera pregunta pendiente: entréguela al comercio tal cual y pase su respuesta a tilopay_recurring_plan_wizard_answer. Úselo en vez de tilopay_recurring_create_plan cuando falte algún dato.
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
mode | string (create | edit) | sí | create para un plan nuevo, edit para modificar uno existente |
plan_id | string | — | ID del plan (obligatorio en mode=edit) |
title | string | — | Título, si el comercio ya lo dijo |
frequency | string (diario | semanal | quincenal | mensual | bimestral | trimestral | cuatrimestral | semestral | anual) | — | Frecuencia, si el comercio ya la dijo |
amount | number | — | Monto por ciclo, si el comercio ya lo dijo |
currency | string | — | Moneda ISO si el comercio la indicó con símbolo o nombre ($ o dólares = USD, ₡ o colones = CRC) |
description | string | — | Descripción, si ya la dijo |
Devuelve
{ draft }
draft = borrador del plan en proceso, con lo que ya se respondió y el siguiente paso pendiente. No crea nada en Tilopay hasta confirmar.
Responder un paso del plan de suscripción
Escrituratilopay_recurring_plan_wizard_answer
Guarda la respuesta del comercio al paso actual del plan de suscripción y devuelve la siguiente pregunta o el resumen para confirmar. Entregue el texto devuelto tal cual, sin agregar preguntas propias.
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
answer | string | sí | Lo que respondió el comercio, tal cual |
Devuelve
{ draft }
draft = el borrador actualizado con la respuesta del paso y el siguiente paso pendiente.
Confirmar el plan de suscripción
Escrituratilopay_recurring_plan_wizard_confirm
Crea o edita el plan de suscripción con los datos del paso a paso, después de que el comercio dijo sí al resumen. Al crear devuelve además el enlace de suscripción: entréguelo completo, sin recortarlo.
Operación del API: POST /api/v1/createPlanRepeat
Parámetros
Sin parámetros.
Devuelve
{ plan_id, subscription_url }
Crea el plan con lo que se armó paso a paso: plan_id = id del plan creado; subscription_url = enlace de suscripción para compartir.
Cancelar el paso a paso del plan
Escrituratilopay_recurring_plan_wizard_cancel
Descarta el plan de suscripción que estaba en proceso sin crear ni cambiar nada.
Parámetros
Sin parámetros.
Devuelve
Descarta el borrador del plan en proceso. No crea ni cambia nada en Tilopay; devuelve sólo la confirmación en texto.
Enlace de pago para poner al día un cobro recurrente fallido
Escrituratilopay_recurring_settle_link
Crea un enlace de pago por el monto de un cobro recurrente que falló y lo asocia al suscriptor del plan. Cuando el cliente paga ese enlace, la suscripción queda al día automáticamente: el suscriptor se reactiva y su fecha de expiración avanza al siguiente ciclo. Úsala cuando el comercio acepte enviarle el enlace al cliente de un cobro fallido (los datos salen de tilopay_recurring_failed_payments). Devuelve la URL del enlace y, si hay teléfono, un enlace de WhatsApp listo para enviarle al cliente.
Operación del API: POST /api/v1/createLinkPayment — ver la página de la operación
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
subscriber_id | string | sí | ID del suscriptor con el cobro fallido |
amount | number | sí | Monto pendiente del cobro fallido |
currency | string | — | Moneda del cobro. Si se omite se usa la del país del comercio. |
plan_id | string | — | ID del plan de suscripción |
plan_name | string | — | Nombre del plan, para el concepto del cobro |
frequency | string (diario | semanal | quincenal | mensual | bimestral | trimestral | cuatrimestral | semestral | anual) | — | Frecuencia del plan; si se omite se consulta al plan o se asume mensual |
client_name | string | — | Nombre del cliente |
client_email | string | — | Correo del cliente |
client_phone | string | — | Teléfono del cliente en formato internacional, para el enlace de WhatsApp |
message | string | — | Mensaje propio para el cliente; si se omite se arma uno |
Devuelve
{ url, linkId, whatsapp_url, currency, amount, subscriber_id, frequency }
Crea un enlace de pago de un solo uso para que el suscriptor ponga al día un cobro recurrente fallido: url = enlace de pago; whatsapp_url = enlace de WhatsApp listo para enviarlo; linkId = id del enlace creado.
Poner al día un suscriptor
Escrituratilopay_recurring_mark_settled
Marca al suscriptor como al día en su plan: lo deja activo y corre su fecha de expiración al siguiente ciclo. Úsala cuando el cobro pendiente ya se pagó por otro medio. Si el pago se hizo con el enlace de tilopay_recurring_settle_link, no hace falta: se actualiza solo. Confirme con el comercio antes de ejecutarla.
Operación del API: POST /api/v1/editSuscriptorRepeat
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
subscriber_id | string | sí | ID del suscriptor |
plan_id | string | — | ID del plan de suscripción |
frequency | string (diario | semanal | quincenal | mensual | bimestral | trimestral | cuatrimestral | semestral | anual) | — | Frecuencia del plan; si se omite se consulta al plan o se asume mensual |
expire | string | — | Nueva fecha de expiración YYYY-MM-DD; si se omite se calcula el siguiente ciclo |
Devuelve
{ ok, expire, frequency }
Corre la fecha de vencimiento del suscriptor según la frecuencia del plan, para dejarlo al día después de recuperar un cobro fallido. expire = la nueva fecha de vencimiento.
Última verificación: 2026-09-02 · Responsable: equipo-integraciones