New to Claude Skills? Learn how to install them →

stripe on GitHub

Stripe Best Practices

OfficialFree

Streamline your Stripe integration with expert guidance.

by stripe1.7k stars on stripe/ai
6 views
Updated Aug 8, 2026
Get this skill

Free · Opens the source repo

What Stripe Best Practices does

The Stripe Best Practices skill is designed to assist developers and designers in making informed decisions while integrating Stripe into their applications. This skill provides comprehensive guidance on various aspects of Stripe's API, including the selection between Checkout Sessions and PaymentIntents, setting up the Connect platform, managing billing and subscriptions, and ensuring compliance with tax regulations. By leveraging this skill, users can avoid common pitfalls and streamline their integration processes.

With the latest Stripe API version and SDKs readily available, users can ensure they are working with the most current tools. The skill covers critical integration scenarios, such as one-time payments, custom payment forms, and recurring billing setups. Additionally, it emphasizes best practices for security, including API key management and OAuth implementations, ensuring that sensitive information is handled appropriately.

This skill is particularly useful for developers who are building or modifying Stripe integrations, as well as those reviewing existing setups. By consulting the provided references, users can gain deeper insights into specific areas such as tax compliance and financial account management, making it easier to implement robust solutions tailored to their business needs.

Whether you are starting a new project or enhancing an existing integration, the Stripe Best Practices skill serves as a valuable resource for navigating the complexities of Stripe's offerings, helping you to build secure and efficient payment solutions.

When to use it

Use this skill when building, modifying, or reviewing any Stripe integration, especially for payments, subscriptions, or tax compliance.

When not to use it

This skill may not be suitable for users unfamiliar with Stripe's API or those looking for a simple payment solution without the need for extensive configuration.

What you can build with it

New Payment Integration

When building a new payment integration, this skill helps you choose the right API methods and configurations.

Reviewing Existing Integrations

Use this skill to audit and improve existing Stripe setups, ensuring compliance with best practices.

Setting Up Subscriptions

When implementing subscription billing, this skill provides guidance on using the appropriate APIs and handling tax compliance.

How to install Stripe Best Practices

View source

1. Install with the skills CLI

npx skills add stripe/ai/stripe-best-practices --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by stripe

Latest Stripe API version: 2026-07-29.dahlia. Always use the latest API version and SDK unless the user specifies otherwise.

Latest SDK versions:

LanguageLatest version
Ruby19.4.0
Python15.4.0
Node.js22.4.0
PHP21.1.0
Java33.2.0
Go86.2.0
.NET52.2.0

If you don’t have a Stripe account, you can call a CLI command to generate working API keys with no registration required. You can install the Stripe CLI (npm i -g @stripe/cli) and run the command stripe sandbox create to get started.

If stripe sandbox create is used, don’t use MCP.

If you try to use MCP after running sandbox creation, first make sure stripe sandbox claim is run. Use stripe whoami --format json for CLI auth checks; do not run stripe config --list.

API key default: Always recommend a restricted API key (RAK) (rk_ prefix) over a secret key (sk_ prefix).

Integration routing

Building…Recommended APIDetails
One-time paymentsCheckout Sessions<references/payments.md>
Custom payment form with embedded UICheckout Sessions + Payment Element<references/payments.md>
Saving a payment method for laterSetup Intents<references/payments.md>
Connect platform or marketplaceAccounts v2 (/v2/core/accounts)<references/connect.md>
Usage-based billing (new integration)Metronome<references/billing.md>
Subscriptions or recurring billingBilling APIs + Checkout Sessions<references/billing.md>
Sales tax, VAT, or GST complianceStripe Tax + Registrations API<references/tax.md>
Embedded financial accounts / bankingv2 Financial Accounts<references/treasury.md>
Security (key management, RAKs, webhooks, OAuth, 2FA, Connect liability)See security reference<references/security.md>

Read the relevant reference file before answering any integration question or writing code.

Critical rules

  • Before enabling automatic_tax: { enabled: true } (or calculating tax for a custom PaymentIntent), read the tax reference and confirm the user has an active registration. Without one, Stripe calculates and collects no tax while the user believes tax is on (the most common Stripe Tax mistake).

  • Never include payment_method_types in any Stripe API call, with one exception: Terminal (in-person payments) integrations must pass payment_method_types: ['card_present'] on the PaymentIntent. For all other integrations, omit this parameter entirely to enable dynamic payment methods, which enables you to configure payment method settings from the Dashboard and dynamically display the most relevant eligible payment methods to each customer to maximize conversion. To customize which payment methods you accept, use payment_method_configurations or excluded_payment_method_types instead of payment_method_types.

  • On API version 2026-03-25.dahlia or later, pass the parameter integration_identifier to checkout.sessions.create to tag sessions with a custom label for tracking and comparing checkout flows in the Dashboard. The label should include a suffix of 8 random letters.

  • Always instantiate a StripeClient and call methods on that instance. Do not use the deprecated global/module-level API key pattern (stripe.api_key = …, Stripe.setApiKey, stripe.Key = …, StripeConfiguration.ApiKey = …). The global pattern is deprecated in all current SDKs.

Key documentation

When the user’s request does not clearly fit a single domain above, consult:

Frequently asked questions about Stripe Best Practices

Similar skills