UNPKG

skills-ws

Version:

87 agent skills for AI coding assistants — marketing, growth, web3, dev, design & operations. Built for OpenClaw, Claude Code, Cursor, and Codex.

108 lines (93 loc) • 3.34 kB
## Contents - Stripe Products & Prices - Creating Products & Prices (API) - Best Practices for Products & Prices ## Stripe Products & Prices ### Creating Products & Prices (API) ```js // Create the product (represents your offering) const product = await stripe.products.create({ name: 'Pro Plan', description: 'Full access to all features', metadata: { tier: 'pro', api_rate_limit: '1000', }, }); // Flat recurring price const monthlyPrice = await stripe.prices.create({ product: product.id, unit_amount: 2900, // $29.00 in cents currency: 'usd', recurring: { interval: 'month', }, metadata: { plan: 'pro_monthly' }, }); // Annual price with discount const annualPrice = await stripe.prices.create({ product: product.id, unit_amount: 29000, // $290.00/year (saves ~$58) currency: 'usd', recurring: { interval: 'year', }, metadata: { plan: 'pro_annual' }, }); // Per-seat price const perSeatPrice = await stripe.prices.create({ product: product.id, unit_amount: 1000, // $10.00 per seat currency: 'usd', recurring: { interval: 'month', }, metadata: { plan: 'pro_per_seat' }, }); // Metered usage price — MODERN (Billing Meters era, the default for new builds). // First create a Meter (once, persisted), then back the price with it. // See "Metered / Usage-Based Billing" below for the full meter setup + event reporting. const meter = await stripe.billing.meters.create({ display_name: 'API calls', event_name: 'api_request', // you send events with this event_name default_aggregation: { formula: 'sum' }, // 'sum' | 'count' | 'last' }); const usagePrice = await stripe.prices.create({ product: product.id, currency: 'usd', recurring: { interval: 'month', usage_type: 'metered', meter: meter.id, // ← binds this price to the meter (required for Meters-era usage) }, unit_amount: 1, // $0.01 per unit (cents) metadata: { plan: 'pro_api_usage' }, }); // Tiered price (graduated), also meter-backed const tieredPrice = await stripe.prices.create({ product: product.id, currency: 'usd', recurring: { interval: 'month', usage_type: 'metered', meter: meter.id, }, billing_scheme: 'tiered', tiers_mode: 'graduated', tiers: [ { up_to: 1000, unit_amount: 0 }, // first 1000 free { up_to: 10000, unit_amount: 1 }, // $0.01 each { up_to: 'inf', unit_amount_decimal: '0.5' }, // $0.005 each — use unit_amount_decimal for sub-cent ], metadata: { plan: 'pro_tiered_api' }, }); ``` > A `recurring.usage_type: 'metered'` price **without** `meter` falls back to the legacy > subscription-item usage-record path (`createUsageRecord`), which is in maintenance mode for new > integrations. Always set `meter` for new builds. The legacy path is documented in the appendix below. ### Best Practices for Products & Prices - **Products = features/tiers.** Prices = billing variants (monthly, annual, per-seat). - **Use `metadata`** extensively. Store your internal plan IDs, feature flags, rate limits. - **Never delete prices.** Archive them with `active: false`. Existing subscriptions reference them. - **Use lookup_keys** for stable references: `await stripe.prices.list({ lookup_keys: ['pro_monthly'] })`. ---