WWebBuddyMarketplace
Selling it

Selling it as SaaS

Plans and allowances, how usage is metered and enforced, Stripe Checkout and the customer portal, cost tracking, and which licence you need to charge customers.

4 min readUpdated Oct 17, 2026Applies to Reception AI 1.0.0

On this page

Reception AI can run as a multi-tenant service: businesses sign up, each gets their own workspace, and you bill them through Stripe. Everything on this page is optional for a single-business install.

Important

Check your licence first. On CodeCanyon, the Regular License covers one end product whose end users are not charged. If your customers pay to use what you build with Reception AI (a subscription, a setup fee, any paid plan), you need the Extended License. Read Envato's licence terms for the authoritative wording; this note is a summary, not legal advice.

Plans

New workspaces start on Studio. Three plans are created by the migrations:

Plan Price label Minutes per month Receptionists Phone numbers
Studio Free 15 1 1
Scale $89 / seat / month 2,000 25 25
Enterprise Custom Unlimited Unlimited Unlimited

Super-admins edit plans at Admin → Plans: name, price label, allowances, whether the plan is public, and its Stripe price ID.

  • Minutes are a monthly allowance of plan minutes (see metering below).
  • Receptionists caps both how many a workspace can create (drafts included) and how many can be live.
  • Phone numbers counts real carrier numbers; test numbers are free.
  • An empty allowance means unlimited.
  • A plan marked not public keeps working for workspaces already on it but cannot be bought. A plan cannot be deleted while any workspace uses it, and Studio can never be deleted.

Note

The price label is display text only. "Per seat" pricing is not implemented: checkout always sells a quantity of one, and a workspace has one user.

How usage is metered

Every billable event is converted into plan minutes and summed per calendar month:

Event Plan minutes (default) Rate setting
One minute of a live call (rounded up, at least 1 per call) 1 RATE_VOICE_MINUTE
One exchange on the turn-based phone path 0.25 RATE_PHONE_TURN
One website-widget chat message 0.025 RATE_TEXT_MESSAGE
Twilio outbound call Duration reported by Twilio, rounded up (0 if unanswered) RATE_VOICE_MINUTE
Vonage or Telnyx outbound call 1 per call RATE_VOICE_MINUTE

Change the rates under Configuration → Billing rates. Workspace chat in the dashboard is not metered.

Plan enforcement

Check Behaviour
Creating or publishing a receptionist over the limit Refused with a message naming the allowance
Adding a real number over the limit Refused
Inbound Twilio or Plivo call when minutes are used up Caller hears that the line has used its included minutes; the call ends before any minutes are spent
Widget message when minutes are used up Visitor sees "This assistant is unavailable right now."

Not gated in 1.0.0: SIP-trunk calls, outbound calls and campaigns. If the minutes check itself fails (for example, the database is briefly unreachable), the call or message is allowed rather than refused.

Stripe setup

Metering and limits work without Stripe. Stripe adds self-serve upgrades.

  1. Create a product and a recurring price in Stripe for each paid plan. Copy each price ID (price_…).
  2. Paste each price ID into the matching plan under Admin → Plans. A plan without a price ID shows "Talk to us" instead of a checkout button.
  3. Add a webhook endpoint in Stripe: https://<APP_URL>/api/billing/stripe, with these events:
    • checkout.session.completed
    • customer.subscription.updated
    • customer.subscription.deleted
    • invoice.payment_failed
  4. Set the keys under Configuration → Payments: STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET (the endpoint's signing secret).
  5. Enable the customer portal in Stripe (Settings → Billing → Customer portal) so Manage billing can change cards and cancel.
  6. Make sure APP_URL is set; checkout needs it to send customers back.

Use test keys (sk_test_…) first; card 4242 4242 4242 4242 completes a test checkout.

What happens next

  • Customers upgrade from Settings → Billing in their workspace. Checkout is a Stripe subscription and accepts promotion codes.
  • The plan switches as soon as the customer returns from checkout, and the webhook keeps it in sync afterwards.
  • Cancelled subscriptions move the workspace back to Studio.
  • A failed payment marks the workspace past due. The paid plan stays active; nothing is restricted automatically, so follow up from Stripe.
  • The webhook verifies Stripe's signature (with five minutes of tolerance) and answers 503 if Stripe keys are not configured.

Note

Changing a workspace's plan under Admin → Accounts does not change anything in Stripe, and a later subscription update from Stripe will overwrite it. Use it for free or custom arrangements, not for paying Stripe customers.

PayPal fields appear on the Configuration screen but PayPal checkout is not implemented in 1.0.0.

Costs and margins

Admin → Finance (super-admin only) brings together:

  • Provider costs recorded per live call and per speech synthesis, priced from a rate table you maintain (seeded with estimates).
  • Fixed costs you enter, such as hosting.
  • Revenue you record. Stripe payments are not imported automatically.

Margins are only as good as those inputs; see AI models and providers for what is and is not recorded.

Before you launch a SaaS

  • Buy the right licence (see the top of this page).
  • Set ADMIN_EMAILS, verify your admin, and consider FEATURE_SIGNUPS off until you are ready.
  • Fill in SUPPORT_EMAIL, TERMS_URL, PRIVACY_URL and COMPANY_NAME.
  • Put spending limits on your OpenAI and xAI accounts.
  • Use Twilio for customer numbers: Plivo on a shared install works with a single Plivo account only (see Phone numbers).
  • Read Known limitations so your own sales pages promise only what the product does.