Gestionar Suscripciones
Gestiona el ciclo de vida completo de las suscripciones de tus clientes.
Las suscripciones conectan a un cliente con un plan y manejan los cobros recurrentes de forma automática. Cada cliente puede tener una suscripción activa a la vez. Créala vía SDK o dashboard, y Commet gestiona el checkout, los recibos y las transiciones del ciclo de vida.
Ciclo de vida de la suscripción
| Estado | Descripción | Ejemplo |
|---|---|---|
| Draft | Creada pero aún no activada | Suscripción recién asignada, sin checkout enviado |
| Trialing | Período de trial gratuito activo | Trial de 14 días en el plan Pro |
| Pending Payment | Checkout enviado, esperando pago | El cliente recibió el link de checkout pero no pagó |
| Active | Cobrando con normalidad | Recibo mensual pagado, features habilitadas |
| Paused | Pausada temporalmente, sin cobros | El cliente pidió una pausa |
| Past Due | Pago fallido, en período de gracia | Tarjeta rechazada, reintento programado |
| Canceled | Ya no cobra | El cliente canceló o llegó al fin del período |
| Expired | Llegó a la fecha de fin programada | Suscripción a plazo fijo terminada |
Gestión desde el dashboard
Desde la página de detalle del cliente, puedes asignar un plan, cambiar de plan, cancelar o regenerar un link de checkout si el original expiró. Si tus planes están en un Plan Group, los clientes también pueden cambiar de plan por sí mismos desde el Portal del Cliente.
Crear una suscripción
const subscription = await commet.subscriptions.create({
customerId: 'user_123',
planCode: 'pro',
})
redirect(subscription.data.checkoutUrl)subscription = commet.subscriptions.create(
customer_id="user_123",
plan_code="pro",
)
redirect(subscription.data["checkout_url"])subscription, err := client.Subscriptions.Create(ctx, &commet.CreateSubscriptionParams{
CustomerID: "user_123",
PlanCode: "pro",
})
redirect(subscription.Data.CheckoutURL)var subscription = commet.subscriptions().create("user_123", "pro");
redirect(subscription.getData().get("checkout_url"));$subscription = $commet->subscriptions->create(
customerId: 'user_123',
planCode: 'pro',
);
redirect($subscription->data['checkout_url']);curl -X POST https://commet.co/api/subscriptions \
-H "x-api-key: $COMMET_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerId": "user_123",
"planCode": "pro"
}'Devuelve un checkoutUrl — redirige al usuario ahí para completar el pago.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
customerId | string | ID del cliente en Commet (cus_xxx) o tu ID externo |
planCode | string | Código del plan (alternativa a planId) |
planId | string | UUID del plan (alternativa a planCode) |
billingInterval | string | weekly, monthly, quarterly, yearly o one_time |
initialSeats | object | Códigos de tipo de licencia mapeados a cantidades |
skipTrial | boolean | Saltar el período de trial del plan |
successUrl | string | URL de redirección tras pago exitoso |
Obtener suscripción
const sub = await commet.subscriptions.get('user_123')
if (sub.data?.status === 'active') {
// El usuario pagó
}sub = commet.subscriptions.get("user_123")
if sub.data and sub.data["status"] == "active":
# El usuario pagósub, err := client.Subscriptions.Get(ctx, "user_123")
if sub.Data != nil && sub.Data.Status == "active" {
// El usuario pagó
}var sub = commet.subscriptions().get("user_123");
if ("active".equals(sub.getData().get("status"))) {
// El usuario pagó
}$sub = $commet->subscriptions->get('user_123');
if ($sub->data['status'] === 'active') {
// El usuario pagó
}curl "https://commet.co/api/subscriptions/active?customerId=user_123" \
-H "x-api-key: $COMMET_API_KEY"Cancelar
await commet.subscriptions.cancel({
subscriptionId: 'sub_xxx',
})commet.subscriptions.cancel(subscription_id="sub_xxx")_, err := client.Subscriptions.Cancel(ctx, &commet.CancelSubscriptionParams{
SubscriptionID: "sub_xxx",
})commet.subscriptions().cancel("sub_xxx");$commet->subscriptions->cancel(subscriptionId: 'sub_xxx');curl -X POST https://commet.co/api/subscriptions/sub_xxx/cancel \
-H "x-api-key: $COMMET_API_KEY"Por defecto, la suscripción sigue activa hasta el fin del ciclo de cobro actual. El uso metered pendiente se cobra en el recibo final.
Cancelar de inmediato
Para cancelar una suscripción ahora mismo en lugar de al fin del período, pasa immediate: true. El estado de la suscripción cambia a canceled y la fecha de fin se setea a ahora.
await commet.subscriptions.cancel({
subscriptionId: 'sub_xxx',
immediate: true,
})commet.subscriptions.cancel(subscription_id="sub_xxx", immediate=True)_, err := client.Subscriptions.Cancel(ctx, &commet.CancelSubscriptionParams{
SubscriptionID: "sub_xxx",
Immediate: commet.Bool(true),
})commet.subscriptions().cancel("sub_xxx", CancelParams.builder().immediate(true).build());$commet->subscriptions->cancel(subscriptionId: 'sub_xxx', immediate: true);curl -X POST https://commet.co/api/subscriptions/sub_xxx/cancel \
-H "x-api-key: $COMMET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"immediate": true}'Las suscripciones canceladas no se pueden reactivar — crea una nueva.
Aprende más
Relacionado
- Gestionar Planes — Crea planes de precios que impulsan suscripciones
- Upgrade y Downgrade de Planes — Cómo funcionan los cambios de plan
- Períodos de Trial — Configura períodos de trial gratuitos
- Portal del Cliente — Portal self-service de cobros para clientes
¿Cómo está esta guía?