Notebook Studio
Production Environment

Payment Gateways

Live payment keys and webhooks

Switch to live credentials for every gateway you use. The exact variable names are the same as local development - only the values change.

Stripe

Set your live secret key in Vercel:

STRIPE_SECRET_KEY=sk_live_...

No product or price ID is needed - Notebook Studio creates the recurring checkout price dynamically from the plan amount. Set STRIPE_WEBHOOK_SECRET and point a Stripe webhook at <your-convex-site>/stripe-webhook so subscription events (created, renewed, cancelled) stay in sync.

PayPal

Create a live app in the PayPal developer dashboard and set:

PAYPAL_API_URL=https://api-m.paypal.com
NEXT_PUBLIC_PAYPAL_CLIENT_ID=your-live-client-id
PAYPAL_CLIENT_SECRET=your-live-secret
PAYPAL_WEBHOOK_ID=your-webhook-id

Point a PayPal webhook at <your-convex-site>/paypal-webhook and paste its id into PAYPAL_WEBHOOK_ID.

Razorpay

Use your live key id and secret from the Razorpay dashboard.

NEXT_PUBLIC_RAZORPAY_KEY_ID=rzp_live_...
RAZORPAY_KEY_SECRET=your-live-secret
RAZORPAY_WEBHOOK_SECRET=your-webhook-secret

Point a Razorpay webhook at <your-convex-site>/razorpay-webhook and paste its signing secret into RAZORPAY_WEBHOOK_SECRET.

Flutterwave

Use your live public and secret keys from the Flutterwave dashboard, plus a webhook hash:

NEXT_PUBLIC_FLUTTERWAVE_PUBLIC_KEY=FLWPUBK-...
FLUTTERWAVE_SECRET_KEY=FLWSECK-...
FLUTTERWAVE_SECRET_HASH=your-webhook-hash

Point a Flutterwave webhook at <your-convex-site>/flutterwave-webhook and set FLUTTERWAVE_SECRET_HASH to the secret hash you choose.

Dodo Payments

Switch the Dodo dashboard to Live mode and use your live API key:

NEXT_PUBLIC_DODO_ENV=live_mode
DODO_PAYMENTS_API_KEY=your-live-api-key
DODO_PAYMENTS_WEBHOOK_KEY=your-webhook-signing-key

No catalog setup is required - the recurring product and price are created through the Dodo API on the first checkout. Point a Dodo webhook at <your-convex-site>/dodo-webhook and paste its signing key into DODO_PAYMENTS_WEBHOOK_KEY.

Paddle

Switch Paddle to Production and use your live client token and API key:

NEXT_PUBLIC_PADDLE_ENV=production
NEXT_PUBLIC_PADDLE_CLIENT_TOKEN=live_...
PADDLE_API_KEY=pdl_live_apikey_...
PADDLE_WEBHOOK_SECRET=your-webhook-secret

Checkout opens the Paddle overlay and prices are created automatically from the plan amount. Point a Paddle webhook at <your-convex-site>/paddle-webhook and paste its secret into PADDLE_WEBHOOK_SECRET.

Verify a Purchase

After deploying, run a real test purchase on a small plan and confirm the user's plan updates. Check webhook logs in each gateway dashboard and the /stripe-webhook, /paypal-webhook, /razorpay-webhook, /flutterwave-webhook, /dodo-webhook, and /paddle-webhook endpoints on your Convex site.

On this page