A Subscription is the billing record tied to a mailbox.Every mailbox gets one automatically when provisioned. If a subscription lapses, the mailbox stops working.
How Subscriptions Work#
Subscriptions are created when a mailbox is ordered and renew automatically on a monthly or yearly cycle.Renewal happens in one of two ways — automatically if autoRenew is enabled, or manually by calling POST /subscriptions/renew-subscriptions.If a subscription is not renewed, it eventually moves to EXPIRED and the mailbox is disabled.
Subscription Statuses#
| 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 |
State Machine#
[ACTIVE] ──→ [RENEWING] ──→ [ACTIVE] (payment succeeded)
↓
[PAST_DUE] (payment failed)
├──→ [ACTIVE] (renewed via API or auto-renew)
└──→ [EXPIRED] (not renewed)
[ACTIVE] ──→ [CANCELLED] (partner cancelled)
Billing Cycles#
| Cycle | Price | Notes |
|---|
MONTHLY | $3.00/mailbox/month | Billed monthly |
Mailbox pricing starts at $3.00 per mailbox/month.
Subscriptions active for more than 12 months automatically renew at $5.00 per mailbox/month. Use POST /subscriptions/recreate to reset pricing without mailbox downtime. See 1+ Year Subscriptions. Volume Discounts: Pricing can be negotiated for partners with high mailbox volumes. Contact the Support for custom pricing.
Available Endpoints#
| 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 |
Webhook Events#
| 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 |
Scenarios#
Recover from PAST_DUE#
1
Receive webhook
subscription.past_due fires — identify the affected subscriptions.
2
Update payment method
Customer updates their payment method via your UI and billing provider.
3
Renew
Call POST /subscriptions/renew-subscriptions with the affected subscriptionIds, or enable auto-renew via POST /subscriptions/toggle-autorenewal.
4
Confirm recovery
Listen for subscription.renewal.success — mailbox is restored.
Cancel a Subscription#
POST /subscriptions/cancel is immediate and permanent. The mailbox moves to EXPIRED instantly with no prorated refunds.
Do not cancel while a subscription is renewing. If autoRenew is on, the subscription moves to RENEWING on its renewal day. Calling POST /subscriptions/cancel during that window is rejected with 400 "Subscription is under renewal, cannot be cancelled.". Wait for renewal to finish (listen for subscription.renewal.success), or disable autoRenew before the renewal date with POST /subscriptions/toggle-autorenewal, then cancel.
Subscription Auto Renewal#
To stop future renewals without immediately expiring the mailbox, use POST /subscriptions/toggle-autorenewal instead.Reset Long-Running Subscription Pricing#
1
Identify affected subscriptions
GET /subscriptions?userId= — find subscriptions approaching or past 12 months.
2
Recreate subscriptions
POST /subscriptions/recreate with subscriptionIds or domainNames. Pricing resets to $3/month with no mailbox downtime.
Avoid These Common Issues#
Not renewing after payment failure — When a payment fails, renew via POST /subscriptions/renew-subscriptions or ensure auto-renew is enabled. Subscriptions that are not renewed will expire.
Confusing cancel and 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.
Using cancel to pause renewals — POST /subscriptions/cancel expires the mailbox instantly. Use toggle-autorenewal if you only want to stop future renewals.
Cancelling on the renewal day : With autoRenew on, the subscription is RENEWING on its renewal day, and POST /subscriptions/cancel is rejected with 400 "Subscription is under renewal, cannot be cancelled.". Disable auto-renew before the renewal date, or wait until renewal completes, then cancel.
Long-running pricing drift — After 12 months the price increases to $5/month. Use POST /subscriptions/recreate proactively to reset the cycle without downtime.
Next Steps#
1+ Year Subscriptions
How pricing changes after 12 months and how to reset to $3/month.
Subscription Events
Full webhook payloads for every subscription event.
Mailboxes
How mailbox status ties to subscription status.