# Add paid plans to a v0 app (Next.js App Router, BuildBase sign-in)

One prompt that lets a workspace in a v0 app pick a plan and unlocks a paid feature by its slug, checked on the server, plus where the keys live.

v0 can also connect to BuildBase itself while it builds: [Use BuildBase in v0](/console/ai-agents/v0).

A workspace picks a plan in the SDK's subscription screen, pays on Stripe's page, and the feature its plan includes appears without a reload. A route handler checks the same answer, so a person cannot reach the feature by typing its address. This page assumes the app already signs people in with @buildbase/sdk, as the [v0 guide](https://www.buildbase.app/guides/add-sign-in-teams-and-paid-plans-to-a-v0-app) sets up. If it signs people in with something else, such as Supabase or Clerk, read [keep your existing sign-in](/sign-in-setup/keep-your-sign-in) first.

> **Note:**

Stripe connected, a feature with the slug `export` and a published plan that includes it ([Set up billing](/billing-setup/overview)). Entitlement checks need `@buildbase/sdk` 1.0.0 or later.

## The prompt

v0's docs document no link that opens v0 with a prompt filled in, so copy this into your project's chat.

```text
This app signs people in with BuildBase (@buildbase/sdk), set up as https://www.buildbase.app/guides/add-sign-in-teams-and-paid-plans-to-a-v0-app shows. If it does not, stop and tell me.
Read https://docs.buildbase.app/billing/entitlements.md first and do not invent endpoints. Plans and prices live in the BuildBase console, with a feature whose slug is export.
- In a client component, add an Upgrade button that calls openWorkspaceSettings('subscription') from useSaaSAuth().
- Wrap the export screen in WhenEntitled from @buildbase/sdk/react, with slug "export" and an upgrade card as its fallbackComponent.
- In the route handler that runs the export, call bb().entitlements.check({ workspaceId, slug: 'export' }) from lib/buildbase.ts and answer 402 when allowed is false.
Do not install the Stripe integration from the Vercel Marketplace, and do not store the plan in my database. Never store card data.
```

## Where the secrets go

Your Stripe keys go into the BuildBase console, under **Billing**, not into Vercel: the app never holds a Stripe key, and card details stay on Stripe's page. `BUILDBASE_CLIENT_SECRET` stays where the guide put it: the Vercel project's environment variables, with no `NEXT_PUBLIC_` prefix.

## The v0 trap

v0 installs payment providers from the Vercel Marketplace, Stripe among them, under **Project menu** > **Settings** > **Integrations**, and an installed integration can steer what v0 writes. With BuildBase, Stripe is connected in the BuildBase console instead. Read the change before you accept it: if v0 asked to add the Stripe integration or wrote its own checkout, undo it and paste the prompt again.

Gate on the slug, not the plan name. A check for "is this the Pro plan" breaks the day you rename a plan or sell the feature as an add-on.

## Full guides

- [Add sign-in, teams and paid plans to a v0 app](https://www.buildbase.app/guides/add-sign-in-teams-and-paid-plans-to-a-v0-app)
- [Entitlement checks](/billing/entitlements): limits, quotas and the server check
- [Add BuildBase to v0's instructions](/ai-builders/v0-import)
