Opciones de facturación para suscripciones
Opciones de facturación para suscripciones
Al crear un producto o checkout con charge_type: "recurring", tres campos trabajan juntos para controlar cuándo y cuánto se cobra la primera vez:
billing_cycle_anchor_day por sí solo no cambia el primer cobro: únicamente surte efecto cuando se combina con proration_behavior: create_prorations o defer_to_billing_day: true.
Qué pasa en cada combinación
Un cliente se suscribe el 10 de abril a un plan mensual de GTQ 300, con billing_cycle_anchor_day: 15:
A partir del segundo cobro, los cobros ocurren el día 15 de cada mes.
Si una suscripción tiene período de prueba gratuito (free_trial_interval), tanto el prorrateo como el diferimiento se ignoran. El trial toma precedencia.
Ejemplo 1: Cobro proporcional desde el primer día
Cobra solo los días restantes hasta el día de cobro. El siguiente cobro será el monto completo el día de anclaje.
En el checkout, el cliente verá el monto mensual completo menos un ítem de crédito por los días no usados. La diferencia es el monto prorrateado que se cobra hoy.
Ejemplo 2: Diferir el primer cobro hasta el día de cobro
No cobra nada al crear la suscripción. Solo tokeniza la tarjeta (vía SetupIntent); el primer cobro completo ocurre automáticamente en la próxima fecha de anclaje.
Cuando el cliente completa el checkout, recibirás un webhook setup_intent.succeeded (no payment_intent.succeeded) porque no hubo cobro. El webhook subscription.create llega al mismo tiempo con la suscripción ya activa. El primer cobro real dispara payment_intent.succeeded el día de anclaje.
proration_behavior: create_prorations y defer_to_billing_day: true son mutuamente excluyentes: si ambos están activos, el prorrateo toma precedencia y el primer cobro se hace hoy con el monto prorrateado.
Cómo leer la próxima fecha de cobro
Después de crear una suscripción, la respuesta de GET /api/subscriptions/{id} incluye current_period_end, que es la fecha del siguiente cobro automático:
- Si usaste
proration_behavior: create_prorations,current_period_endapunta a la próxima fecha de anclaje (cuando se hará el primer cobro completo). - Si usaste
defer_to_billing_day: true,current_period_endapunta al día de anclaje (cuando se hará el primer cobro). - Sin ninguno,
current_period_endescreated_at + billing_interval.
Consideraciones
- Solo funciona con intervalos mensuales. Los campos
billing_cycle_anchor_day,proration_behaviorydefer_to_billing_dayaplican únicamente cuandobilling_intervalesmonth. - Si el mes tiene menos días que
billing_cycle_anchor_day, el cobro se hace el último día del mes. Por ejemplo,billing_cycle_anchor_day: 31cobra el 28 en febrero. - Cambiar el precio de una suscripción activa no es posible vía API (
PUT /api/products/{id}no permite editar precios con suscripciones activas).

