convex-billing
Add Stripe billing/payments to the Convex app via @convex-dev/stripe (checkout + webhook + gating).
By get-convex · 20,425 installs
npx skills add get-convex/agent-skills --skill convex-billing
Source repository · Upstream listing
<! GENERATED from convex agents content/capabilities/billing.json — do not edit by hand.
Add billing / payments
Wire Stripe to Convex using @convex dev/stripe: a checkout action, an httpAction webhook registered by the component (signature verified automatically), subscription state stored in the component's tables, and server side gating via a query.
Workflow
1. Install the component: npm install @convex dev/stripe .
2. Create convex/convex.config.ts :
3. Store Stripe keys in Convex env (use the env micro power): STRIPE SECRET KEY (sk test … / sk live …) and STRIPE WEBHOOK SECRET (whsec …).
4. Create convex/http.ts to register the webhook route (the component handles signature verification automatically):
5. Create convex/billing.ts with a checkout action and a subscription gate query:
6. Run npx convex dev once — it will install the component and push the functions. Verify output shows ✔ Installed component stripe.
7. In Stripe Dashboard → Webhooks: add endpoint https://<deployment .convex.site/stripe/webhook , subscribe to checkout.session.completed , customer.subscription. , invoice. , payment intent. . Copy the signing secret as STRIPE WEBHOOK SECRET .
Rules
Use @convex dev/stripe (npm: @convex dev/stripe@^0.1.4) — it handles webhook signature verification internally via registerRoutes; do NOT write a manual constructEvent webhook.
Stripe keys live in Convex env (use the env micro power): STRIPE SECRET KEY and STRIPE WEBHOOK SECRET.
Gate on server stored subscription state via isSubscribed query (reads component tables), not client claims.
convex/convex.config.ts must import from '@convex dev/stripe/convex.config.js' (not .ts) — the .js extension is required by the Convex bundler.