Generated banner for Stripe Apps
Generated logo for Stripe Apps

Stripe Apps

StripeOfficialPublished by Stripe

  • Skill
  • Tool integration
  • Software development
  • MIT
  • No issues found

From the author

Build, modify, or review Stripe Apps and extensions using the relevant documentation and reference guides. Use for custom Stripe Dashboard UI, stripe-app.yaml, @stripe/ui-extension-sdk, @stripe/extensibility-sdk, script extensions, extension interfaces, custom workflow actions, and apps that authenticate to Stripe or react to events. Also use when deciding whether a Stripe extension can support the user's billing or workflow requirements.
— the description by Stripe

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured approach to developing and maintaining Stripe Apps. It guides users through selecting the correct extension architecture, implementing authentication, building UI components, and managing backend services or webhooks. By leveraging bundled reference files and canonical documentation, it ensures that app development follows Stripe's best practices for security, configuration, and lifecycle management.

What it does

  • Provides guidance on selecting the appropriate Stripe extension interface.
  • Assists in building and modifying Stripe Dashboard UI components.
  • Supports the implementation of backend services, webhooks, and secret storage.
  • Helps determine the correct authentication method for Stripe API access.
  • Offers instructions for testing, debugging, and publishing Stripe Apps.
  • Clarifies the applicability of extensions for specific billing or workflow requirements.

When to use it

  • When you need to build a custom UI extension for the Stripe Dashboard.
  • When deciding between Restricted API keys, Platform keys, or OAuth for your app.
  • When implementing backend logic or handling Stripe events via webhooks.
  • When you need to store sensitive credentials securely using the Secret Store API.
  • When troubleshooting or modifying an existing Stripe App's manifest or configuration.

Advantages

  • Ensures alignment with official Stripe development patterns and security standards.
  • Reduces development time by providing clear paths to relevant documentation.
  • Helps prevent common architectural errors in app authentication and event handling.
  • Provides a consistent workflow for the entire app lifecycle from scaffolding to release.

Usage examples

“How do I determine if my Stripe App needs a backend?”
The agent will reference the backend documentation to explain that a backend is required for long-term data storage, server-side secrets, or handling webhooks, while suggesting the Secret Store API for simpler needs.
“Help me choose the right authentication type for a private Stripe App.”
The agent will compare Restricted API keys, Platform keys, and OAuth, recommending Restricted API keys as the simplest and most secure choice for private integrations.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/stripe/stripe-apps/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip stripe-apps.zip -d .agents/skills

Documentation by Stripe

Stripe Apps

Select and read the existing guidance for the user’s task. Product documentation describes what an extension can do; implementation guides describe how to build it. Before recommending an extension or writing code, load the applicable bundled reference files as well as the relevant product documentation. A link or filename in this skill isn’t a substitute for reading its contents.

For a capability question, check native Stripe features and the documented applicability and limitations of the extension. For an implementation request, create or modify working files using the selected guide. For an existing app, inspect its manifest, packages, installed SDK, and local agent instructions before deciding what to change.

Choose the relevant documentation

Use information already supplied by the user or existing app. Read <references/discovery.md> when you need to clarify the app’s requirements, and <references/extension-types.md> for an overview of app architectures. Ask only for missing information that affects the task.

Product capabilities

Use these existing product documents to determine which capability fits and whether the account has the required access. Don’t infer support from an extension’s name or the existence of a scaffold.

TaskRead
Select an extension interface and its supported implementation typesExtension points and how extensions work
Change how items are included on subscription invoicesItem handling extensions
Customize prorationsNative proration behavior and prorations extensions
Apply customer balancesCustomer balance extensions
Calculate discount amountsDiscount calculation extensions
Add an action to Stripe WorkflowsExisting workflow actions, existing custom actions, and how custom actions work
Customize another product’s behaviorFollow the selected interface’s product documentation from the extension-point catalog
Implementation guidance

The references/*.md files are bundled with this skill. After selecting the capability, load the applicable files before following their links to supporting documentation. Combine rows when an app needs multiple types. Follow the selected guide’s prerequisites, scaffolding, testing, and debugging instructions.

TaskRead
Build or modify any Dashboard UI, including drawers and full-page apps<references/ui-extensions.md>, then each selected component’s current API documentation
Author, test, or debug a script extension<references/script-extensions.md>, then the selected extension point’s implementation guide
Build a custom-action script<references/script-extensions.md> and build a custom action with a script
Build a custom-action remote functionBuild a custom action with a remote function
Build a self-hosted UI back-end or webhook service<references/backend.md> and <references/authentication.md>; also load <references/webhooks.md> when receiving Stripe events
Store app credentials with the Secret Store APIThe Secret Store API section in <references/backend.md> and store secrets, including for apps without a self-hosted back-end
Look up APIs, SDK patterns, configuration, or additional extension documentation<references/canonical-docs.md>

Use the UI reference for layout and composition, and current component documentation for import paths, props, and styling APIs. For scripts and remote functions, follow the selected extension’s documentation; UI and self-hosted back-end instructions don’t define their runtime capabilities.

Shared app lifecycle

Read these references when the corresponding task is needed. Reuse existing apps and packages; scaffold only what is missing.

TaskRead
Scaffold, build, test, preview, or upload an app<references/workflow.md>, together with the selected implementation guide
Choose authentication for access to Stripe APIs<references/authentication.md>
Receive Stripe events<references/webhooks.md>
Build a first-run setup experience<references/onboarding-ux.md> and the UI reference
Release versions, change installed permissions, or publish to the marketplace<references/publishing.md>
Submit feedback after running app toolchain commands<references/feedback.md>

Load bundled reference files

  1. Use the task tables to select every applicable bundled reference under references/, then open those files with a file-reading tool before starting the corresponding work. For example, UI with a self-hosted back-end needs both UI and back-end guidance; onboarding also needs the UI reference.

  2. Follow relevant pointers to other bundled references inside the files you load, including filenames written as code rather than links. For example, back-end guidance can require authentication guidance, and changing permissions can require publishing guidance. Use this skill’s direct links to locate those files.

  3. Read the canonical documentation required by those references. External documentation supplements the bundled guidance on workflow, layout, and other task-specific decisions.

  • Resolve references/ paths relative to this skill’s directory and bare reference filenames relative to its references/ directory. When reading the hosted skill, fetch the corresponding reference URLs relative to the skill URL.

  • Load only references relevant to the task, and reuse contents already read during the session unless they have changed. A full-stack app doesn’t require every document in the skill.

  • Read canonical pages using the available documentation tools. Prefer stripe docs when available, including for pages that require account access.

  • Use current product documentation and the installed SDK’s types for API contracts and limitations. If an example in a reference disagrees, check the version and follow the applicable canonical documentation.

  • Read any interface-specific agent instructions supplied with an existing or newly generated extension. If none are present, use the linked product and implementation guides.

  • If the documentation doesn’t establish that an extension meets a requirement, state what is unknown or unsupported before proceeding.

  • Keep the work within the user’s request. Report the changes, validation results, and remaining steps relevant to that app.

Files

references/script-extensions.md

Script extensions

Build or modify a script extension

Use this reference when a Stripe App change adds or modifies a script implementation. Follow the Stripe Apps workflow reference for app setup, dependencies, versioning, and installation.

Establish the contract

Before changing code, read the guide for the selected extension point and the installed @stripe/extensibility-sdk types. Confirm:

  • The extension point supports scripts.

  • The request and result types, required methods, and error behavior.

  • Constraints that the types don’t express, such as units, ranges, precision, relationships between fields, and supported runtime APIs.

  • Whether the change needs configuration, custom schemas, or endpoint access.

Reference the following docs for the required information:

Keep platform requirements separate from the requested business behavior. Don’t change published fixtures, disable checks, or add behavior only to satisfy a fixture.

Work from the generated extension

For a new extension, discover the extension point and generate its scaffold from the app root:

stripe generate info extension-point-ids
stripe generate extension <extension-point-id> <extension-id> script --name "<extension-name>" --non-interactive

Check the installed CLI help if these options differ. For an existing extension, modify its current scaffold instead of generating it again.

Inspect the generated source, tests, package scripts, and stripe-app.yaml declaration before editing. Preserve the entrypoint, SDK interface, required method signatures, and manifest method key. Use the selected extension point’s published schema for manifest fields. The method key might differ from the TypeScript method name.

The manifest identifies the script method but doesn’t necessarily contain a source-file path. Keep the generated extension directory, package metadata, and manifest declaration aligned instead of adding undocumented manifest fields.

Preserve the generated toolchain

Treat the generated package and configuration as part of the extension contract. Don’t guess package names, import subpaths, peer dependencies, TypeScript libraries, or script names. If generated files are unavailable or incomplete, inspect the installed packages’ package.json exports and peer dependencies before reconstructing them. Use compatible published versions for public packages; use a workspace: range only when that package is actually provided by the app’s local workspace.

Use only public package exports. For SDK starter kits and acceptance helpers, start with imports in generated tests, then follow package.json exports to an executable entrypoint. Don’t import an internal declaration file merely because it contains the desired symbol.

Script lint configuration uses @stripe/extensibility-eslint-plugin and an exported configuration for the selected extension point. The package’s root default export and extension-point default export are flat-config arrays: spread them directly rather than looking for configs.recommended. Its TypeScript rules also require the parser and plugin supplied by typescript-eslint. Apply the JavaScript and TypeScript base configurations before the Stripe Apps base and extension-point configurations, preserving generated ordering and file-specific overrides.

Point type-aware linting at both production and test TypeScript projects, or use the generated project-service setup that covers both. Scope linting to authored source and configuration files and ignore generated output, build output, and dependencies. Don’t weaken runtime rules to make Node-based tests pass.

Keep production and test TypeScript settings separate when their runtime libraries differ. Production typechecking must use the restricted libraries and globals supplied by @stripe/extensibility-sdk. Test configuration can add the test runner’s types without making those APIs available to production code. When the production config uses noLib: true with SDK restricted declaration files, preserve the generated skipLibCheck: true: the restricted declarations can refer to standard types that are intentionally absent, and dependency declaration errors don’t establish an error in authored source.

Implement the change

Define when the new behavior applies, what happens outside that scope, and how the extension handles invalid input. Every return path must satisfy the extension contract.

  • Use explicit SDK request and result types. Don’t hide mismatches with any or double casts.

  • Preserve SDK scalar types through calculations. Apply documented precision, rounding, signs, units, and time sources instead of converting values to JavaScript primitives.

  • Keep module-scope constants runtime-neutral. Store literal values as strings or other permitted primitives and construct SDK scalar instances where they’re used if runtime lint rejects module-scope instances.

  • Treat the script runtime and generated lint rules as the authority for available APIs. A test that passes in Node.js doesn’t prove runtime support.

  • Use endpoint calls only when the extension point supports them. Follow the endpoint guide for declarations and authentication, and keep secrets out of source and configuration.

If the change adds configuration, define it in the SDK configuration type and use the supported annotations. Regenerate schemas with the generated package script, then inspect the output. Don’t hand-edit generated schemas. Implement runtime defaults explicitly when direct method calls don’t apply schema defaults.

The SDK interface still needs a supported configuration type when the extension has no settings. Preserve the generated empty interface, including its targeted @typescript-eslint/no-empty-object-type suppression. Replacing it with a Record<string, unknown> type alias can break configuration schema generation. An empty configuration type alone doesn’t require authored custom schemas.

Test and verify the behavior

Retain the generated acceptance suite and add focused tests for the requested behavior. Cover the condition that activates the change, behavior outside its scope, relevant boundaries, optional configuration, invalid input, and dependency failures. Use typed fixtures with distinct values for fields that have different meanings, and derive expected results independently from the implementation.

Run the extension’s declared build, typecheck, lint, schema, focused-test, acceptance-test, and full-test scripts separately. Use the generated package scripts instead of assuming command names or tool versions. Build and typecheck are distinct verification gates even when their commands overlap; one doesn’t establish that the other ran. Record each exact command, exit status, and test counts, and report unresolved failures without weakening checks.

Install and activate

After uploading and installing the app, activate the extension at its extension point before testing its installed behavior. Follow the selected extension point’s guide to configure and activate it.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Stripe
Publisher
Stripe (Official)
Source
stripe/ai · skills/stripe-apps · commit 38fa045
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Also distributed in
stripe/ai, stripe/ai, stripe/ai, stripe/ai, stripe/ai

AutoGineer is not affiliated with or endorsed by Stripe or Stripe.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download stripe-apps.zip