Skip to main content

Billing & Plans

Zyphr offers five plans designed to scale with your needs — from a free tier for getting started to enterprise plans for large-scale deployments. Manage your subscription, payment methods, and invoices through the Dashboard or the API.

Plans Overview

FeatureFreeStarterProScaleEnterprise
Emails/mo1,00025,000100,000500,000Custom
Push/mo1,00025,000100,000500,000Custom
SMS/mo1001,0005,00025,000Custom
Auth events/mo5005,00025,000100,000Custom
MAU5002,50010,00050,000Custom
Webhooks21050UnlimitedUnlimited
Digest configs21050UnlimitedUnlimited
Cohorts31050UnlimitedUnlimited
Scheduled sending-YesYesYesYes
Chat integrations-YesYesYesYes
Priority support--YesYesYes
Custom contracts----Yes

Getting Your Current Plan

List Available Plans

curl https://api.zyphr.dev/v1/billing/plans \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Get Active Subscription

curl https://api.zyphr.dev/v1/billing/subscription \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Response

{
"data": {
"plan": "pro",
"status": "active",
"current_period_start": "2026-02-01T00:00:00Z",
"current_period_end": "2026-02-28T23:59:59Z",
"cancel_at_period_end": false
}
}

Subscribing & Changing Plans

Subscribe to a Plan

curl -X POST https://api.zyphr.dev/v1/billing/subscription \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"plan": "pro",
"payment_method_id": "pm_abc123"
}'

Preview a Plan Change

Before committing to a plan change, preview the prorated invoice:

curl https://api.zyphr.dev/v1/billing/subscription/preview \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Update Subscription

Change plans (upgrade or downgrade):

curl -X PATCH https://api.zyphr.dev/v1/billing/subscription \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"plan": "scale"
}'
note
  • Upgrades take effect immediately with prorated charges
  • Downgrades take effect at the end of the current billing period

Cancel Subscription

curl -X DELETE https://api.zyphr.dev/v1/billing/subscription \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

The subscription remains active until the end of the current billing period, then reverts to the Free plan.

Reactivate a Cancelled Subscription

If you cancelled but your period hasn't ended yet:

curl -X POST https://api.zyphr.dev/v1/billing/subscription/reactivate \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Payment Methods

List Payment Methods

curl https://api.zyphr.dev/v1/billing/payment-methods \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Add a Payment Method

curl -X POST https://api.zyphr.dev/v1/billing/payment-methods \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"stripe_token": "tok_visa"
}'
tip

Payment methods are managed through Stripe. Use Stripe.js or Stripe Elements on your frontend to collect card details securely and obtain a token.

Set Default Payment Method

curl -X POST https://api.zyphr.dev/v1/billing/payment-methods/PM_ID/default \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Remove a Payment Method

curl -X DELETE https://api.zyphr.dev/v1/billing/payment-methods/PM_ID \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
warning

You cannot remove your default payment method while you have an active paid subscription. Set a different payment method as default first, or cancel your subscription.

Invoice History

View past invoices and payment history:

curl https://api.zyphr.dev/v1/billing/history \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Response

{
"data": {
"invoices": [
{
"id": "inv_abc123",
"amount": 9900,
"currency": "usd",
"status": "paid",
"period_start": "2026-01-01T00:00:00Z",
"period_end": "2026-01-31T23:59:59Z",
"pdf_url": "https://pay.stripe.com/invoice/..."
}
]
}
}

Stripe Billing Portal

For full billing management (update cards, view all invoices, manage subscriptions), redirect users to the Stripe billing portal:

curl -X POST https://api.zyphr.dev/v1/billing/portal-session \
-H "Authorization: Bearer YOUR_JWT_TOKEN"

Returns a url that redirects the user to Stripe's hosted billing portal. The session is valid for a limited time.

const { url } = await zyphr.billing.createPortalSession();
window.location.href = url;

Overage Billing

When you exceed your plan's included volume, overage charges apply:

MetricOverage Rate
Emails$1.00 per 1,000
Push$0.50 per 1,000
SMS$0.05 per message
Auth events$0.01 per event
MAU$0.02 per user

Overage charges are calculated at the end of each billing period and added to your next invoice. See Usage & Analytics to monitor your usage and set up alerts.

Dashboard Management

From the Billing section in the Dashboard:

  1. Plan overview - See your current plan and included limits
  2. Usage meters - Visual progress bars for each metric
  3. Upgrade/downgrade - Change plans with invoice preview
  4. Payment methods - Add, remove, or set default payment cards
  5. Invoice history - View and download past invoices
  6. Stripe portal - Link to full Stripe billing management

API Reference

MethodEndpointDescription
GET/v1/billing/plansList available plans
GET/v1/billing/subscriptionGet active subscription
POST/v1/billing/subscriptionCreate subscription
PATCH/v1/billing/subscriptionUpdate subscription
DELETE/v1/billing/subscriptionCancel subscription
POST/v1/billing/subscription/reactivateReactivate subscription
GET/v1/billing/subscription/previewPreview invoice
GET/v1/billing/payment-methodsList payment methods
POST/v1/billing/payment-methodsAdd payment method
GET/v1/billing/payment-methods/:idGet payment method
DELETE/v1/billing/payment-methods/:idRemove payment method
POST/v1/billing/payment-methods/:id/defaultSet default
GET/v1/billing/historyInvoice history
POST/v1/billing/portal-sessionCreate Stripe portal session

Next Steps