Kobana

Ciclo de vida completo de las suscripciones, con prorrateo nativo.

7 estados, 4 ciclos, 3 métodos de cobro. Trial, upgrade/downgrade, pausa, cancelación programada. Versionado histórico en cada cambio.

Funcionalidad
Lista de suscripciones con estado, MRR y próximo ciclo
7
estados de suscripción
4
ciclos de facturación
24/7
procesamiento automático
100%
cambios versionados

Estados modelados en SubscriptionStatus

Cada transición se registra como SubscriptionVersion (hybrid SCD type-2) para auditoría completa.

Draft
Creada vía dashboard pero aún no confirmada. Sin cobro.
  • Transiciones: → confirmed (confirmación manual)
Confirmed
Lista para iniciar. Awaiting trial start o primer cobro.
  • Transiciones: → trialing (con trial) | → active (sin trial)
Trialing
Período gratuito antes del primer cobro. Trial sin tarjeta soportado.
  • Transiciones: → active (fin del trial) | → canceled (cancelación durante trial)
Active
Cobro recurrente activo. Worker subscription-renewal (diario 00:00 UTC) renueva el ciclo.
  • Transiciones: → past_due (pago falla) | → paused | → canceled
Past Due
El pago falló. Worker payment-retry reintenta cada 6h. Worker suspension-check suspende después del período de gracia.
  • Transiciones: → active (pago OK) | → canceled (todos los intentos fallaron)
Paused
Pausa del cliente (pauseCollection almacena razón y timestamp). Sin cobro hasta reanudación.
  • Transiciones: → active (cliente reanuda)
Canceled
Finalizada. cancelAtPeriodEnd permite cancelación programada al fin del ciclo.
  • Estado final

Qué puedes hacer

Ciclos de Facturación
Define el ciclo por plan o por suscripción. billing_cycle_anchor ancla la fecha de renovación.
  • Mensual, trimestral, semestral, anual
  • Anchor configurable (no necesita empezar el día 1)
  • current_period_start y current_period_end calculados
Trial Flexible
Trial en días, con o sin tarjeta. Notificación automática antes del fin vía worker trial-ending (diario 09:00 UTC).
  • trial_period_days por plan o override por suscripción
  • Conversión automática a active
  • Cancelación durante trial sin cobro
Upgrade/Downgrade con Prorrateo
3 comportamientos: create_prorations (default), none, always_invoice. Fórmula: (plan_value / days_in_cycle) × days_remaining.
  • Vista previa antes de confirmar (sin efecto colateral)
  • Upgrade inmediato, downgrade end-of-period (configurable)
  • Crédito generado en downgrade (creditOnDowngrade)
Cambio de Ítems (PlanChange)
Los cambios de plan se registran como PlanChange + SubscriptionItemChange. Idempotencia vía Idempotency-Key header.
  • Versionado completo
  • Reglas por par de planes (PlanChangeRule)
  • Promoción scheduled → done por worker dedicado
Pausa y Reanudación
pauseCollection JSON almacena razón, fecha, regla de reanudación. allowPause configurable por suscripción.
  • Pausa indefinida o con fecha de reanudación
  • Historial completo en el portal del cliente
  • Webhook subscription.paused / subscription.resumed
Métodos de Cobro
CollectionMethod controla la generación y cobro de las facturas.
  • charge_automatically: todo automático (tarjeta)
  • manual_charge: factura automática, cobro manual (boleto/PIX)
  • manual_invoice: todo manual (one-off)
Cancelación Inteligente
cancel_at_period_end programa la cancelación para fin del ciclo. canceled_at + cancellationReason registrados.
  • Cancelación inmediata o programada
  • Razón libre para análisis de churn
  • Webhook + AuditLog
Renovación Automática
renewalSettings JSON controla auto-renew, end_of_commitment o prompt. Worker subscription-renewal procesa diariamente.
  • Renovación 100% automatizada
  • Soporte a commitment (12 meses, 24 meses)
  • Idempotencia por subscription + period

Crear suscripción vía API

bash
curl -X POST https://api.billing.kobana.com.br/v1/subscriptions \
  -H "Authorization: Bearer sk_live_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "billing_account_id": "ba_abc123",
    "plan_id": "plan_growth_monthly",
    "trial_period_days": 14,
    "collection_method": "charge_automatically",
    "metadata": { "source": "checkout", "campaign": "q3-2026" }
  }'
response
{
  "id": "sub_xyz789",
  "status": "trialing",
  "billing_cycle": "monthly",
  "trial_end": "2026-06-20T00:00:00Z",
  "current_period_start": "2026-06-06T00:00:00Z",
  "current_period_end": "2026-07-06T00:00:00Z",
  "recurring_amount_cents": 29900,
  "items": [
    { "id": "si_1", "product_id": "prod_platform", "quantity": 1 }
  ]
}

Perguntas frequentes

¿Listo para automatizar tus suscripciones?