convex-billing
Add Stripe billing/payments to the Convex app via @convex-dev/stripe (checkout + webhook + gating).
Skill by convex
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/convex-convex-billing
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/convex-billing
What's inside
- Skill name
convex-billing- Description
- Add Stripe billing/payments to the Convex app via @convex-dev/stripe (checkout + webhook + gating).
- License
- Apache-2.0
- Instructions
- 66 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
<!-- 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`:
```ts
import { defineApp } from 'convex/server';
import stripe from '@convex-dev/stripe/convex.config.js';
const app = defineApp();
app.use(stripe);
export default app;
```
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):
```ts
import { httpRouter } from 'convex/server';
import { components } from './_generated/api';
import { registerRoutes } from '@convex-dev/stripe';
const http = httpRouter();
registerRoutes(http, components.stripe, { webhookPath: '/stripe/webhook' });
export default http;
```
5. Create `convex/billing.ts` with a checkout action and a subscription-gate query:
```ts
import { action, query } from './_generated/server';
import { components } from './_generated/api';
import { StripeSubscriptions } from '@convex-dev/stripe';
import { v } from 'convex/values';
const stripeClient = new StripeSubscriptions(components.stripe, {});
export const createSubscriptionCheckout = action({
args: { priceId: v.string() },
returns: v.object({ sessionId: v.string(), url: v.union(v.string(), v.null()) }),
handler: async (ctx, args) => {
const identity = await ctx.auth.getUserIdentity();
if (!identity) throw new Error('Not authenticated');
const customer = await stripeClient.getOrCreateCustomer(ctx, { userId: identity.subject, email: identity.email, name: identity.name });
return await stripeClient.createCheckoutSession(ctx, { priceId: args.priceId, customerId: customer.customerId, mode: 'subscription', successUrl: `${process.env.SITE_URL ?? 'http://localhost:3000'}/?success=true`, cancelUrl: `${process.env.SITE_URL ?? 'http://localhost:3000'}/?canceled=true`, subscriptionMetadata: { userId: identity.subject } });
},
});
export const isSubscribed = query({
args: {},
returns: v.boolean(),
handler: async (ctx) => {
const identity = await ctx.auth.getUserIdentity();
if (!identity) return false;
const subscriptions = await ctx.runQuery(components.stripe.public.listSubscriptionsByUserId, { userId: identity.subject });
return subscriptions.some((sub) => sub.status === 'active' || sub.status === 'trialing');
},
});
```
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.From convex/agent-skills, Apache-2.0.
More from convex/agent-skills
- 0.666score
convex-improve-convex-plugin
convex
Send this coding session's transcript to the Convex team for an AI post-mortem that improves the quickstart system.
SkillAFreshness: A★ 66Claude Code +9 - 0.663score
convex-deploy-guard
convex
Classify + announce the target Convex deployment before any deployment-affecting command; fresh explicit consent for prod actions; session read-only mode.
SkillAFreshness: A★ 66Claude Code +9 - 0.660score
convex-env
convex
Set and wire Convex deployment env vars / secrets for the app.
SkillAFreshness: A★ 66Claude Code +9 - 0.628score
convex-create-component
convex
Builds reusable Convex components with isolated tables and app-facing APIs.
SkillBFreshness: B★ 66Claude Code +9 - 0.626score
convex-authz
convex
Audit and harden a Convex app's authorization: identity-from-arg impersonation, missing per-document ownership checks, public queries leaking data by a…
SkillBFreshness: B★ 66Claude Code +9 - 0.626score
convex-suggest
convex
Suggest the matching Convex component when the user hand-rolls a pattern it already solves (crons, sharded-counter, rate-limiter, storage, search, presence…
SkillBFreshness: B★ 66Claude Code +9 - 0.626score
convex-add
convex
Add a capability to the CURRENT Convex app — consults the served Convex capability catalog for always-current procedures (billing, crons, auth, agent, search…
SkillBFreshness: B★ 66Claude Code +9 - 0.626score
convex
convex
Convex is the backend agents get right on the first try: an all-TypeScript reactive platform where the database, server functions, scheduling, file storage…
SkillBFreshness: B★ 66Claude Code +9 - 0.626score
convex-expert
convex
Convex backend specialist.
SkillBFreshness: B★ 66Claude Code +9 - 0.623score
convex-design
convex
Design and build reactive, type-safe, production-grade backends on Convex.
SkillBFreshness: B★ 66Claude Code +9 - 0.623score
convex-insights
convex
Query a running Convex app's logs + health in natural language (official MCP): failures, slow/expensive functions, deploy causality — scoped, evidence-backed…
SkillBFreshness: B★ 66Claude Code +9 - 0.623score
convex-explain-app
convex
Explain an existing Convex app — data model + relationships, public vs internal functions, auth/ownership model, components, a request→data flow — read from…
SkillBFreshness: B★ 66Claude Code +9
Compare and alternatives
Featured in
Signals
- Stars
- 66
- Forks
- 11
- Open issues
- 6
- Last commit (this folder)
- Aug 1, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/convex/agent-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from convex
- 0.666score
convex-improve-convex-plugin
convex
Send this coding session's transcript to the Convex team for an AI post-mortem that improves the quickstart system.
SkillAFreshness: A★ 66Claude Code +9 - 0.663score
convex-deploy-guard
convex
Classify + announce the target Convex deployment before any deployment-affecting command; fresh explicit consent for prod actions; session read-only mode.
SkillAFreshness: A★ 66Claude Code +9 - 0.660score
convex-env
convex
Set and wire Convex deployment env vars / secrets for the app.
SkillAFreshness: A★ 66Claude Code +9 - 0.628score
convex-create-component
convex
Builds reusable Convex components with isolated tables and app-facing APIs.
SkillBFreshness: B★ 66Claude Code +9 - 0.626score
convex-authz
convex
Audit and harden a Convex app's authorization: identity-from-arg impersonation, missing per-document ownership checks, public queries leaking data by a…
SkillBFreshness: B★ 66Claude Code +9 - 0.626score
convex-add
convex
Add a capability to the CURRENT Convex app — consults the served Convex capability catalog for always-current procedures (billing, crons, auth, agent, search…
SkillBFreshness: B★ 66Claude Code +9
Cite this page
convex-billing skill. Agent Mart. https://agentmart.dev/skills/convex-convex-billing (last updated 2026-10-24)