
Stripe Payments
Wire Stripe Checkout, subscriptions, webhooks, and customer portal into a web app using the official npm SDK without an MCP server.
Overview
stripe-payments is an agent skill most often used in Build (also Validate pricing experiments) that adds Stripe Checkout, subscriptions, webhooks, and customer portal code to a web app via the Stripe npm package.
Install
npx skills add https://github.com/jezweb/claude-skills --skill stripe-paymentsWhat is this skill?
- Decision table for Checkout Sessions vs Payment Element vs Connect vs Customer Portal
- Default path: Checkout Sessions for fastest one-time and subscription checkout
- Webhook verification and billing flows using Stripe npm package directly
- Covers pricing pages, subscriptions, Setup Intents, and hosted customer portal
- Claude Code–oriented tooling: Read, Write, Edit, Bash without Stripe MCP
- Maps 6 common payment goals to Stripe APIs (Checkout, Payment Element, subscriptions, Setup Intents, Connect, Customer P
- Documents a complexity tier per integration choice from Low to High
Adoption & trust: 673 installs on skills.sh; 841 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You want to charge customers but do not know which Stripe API pattern fits or how to implement webhooks and subscriptions safely in your stack.
Who is it for?
Indie builders shipping a web SaaS or shop who want Checkout-first Stripe integration with subscriptions and billing portal options spelled out for their agent.
Skip if: Pure mobile IAP-only products, teams that require Stripe MCP-only workflows, or marketplace Connect platforms without time for Connect complexity.
When should I use this skill?
Triggers include add payments, stripe, checkout, subscription, payment form, pricing page, billing, accept payments, stripe webhook, or customer portal.
What do I get? / Deliverables
You get a chosen Stripe integration pattern, implementable server and client code, and verified webhook handling so payments or subscriptions can go live.
- Stripe API choice recommendation aligned to product goals
- Checkout, subscription, or Payment Element integration code
- Webhook endpoint with signature verification
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Payment integration code lands when you connect your product to Stripe APIs, so Build → integrations is the primary shelf. Checkout Sessions, Payment Intents, webhooks, and portal routes are third-party payment integrations, not launch SEO or operate monitoring.
Where it fits
Connect a waitlist landing page to Stripe Prices so you can test willingness to pay before building the full app.
Implement Checkout Sessions and webhook handlers so your MVP can charge on deploy.
Verify webhook signatures and lock API keys in environment variables before going live.
How it compares
End-to-end Stripe npm integration skill, not a payment MCP server catalog entry or generic PCI compliance checklist alone.
Common Questions / FAQ
Who is stripe-payments for?
Solo builders using Claude Code (or similar) on Node or full-stack web apps who need procedural Stripe setup for checkout, billing, and webhooks.
When should I use stripe-payments?
Use it in Build → integrations when adding payments; in Validate → pricing when hooking a landing or pricing page to real Stripe Prices; and before Ship → security when hardening webhook secrets and routes.
Is stripe-payments safe to install?
The skill edits code and may run shell commands; never paste live secret keys into chat—use env vars—and review the Security Audits panel on this page before install.
SKILL.md
READMESKILL.md - Stripe Payments
# Stripe Payments Add Stripe payments to a web app. Covers the common patterns — one-time payments, subscriptions, webhooks, customer portal — with working code. No MCP server needed. ## Which Stripe API Do I Need? | You want to... | Use | Complexity | |----------------|-----|-----------| | Accept a one-time payment | Checkout Sessions | Low — Stripe hosts the payment page | | Embed a payment form in your UI | Payment Element + Payment Intents | Medium — you build the form, Stripe handles the card | | Recurring billing / subscriptions | Checkout Sessions (subscription mode) | Low-Medium | | Save a card for later | Setup Intents | Low | | Marketplace / platform payments | Stripe Connect | High | | Let customers manage billing | Customer Portal | Low — Stripe hosts it | **Default recommendation**: Start with Checkout Sessions. It's the fastest path to accepting money. You can always add embedded forms later. ## Setup ### Install ```bash npm install stripe @stripe/stripe-js ``` ### API Keys ```bash # Get keys from: https://dashboard.stripe.com/apikeys # Test keys start with sk_test_ and pk_test_ # Live keys start with sk_live_ and pk_live_ # For Cloudflare Workers — store as secrets: npx wrangler secret put STRIPE_SECRET_KEY npx wrangler secret put STRIPE_WEBHOOK_SECRET # For local dev — .dev.vars: STRIPE_SECRET_KEY=sk_test_... STRIPE_WEBHOOK_SECRET=whsec_... STRIPE_PUBLISHABLE_KEY=pk_test_... ``` ### Server-Side Client ```typescript import Stripe from 'stripe'; // Cloudflare Workers const stripe = new Stripe(c.env.STRIPE_SECRET_KEY); // Node.js const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!); ``` ## One-Time Payment (Checkout Sessions) The fastest way to accept payment. Stripe hosts the entire checkout page. ### Create a Checkout Session (Server) ```typescript app.post('/api/checkout', async (c) => { const { priceId, successUrl, cancelUrl } = await c.req.json(); const session = await stripe.checkout.sessions.create({ mode: 'payment', line_items: [{ price: priceId, quantity: 1 }], success_url: successUrl || `${new URL(c.req.url).origin}/success?session_id={CHECKOUT_SESSION_ID}`, cancel_url: cancelUrl || `${new URL(c.req.url).origin}/pricing`, }); return c.json({ url: session.url }); }); ``` ### Redirect to Checkout (Client) ```typescript async function handleCheckout(priceId: string) { const res = await fetch('/api/checkout', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ priceId }), }); const { url } = await res.json(); window.location.href = url; } ``` ### Create Products and Prices ```bash # Via Stripe CLI (recommended for setup) stripe products create --name="Pro Plan" --description="Full access" stripe prices create --product=prod_XXX --unit-amount=2900 --currency=aud --recurring[interval]=month # Or via Dashboard: https://dashboard.stripe.com/products ``` **Hardcode price IDs** in your code (they don't change): ```typescript const PRICES = { pro_monthly: 'price_1234567890', pro_yearly: 'price_0987654321', } as const; ``` ## Subscriptions Same as one-time but with `mode: 'subscription'`: ```typescript const session = await stripe.checkout.sessions.create({ mode: 'subscription', line_items: [{ price: PRICES.pro_monthly, quantity: 1 }], success_url: `${origin}/dashboard?session_id={CHECK