autoRenew is enabled, or manually by calling POST /subscriptions/renew-subscriptions.EXPIRED and the mailbox is disabled.| Status | Mailbox works? | Description |
|---|---|---|
ACTIVE | ✅ Yes | Subscription is current |
RENEWING | ✅ Yes | Renewal payment is processing |
PAST_DUE | ⚠️ Limited | Payment failed |
CANCELLED | ❌ No | Explicitly cancelled by partner |
EXPIRED | ❌ No | Subscription not renewed — mailbox disabled |
[ACTIVE] ──→ [RENEWING] ──→ [ACTIVE] (payment succeeded)
↓
[PAST_DUE] (payment failed)
├──→ [ACTIVE] (renewed via API or auto-renew)
└──→ [EXPIRED] (not renewed)
[ACTIVE] ──→ [CANCELLED] (partner cancelled)| Cycle | Price | Notes |
|---|---|---|
MONTHLY | $3.00/mailbox/month | Billed monthly |
POST /subscriptions/recreate to reset pricing without mailbox downtime. See 1+ Year Subscriptions.| Method | Endpoint | Description |
|---|---|---|
GET | /subscriptions?userId= | List subscriptions for a user |
POST | /subscriptions/renew-subscriptions | Manually renew one or more subscriptions |
POST | /subscriptions/toggle-autorenewal | Enable or disable auto-renewal per subscription |
POST | /subscriptions/cancel | Cancel one or more subscriptions immediately |
POST | /subscriptions/recreate | Recreate subscriptions to reset pricing |
| Event | Fired when |
|---|---|
subscription.renewing | Renewal payment is being processed |
subscription.renewal.success | Renewal payment succeeded |
subscription.renewal.failed | Renewal payment failed → PAST_DUE |
subscription.past_due | Subscription entered past-due state |
subscription.cancelled | Cancelled by partner |
subscription.expired | Subscription not renewed → EXPIRED |
subscription.updated | Subscription record updated |
subscription.past_due fires — identify the affected subscriptions.POST /subscriptions/renew-subscriptions with the affected subscriptionIds, or enable auto-renew via POST /subscriptions/toggle-autorenewal.subscription.renewal.success — mailbox is restored.POST /subscriptions/cancel is immediate and permanent. The mailbox moves to EXPIRED instantly with no prorated refunds.POST /subscriptions/toggle-autorenewal instead.GET /subscriptions?userId= — find subscriptions approaching or past 12 months.POST /subscriptions/recreate with subscriptionIds or domainNames. Pricing resets to $3/month with no mailbox downtime.POST /subscriptions/renew-subscriptions or ensure auto-renew is enabled. Subscriptions that are not renewed will expire.CANCELLED is a permanent partner action. EXPIRED means the subscription was not renewed — it can still be recovered. Treat these differently in your UI.POST /subscriptions/cancel expires the mailbox instantly. Use toggle-autorenewal if you only want to stop future renewals.POST /subscriptions/recreate proactively to reset the cycle without downtime.