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-idPoint 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-secretPoint 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-hashPoint 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-keyNo 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-secretCheckout 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.