Skip to main content

Billing & Subscriptions

Manage your subscription plan, payment method, and billing history through the Stripe-powered billing portal.

Plans​

FeatureTrialStarterPro
POS & ordersYesYesYes
Menu managementYesYesYes
Kitchen displayYesYesYes
Inventory-YesYes
ReportsBasicFullFull
Delivery integrations--Yes
Delivery intelligence--Yes
AI suggestions--Yes
Virtual brands--Yes
Loyalty & CRM-YesYes
Custom branding--Yes

Managing Your Subscription​

Upgrading​

  1. Go to Settings > Billing
  2. Select the plan you'd like to upgrade to
  3. You'll be redirected to Stripe Checkout
  4. Complete the payment
  5. Your plan upgrades immediately

Downgrading​

  1. Go to Settings > Billing > Manage Subscription
  2. This opens the Stripe Customer Portal
  3. Select a lower plan
  4. The change takes effect at the end of your current billing period

Cancelling​

  1. Open the Stripe Customer Portal from Settings > Billing
  2. Cancel your subscription
  3. Access continues until the end of the paid period

Payment Methods​

Manage payment methods through the Stripe Customer Portal:

  • Add or remove credit/debit cards
  • Set a default payment method
  • View upcoming invoices

Billing Events​

The system handles these billing events automatically:

EventAction
Checkout completedPlan activated, tenant updated
Subscription updatedPlan level changed
Subscription deletedReverted to trial
Payment failedNotification sent, grace period starts

Invoices​

Access your complete billing history and download invoices from the Stripe Customer Portal.

Stripe Webhook​

The billing system relies on a Stripe webhook to stay in sync with subscription changes.

Webhook URL: https://pos.desktop.kitchen/api/billing/webhook

Handled Events​

EventAction
checkout.session.completedActivates the plan, links Stripe customer to tenant
customer.subscription.updatedUpdates plan level (starter/pro)
customer.subscription.deletedReverts tenant to trial plan
invoice.payment_failedLogs failure, begins grace period

Configuration​

  1. In the Stripe Dashboard, create an endpoint pointing to https://pos.desktop.kitchen/api/billing/webhook
  2. Select the four events listed above
  3. Copy the signing secret and set it as the STRIPE_WEBHOOK_SECRET environment variable
Raw body required

The webhook route is mounted before express.json() middleware so that Stripe can verify the raw request body signature. If you add global body-parsing middleware, ensure the webhook route is excluded.