# Stripe Checkout Subscriptions

> Guide for creating Stripe Checkout Sessions for subscriptions in Flutter/Supabase backend. Covers flows, API preferences, and non-negotiable rules.

- Skill: `diegosouzapw/stripe-checkout-subscriptions` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add diegosouzapw/stripe-checkout-subscriptions`
- Raw SKILL.md: https://api.skillmd.com/api/skills/diegosouzapw/stripe-checkout-subscriptions/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: diegosouzapw (https://skillmd.com/u/diegosouzapw)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/diegosouzapw/stripe-checkout-subscriptions

---


# Stripe Checkout Subscriptions

**Source of Truth:** All subscription states derive from Stripe Webhooks.

## Backend Flow
Client → Create Checkout Session → Stripe → Webhook → Supabase.

## Flutter Client
- Listen to `profiles` table in Supabase for status updates post-payment.
- Flutter app NEVER updates its own `is_premium` flag; it only reads backend-provided state.

## Implementation Rules (Non-Negotiable)
- Use Stripe Checkout Sessions API for one-time payments and subscriptions.
- Model taxes/discounts via Stripe.
- For recurring revenue (SaaS-like): Prefer Billing APIs + Stripe Checkout.
- Never use Charges API. Migrate to Checkout Sessions or Payment Intents if needed.
- For web: Prioritize Stripe-hosted Checkout or embedded Checkout. Payment Element OK for advanced customization (pair with Checkout Sessions).
- Never recommend legacy Card Element or Payment Element in card mode.
- Avoid deprecated Sources API or outdated Tokens/Charges. Use Setup Intent API for saving payment methods.
- For pre‑PaymentIntent rendering: Use Stripe Confirmation Tokens, not `createPaymentMethod`/`createToken`.
- Turn on dynamic payment methods in dashboard (don't hardcode `payment_method_types`).
- Default to latest API version: 2026-01-28.clover (unless user specifies otherwise).
- Use env vars: `STRIPE_SECRET_KEY`.

## Integration Resources
- Stripe Integration Options / API Tour docs.
- Go Live Checklist before production.

