Skip to content

Plans & Billing

SubscribeFlow offers three plans to match your scale.

Feature comparison

Feature Free Starter (CHF 19/mo) Professional (CHF 49/mo)
Subscribers 500 5,000 50,000
Emails/month 1,000 10,000 100,000
Campaigns -- 5/month Unlimited
Templates 1 10 Unlimited
Webhooks -- 3 Unlimited
Tags 3 Unlimited Unlimited
Custom Domain -- -- Yes
MCP Integration -- Yes Yes
API Access Read-only Full Full

Upgrading your plan

  1. Open the Dashboard and go to Settings > Billing.
  2. Select the plan you want.
  3. Complete the payment through Stripe Checkout.

Your new limits apply immediately after payment.

session = await client.billing.create_checkout_session("starter")
print(f"Complete your upgrade: {session.url}")
const session = await client.billing.createCheckoutSession('starter');
console.log('Complete your upgrade:', session.url);
curl -X POST https://api.subscribeflow.net/api/v1/billing/checkout \
  -H "X-API-Key: sf_live_..." \
  -H "Content-Type: application/json" \
  -d '{"plan": "starter"}'

Managing your subscription

Use the Stripe Billing Portal to update payment methods, view invoices, or cancel your subscription.

session = await client.billing.create_portal_session()
print(f"Manage billing: {session.url}")
const session = await client.billing.createPortalSession();
console.log('Manage billing:', session.url);
curl -X POST https://api.subscribeflow.net/api/v1/billing/portal \
  -H "X-API-Key: sf_live_..."

Handling 402 Limit Exceeded

When you exceed a plan limit (subscribers, emails, campaigns, etc.), the API returns HTTP 402 Payment Required. Catch this error and prompt the user to upgrade.

from subscribeflow import LimitExceededError

try:
    subscriber = await client.subscribers.create(
        email="new-user@example.com",
    )
except LimitExceededError as e:
    print(f"Plan limit reached: {e.detail}")
    # Create a checkout session for upgrade
    session = await client.billing.create_checkout_session("starter")
    print(f"Upgrade here: {session.url}")
import { SubscribeFlowError } from '@subscribeflow/sdk';

try {
  await client.subscribers.create({ email: 'new-user@example.com' });
} catch (error) {
  if (error instanceof SubscribeFlowError && error.status === 402) {
    console.log('Plan limit reached:', error.detail);
    // Create a checkout session for upgrade
    const session = await client.billing.createCheckoutSession('starter');
    console.log('Upgrade here:', session.url);
  }
}
# A 402 response looks like:
# {
#   "type": "https://docs.subscribeflow.net/errors/limit-exceeded",
#   "title": "Payment Required",
#   "status": 402,
#   "detail": "Subscriber limit of 500 reached. Upgrade to Starter for up to 5,000 subscribers."
# }

Info

For custom domain setup on the Professional plan, see the Preference Center guide.