Saltar al contenido principal
Migo Docs

Suscripciones

Una Subscription asocia un plan con un usuario/cliente y un método de pago por defecto.

Cómo se crea una suscripción

No existe un endpoint público POST /v1/subscriptions. Una suscripción se crea internamente durante la verificación de tarjeta, ligada a una transacción existente.

Para crear una suscripción llamas POST /v1/subscriptions/verify-card con shouldCreateSubscription: true (y un planUid). El flujo verify-card tokeniza la tarjeta, la preautoriza contra la transacción existente, revierte esa autorización y — cuando shouldCreateSubscription está activo — crea la suscripción como parte del mismo flujo.

curl -X POST https://mw.migopayments.com/v1/subscriptions/verify-card \
-H "Authorization: Bearer <middleware-jwt>" \
-H "Content-Type: application/json" \
-d '{
"uid": "<transaction-uid>",
"processor": "<processor-slug>",
"cardInfo": { "...": "card data tokenized by the processor" },
"shouldCreateSubscription": true,
"planUid": "<plan-uid>"
}'

Ver Métodos de pago → Verificar una tarjeta para el contrato completo de verify-card.

La función interna createSubscription (invocada por el flujo verify-card, no expuesta como ruta HTTP) recibe:

CampoNotas
clientNombre del cliente / tenant
clientIdIdentificador del cliente
planUidPlan al que se va a suscribir
currencyMoneda de la suscripción
trxUidUID de la transacción de origen
trxIdId de la transacción de origen
userIdId de usuario del tarjetahabiente
notificationEmailOpcional — email para las notificaciones de la suscripción

No existen los campos planId, cardholderId, cardId, externalId, metadata, trialOverrideDays ni startAt.

Estados de la suscripción

Una suscripción tiene exactamente cuatro estados:

EstadoSignificado
activePagada y al día
cancelledCancelada por ti o por el tarjetahabiente
expiredSuscripción de plazo fijo que llegó a su fin
inactiveSe agotaron los reintentos de cobro — la facturación se detuvo

No existe el estado trialing, past_due, unpaid ni paused. Cuando se agotan los reintentos de cobro, la suscripción pasa a inactive.

Obtener una suscripción

curl https://mw.migopayments.com/v1/subscriptions/detail/sub_01HAAA \
-H "Authorization: Bearer <middleware-jwt>"

Listar suscripciones

GET /v1/subscriptions requiere ambos parámetros de query userId y clientId (devuelve 400 si falta cualquiera). La respuesta es un arreglo sin paginación.

curl "https://mw.migopayments.com/v1/subscriptions?userId=<userId>&clientId=<clientId>" \
-H "Authorization: Bearer <middleware-jwt>"

Respuesta:

{
"success": true,
"message": "subscriptions found",
"data": [
{ "planName": "Pro Monthly", "uid": "sub_01HAAA", "URL": "https://.../subscriptions/sub_01HAAA" }
]
}

No existen filtros status, planId, cardholderId, createdAfter ni createdBefore, ni paginación page / limit.

Actualizar una suscripción

PUT /v1/subscriptions solo actualiza el email de notificación de la suscripción. No cambia el plan, el estado ni el método de pago por defecto.

curl -X PUT https://mw.migopayments.com/v1/subscriptions \
-H "Authorization: Bearer <middleware-jwt>" \
-H "Content-Type: application/json" \
-d '{
"subUid": "sub_01HAAA",
"email": "billing@example.com"
}'

Pausar/reanudar, cambiar de plan y prorratear no están soportados por la API actual.

Cambiar el método de pago por defecto

Usa Métodos de pago → Definir por defecto.

Cancelar una suscripción

curl -X DELETE https://mw.migopayments.com/v1/subscriptions/sub_01HAAA \
-H "Authorization: Bearer <middleware-jwt>"

La cancelación es inmediata: el estado de la suscripción se define en cancelled. No existen las opciones cancelAt, immediate ni period_end.

Notificaciones

El flujo de suscripción envía notificaciones por email (vía el mecanismo notifyEvent del middleware) y un callback al comercio (subsCallback); no emite un contrato público de webhook saliente con eventos subscription.*.

Los tipos de notificación por email que emiten los flujos de suscripción/cron incluyen: addPaymentMethod, deletePaymentMethod, cancelSubscription, subPayProblem, subscriptionSuspended y notifyCardExpiration.

Eventos como subscription.created, subscription.updated, subscription.trial_ending, subscription.paused, subscription.payment_succeeded y subscription.payment_failed no existen en el código.