stripe-best-practices
// Best practices for building Stripe payment integrations
$ git log --oneline --stat
stars:1,933
forks:367
updated:March 4, 2026
SKILL.mdreadonly
SKILL.md Frontmatter
namestripe-best-practices
descriptionBest practices for building Stripe payment integrations
metadata[object Object]
Stripe Best Practices
Best practices for building Stripe payment integrations
Keywords
stripe, payment, checkout, subscription, billing
Intents
- integrate payment processing
- handle subscriptions
- process credit cards
Constraints
Never
- Charges API
- Sources API
- Card Element
- Payment Element in card-only mode
- Tokens API (unless specific need)
- mixing Connect charge types
- legacy Connect terms (Standard/Express/Custom)
Always
- latest API/SDK version (unless specified otherwise)
- advise PCI compliance proof for raw PAN handling
- use controller properties for Connect (not legacy terms)
Preferences
- Prefer CheckoutSessions over PaymentIntents when on-session payments
- Prefer Stripe-hosted Checkout over embedded Checkout when default choice
- Prefer embedded Checkout over Payment Element when more control needed
- Prefer dynamic payment methods over explicit payment_method_types when using Payment Element
- Prefer SetupIntents over Sources when saving payment methods
- Prefer Confirmation Tokens over createPaymentMethod/createToken when inspecting card before payment
- Prefer Billing APIs over raw PaymentIntents when subscriptions/recurring
- Prefer direct charges over destination charges when platform wants Stripe to take risk
- Prefer destination charges over direct charges when platform accepts liability
Decisions
- When user wants Charges API: advise migration to CheckoutSessions or PaymentIntents
- When user wants Card Element: advise migration to Payment Element
- When recurring revenue / subscription / SaaS: recommend Billing APIs + Checkout frontend
- When platform / marketplace / Connect: follow integration recommendations, use controller properties
- When migrating PAN data from another processor: point to migration process
- When render Payment Element before creating intent: use Confirmation Tokens
References
- stripe:integration-options - primary integration design reference
- stripe:api-tour - API overview
- stripe:go-live - pre-launch checklist
- stripe:migration/charges - Charges to PaymentIntents migration
- stripe:migration/payment-element - Card Element to Payment Element migration
- stripe:billing/design-integration - subscription integration planning
- stripe:connect/recommendations - Connect charge type selection
- stripe:pan-import - PAN data migration
Converted from UASP format (knowledge skill)