Agent skill

Stripe Connect

by TerminalSkills in TerminalSkills/skills

Build marketplace and platform payment flows with Stripe Connect.

Apache-2.0Auto-check passedBackend & APIs

Install Stripe Connect

skills CLI
$ npx skills add TerminalSkills/skills --skill stripe-connect -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install TerminalSkills/skills stripe-connect --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/TerminalSkills/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/stripe-connect .claude/skills/stripe-connect && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
stripe-connect
GitHub stars
163
Token cost
~2.9k tokens
SKILL.md length
610 words
Files
4 (incl. references)
Skills in repo
10
Repo updated
First seen
Licence
Apache-2.0

At a glance

Build marketplace and platform payment flows with Stripe Connect.

  • Works in 3 steps: Create a connected account → Generate onboarding link (Account Links… → Check onboarding status
  • : building two-sided marketplaces
  • SKILL.md covers Overview, Instructions, Examples and Guidelines
  • Calls stripe and npm; needs STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET

What it does

Stripe Connect is an agent skill from TerminalSkills/skills. Build marketplace and platform payment flows with Stripe Connect. Use when: building two-sided marketplaces, splitting payments between buyers and sellers, onboarding sellers/providers to accept payments, handling platform fees and payouts, or managing connected accounts for a platform.

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `_scores.json`, `references/payouts-refunds-oauth.md` and `references/webhooks.md`). Compatibility notes: Requires Node.js 20+ (stripe-node 23 dropped Node 18), Stripe account with Connect enabled

It sits in Backend & APIs. It works with Stripe. The repository describes itself as: Open-source library of AI agent skills — SKILL.md files for Claude Code, Codex, Gemini CLI, Cursor. The licence is Apache-2.0.

When your agent uses it

  • : building two-sided marketplaces
  • Splitting payments between buyers and sellers
  • Onboarding sellers/providers to accept payments
  • Handling platform fees and payouts

Example prompts

  • “/stripe-connect”

Requirements

  • Node.js
  • A credential in STRIPE_SECRET_KEY
  • A credential in STRIPE_WEBHOOK_SECRET
  • Compatibility (from SKILL.md): Requires Node.js 20+ (stripe-node 23 dropped Node 18), Stripe account with Connect enabled

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Create a connected account
  2. Generate onboarding link (Account Links v2)
  3. Check onboarding status

What it can do on your machine

Read from SKILL.md and the folder at commit a021875. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • stripe
    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • STRIPE_SECRET_KEY
    • STRIPE_WEBHOOK_SECRET
    • STRIPE_V2_WEBHOOK_SECRET

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires Node.js 20+ (stripe-node 23 dropped Node 18), Stripe account with Connect enabled

    From compatibility in the SKILL.md frontmatter.

Context cost

Stripe Connect loads about 2.9k tokens when it runs, and up to ~4.6k if it reads all its reference files. Until then it costs about 76 tokens; SKILL.md has 610 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~76
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from TerminalSkills/skills at commit a021875, republished under its Apache-2.0 licence (© TerminalSkills). 610 words, ~2,854 tokens.

Download SKILL.mdSave it as .claude/skills/stripe-connect/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
stripe-connect
description
Build marketplace and platform payment flows with Stripe Connect. Use when: building two-sided marketplaces, splitting payments between buyers and sellers, onboarding sellers/providers to accept payments, handling platform fees and payouts, or managing connected accounts for a platform.
compatibility
Requires Node.js 20+ (stripe-node 23 dropped Node 18), Stripe account with Connect enabled
license
Apache-2.0
metadata.author
terminal-skills
metadata.version
1.3.0
metadata.category
business
metadata.tags
stripe, stripe-connect, marketplace, payments, platform
metadata.use-cases
Onboard freelancers to accept payments on a service marketplace, Charge buyers and split payment between platform and seller, Create Express connected…
metadata.agents
claude-code, openai-codex, gemini-cli, cursor

Stripe Connect

Overview

Stripe Connect routes payments between buyers, sellers, and your platform — handling regulatory compliance (KYC), payouts, and tax reporting for connected accounts.

This skill uses the Accounts v2 API (/v2/core/accounts), Stripe's recommended path for new Connect platforms. A v2 account is shaped by the configurations you assign to it instead of a v1 account type + flat capabilities:

ConfigurationEnablesKey capability
merchantAccept payments (direct charges)card_payments
recipientReceive transfers / destination payoutsstripe_balance.stripe_transfers
customerBe billed as a customer (subscriptions, invoices)automatic_indirect_tax

Dashboard access is a separate dashboard field that replaces the old standard/express/custom type:

dashboard≈ v1 typeOnboardingBest for
"express"ExpressStripe-hostedMarketplaces (recommended)
"full"StandardStripe-hosted / OAuthSellers wanting a full Stripe dashboard
"none"CustomEmbedded / your UIPlatforms needing full control

Stay on Accounts v1 when you need OAuth for Standard accounts, the recipient service agreement (cross-border), or Treasury / Issuing capabilities. Accounts v1 (stripe.accounts.create({ type: "express" })) remains supported, and v1 and v2 endpoints work on the same account (a new v1 account can take up to 10 minutes before v2 endpoints accept it). See the legacy note in step 1.

Charge types (the payment APIs are v1 and reference the connected account by id):

TypeWho pays Stripe feesSeller config neededUse when
DirectConnected accountmerchantSeller wants full control
DestinationPlatformrecipientPlatform manages UX
Separate charges + transfersPlatformrecipientComplex routing

Instructions

Setup
bash
npm install stripe
ts
// lib/stripe.ts
import Stripe from "stripe";

// stripe-node 23.x pins API version 2026-09-30.endive; omit apiVersion to use the pinned one.
// Pass apiVersion only when you must stay on an older version.
export const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);

// Platform account key (your Stripe account).
// Connected accounts are identified by their account ID (acct_...).
Onboard Sellers (Accounts v2)
1. Create a connected account

Assign merchant (accept payments) and recipient (receive payouts/transfers). dashboard: "express" gives sellers Stripe's hosted Express dashboard.

ts
// POST /api/sellers/onboard
import { stripe } from "@/lib/stripe";

export async function createSellerAccount(email: string) {
  const account = await stripe.v2.core.accounts.create({
    contact_email: email,
    display_name: email,
    dashboard: "express",
    identity: {
      country: "us",
      entity_type: "individual",
    },
    configuration: {
      merchant: {
        capabilities: { card_payments: { requested: true } },
      },
      recipient: {
        capabilities: {
          stripe_balance: { stripe_transfers: { requested: true } },
        },
      },
    },
    defaults: {
      currency: "usd",
      responsibilities: {
        fees_collector: "application",   // platform collects application fees
        losses_collector: "application", // platform covers negative balances (Express behavior)
      },
    },
  });

  return account.id; // acct_... — store as seller.stripeAccountId
}

// Legacy (Accounts v1, still GA — use for the v1-only cases above):
//   const account = await stripe.accounts.create({
//     type: "express", email,
//     capabilities: { card_payments: { requested: true }, transfers: { requested: true } },
//   });
ts
export async function createOnboardingLink(accountId: string, userId: string) {
  const accountLink = await stripe.v2.core.accountLinks.create({
    account: accountId,
    use_case: {
      type: "account_onboarding",
      account_onboarding: {
        configurations: ["merchant", "recipient"],
        refresh_url: `${process.env.BASE_URL}/sellers/onboard/refresh?userId=${userId}`,
        return_url: `${process.env.BASE_URL}/sellers/onboard/complete?userId=${userId}`,
      },
    },
  });

  return accountLink.url; // Redirect seller here (link expires in ~10 min)
}
3. Check onboarding status
ts
export async function isSellerOnboarded(accountId: string): Promise<boolean> {
  const account = await stripe.v2.core.accounts.retrieve(accountId, {
    include: ["requirements", "configuration.merchant", "configuration.recipient"],
  });
  // v2 has no currently_due list: requirements.entries holds each open item with a
  // minimum_deadline.status of currently_due | eventually_due | past_due.
  const blocking = (account.requirements?.entries ?? []).filter(
    (e) => e.awaiting_action_from === "user" && e.minimum_deadline.status !== "eventually_due"
  );
  const cardActive =
    account.configuration?.merchant?.capabilities?.card_payments?.status === "active";
  return blocking.length === 0 && cardActive;
}
Charging Buyers

Destination charges and transfers require the seller's recipient configuration; direct charges require merchant. The PaymentIntents / Transfers APIs themselves are unchanged.

Destination Charges (Platform collects, sends to seller)
ts
// POST /api/payments/charge — amount in cents
export async function chargeWithDestination(
  amount: number, paymentMethodId: string, customerId: string,
  sellerAccountId: string, platformFeePercent = 15,
) {
  return stripe.paymentIntents.create({
    amount,
    currency: "usd",
    customer: customerId,
    payment_method: paymentMethodId,
    confirm: true,
    transfer_data: { destination: sellerAccountId }, // net goes to the seller
    application_fee_amount: Math.round(amount * (platformFeePercent / 100)), // platform keeps this
    automatic_payment_methods: { enabled: true, allow_redirects: "never" },
  });
}
Direct Charges (Seller's Stripe account)
ts
// The charge appears on the seller's account; the platform gets the fee
export async function directCharge(
  amount: number, paymentMethodId: string, sellerAccountId: string, platformFeePercent = 10,
) {
  return stripe.paymentIntents.create(
    {
      amount,
      currency: "usd",
      payment_method: paymentMethodId,
      confirm: true,
      application_fee_amount: Math.round(amount * (platformFeePercent / 100)),
    },
    { stripeAccount: sellerAccountId }, // create on behalf of the seller
  );
}
Separate Charges + Transfers (most flexible)
ts
// 1. Charge buyer on platform account
const paymentIntent = await stripe.paymentIntents.create({
  amount: 10000, // $100
  currency: "usd",
  payment_method: paymentMethodId,
  confirm: true,
});

// 2. Later: transfer to seller (e.g., after service delivered)
export async function payoutToSeller(
  chargeId: string, // pi.latest_charge (a ch_... id, not the pi_ id)
  sellerAccountId: string,
  amount: number // amount to send seller (after platform fee)
) {
  const transfer = await stripe.transfers.create({
    amount,
    currency: "usd",
    destination: sellerAccountId,
    source_transaction: chargeId, // links the transfer to the original charge
  });
  return transfer;
}
Webhooks, Payouts, Refunds & OAuth

Detailed code lives in references/ to keep this file short:

  • references/webhooks.md — v1 Connect webhook handler (account.updated, payment_intent.*, transfer.created, payout.paid, charge.dispute.created), registering a connect: true endpoint, and Accounts v2 thin events (v2.core.account[requirements].updated).
  • references/payouts-refunds-oauth.md — automatic vs instant payouts, seller balance, refunds with refund_application_fee + reverse_transfer, and the OAuth flow for Standard accounts (v1 only).
Testing
bash
# Use test mode keys (sk_test_...)
# Test card numbers:
# 4242 4242 4242 4242 — success
# 4000 0000 0000 9995 — insufficient funds
# 4000 0025 6000 0001 — requires authentication (3DS)

# Trigger webhooks locally:
stripe listen --forward-to localhost:3000/webhooks/stripe
stripe trigger payment_intent.succeeded

Examples

Show full SKILL.md (245 more words)Show less
Example 1: Onboard a freelancer and take a 15% fee

Request: "Freelancers on our marketplace should get paid, we keep 15%."

  1. createSellerAccount("dana.ortiz@studio-ortiz.dev") returns acct_...; store it on the seller row.
  2. createOnboardingLink(accountId, userId) returns a Stripe-hosted URL; redirect the seller there.
  3. After the return URL (and an v2.core.account[requirements].updated event), isSellerOnboarded becomes true; then chargeWithDestination(12000, pmId, custId, accountId, 15) charges $120.00 and creates a $18.00 application fee, with $102.00 (before Stripe fees) transferred to the seller.
Example 2: Hold funds until the job is done

Request: "Charge the buyer now, pay the seller only after delivery." Create the PaymentIntent on the platform with no transfer_data, keep pi.latest_charge, and after delivery call payoutToSeller(chargeId, accountId, 8500). The transfer is tied to the charge via source_transaction, so it is paid out when the funds are available.

Guidelines

  • Use test-mode keys while developing (sk_test_...); never commit keys; load them from STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_V2_WEBHOOK_SECRET (and STRIPE_CLIENT_ID for Standard OAuth).
  • Verify webhook signatures on the raw body; use separate endpoints for v1 Connect events and v2 thin events.
  • Amounts are integers in the smallest currency unit; compute the fee with Math.round.
  • Never store card data; accept payment methods created with Stripe.js or Elements.
  • Test cards: 4242 4242 4242 4242 succeeds, 4000 0025 6000 0001 asks for 3D Secure; trigger events locally with stripe listen --forward-to localhost:3000/webhooks/stripe and stripe trigger payment_intent.succeeded.
  • Connect KYC rules differ by country; sellers may be restricted until requirements are met, so check capability status before charging.

© TerminalSkills, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (references) in skills/stripe-connect of TerminalSkills/skills.

  • SKILL.md
  • _scores.json
  • references/payouts-refunds-oauth.md
  • references/webhooks.md

Open the folder on GitHubat commit a021875

Compare with similar skills

Stripe Connect next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Stripe Connect compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Stripe Connect this skillTerminalSkills/skills163—~2.9kAutomated safety check: PassApache-2.0
Firecrawl Build Onboardingfirecrawl/firecrawl190k1 repos~1.4kAutomated safety check: NotesISC
Stripe Projectsfossasia/eventyay1.7k5 repos~2kAutomated safety check: NotesApache-2.0
Stripe Appsfossasia/eventyay1.7k1 repos~3.6kAutomated safety check: PassApache-2.0
Dinero Currency Patternsdinerojs/dinero.js6.8k—~650Automated safety check: PassMIT
Stripe Best Practiceskanchengw/cnllm1732 repos~925Automated safety check: PassApache-2.0

Similar skills

  • Firecrawl Build Onboarding

    firecrawl/firecrawl

    Gets Firecrawl working in a project: signs you in through the browser, saves FIRECRAWL_API_KEY to .env and picks the first SDK or REST path.

    190k GitHub starsUsed in 1 repo~1.4k tokens
    Backend & APIsAuto-check: notes
  • Stripe Projects

    fossasia/eventyay

    A skill your agent uses when the user wants to provision infrastructure or third-party services using Stripe Projects.

    1.7k GitHub starsUsed in 5 repos~2k tokens
    Backend & APIsAuto-check: notes
  • Stripe Apps

    fossasia/eventyay

    A skill your agent uses when building, modifying, or reviewing a Stripe App — or when the user describes something that implies one (e.g.

    1.7k GitHub starsUsed in 1 repo~3.6k tokens
    Backend & APIsAuto-check passed
  • Dinero Currency Patterns

    dinerojs/dinero.js

    Currency handling patterns for the Dinero.js money library. An agent skill from dinerojs/dinero.js.

    6.8k GitHub stars~650 tokensUpdated 5 days ago
    Backend & APIsAuto-check passed
  • Stripe Best Practices

    kanchengw/cnllm

    Guides Stripe integration decisions — API selection (Checkout Sessions vs PaymentIntents), Connect platform setup (Accounts v2, controller properties), billing/subscriptions, Treasury financial…

    173 GitHub starsUsed in 2 repos~925 tokens
    Backend & APIsAuto-check passed
  • Handles Laravel Cashier Stripe integration including subscriptions, webhooks, Stripe Checkout, invoices, charges, refunds, trials, coupons, metered billing, and payment failure handling.

    343 GitHub starsUsed in 1 repo~1.2k tokens
    Backend & APIsAuto-check passed

More from TerminalSkills/skills

All 10 skills in this repo
  • Blender Addon Dev

    TerminalSkills/skills

    Build custom Blender add-ons with Python. An agent skill from TerminalSkills/skills.

    163 GitHub stars~2k tokensUpdated 6 days ago
    Auto-check passed
  • Seog

    TerminalSkills/skills

    Run local SEO from your terminal via the SEOG MCP server — Google Business Profile management, map-pack rank tracking and geo-grid scans, review sync and replies published to Google, competitor…

    163 GitHub stars~3.4k tokensUpdated 6 days ago
    Auto-check passed
  • 3dsmax Rendering

    TerminalSkills/skills

    Scripts and configures production rendering in Autodesk 3ds Max with the V-Ray and Corona renderers: output size and files, render elements, denoising, light mix, batch and command-line rendering…

    163 GitHub stars~3.8k tokensUpdated 6 days ago
    Auto-check passed
  • 3dsmax Scripting

    TerminalSkills/skills

    Covers scripting Autodesk 3ds Max, the 3D modeling and rendering application, with MAXScript and Python (pymxs): scene manipulation, object creation, material assignment, camera and light setup…

    163 GitHub stars~3.2k tokensUpdated 6 days ago
    Auto-check passed
  • 3proxy

    TerminalSkills/skills

    3proxy is a small open-source proxy server that runs HTTP/HTTPS, SOCKS4/5, SNI and TCP/UDP port-mapping proxies from one config file.

    163 GitHub stars~3.5k tokensUpdated 6 days ago
    Auto-check: notes
  • A2a Protocol

    TerminalSkills/skills

    Builds Agent2Agent (A2A) servers and clients, the open protocol (originally from Google, now under the Linux Foundation) that lets AI agents from different frameworks call each other.

    163 GitHub stars~2.8k tokensUpdated 6 days ago
    Auto-check passed

Works with

Categories

Questions about Stripe Connect

What does Stripe Connect do?

Build marketplace and platform payment flows with Stripe Connect. Stripe Connect is an agent skill from TerminalSkills/skills. Build marketplace and platform payment flows with Stripe Connect.

When should I use Stripe Connect?

Stripe Connect fits situations like: : building two-sided marketplaces; splitting payments between buyers and sellers; onboarding sellers/providers to accept payments; handling platform fees and payouts.

How do I install Stripe Connect in Claude Code?

Run `npx skills add TerminalSkills/skills --skill stripe-connect -a claude-code`. Or copy the skill folder (skills/stripe-connect in TerminalSkills/skills) into .claude/skills/stripe-connect in your project. Claude Code loads it when a task matches its description.

How do I install Stripe Connect in Codex?

Run `npx skills add TerminalSkills/skills --skill stripe-connect -a codex`. Or copy the skill folder (skills/stripe-connect in TerminalSkills/skills) into .agents/skills/stripe-connect in your project. Codex loads it when a task matches its description.

Can I use Stripe Connect in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add TerminalSkills/skills --skill stripe-connect -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/stripe-connect, .gemini/skills/stripe-connect, .github/skills/stripe-connect and .opencode/skills/stripe-connect in your project.

What does Stripe Connect need to run?

Going by SKILL.md and its folder, Stripe Connect needs the command-line tools its instructions call (stripe and npm) and credentials named STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET and STRIPE_V2_WEBHOOK_SECRET. Our summary lists: Node.js; A credential in STRIPE_SECRET_KEY; A credential in STRIPE_WEBHOOK_SECRET. Compatibility (from SKILL.md): Requires Node.js 20+ (stripe-node 23 dropped Node 18), Stripe account with Connect enabled.

Does Stripe Connect access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Stripe Connect safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Stripe Connect use?

Stripe Connect is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Stripe Connect use?

About 2.9k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.7k tokens, read only when the agent opens those files.

What are the alternatives to Stripe Connect?

Skills that share tags, products or a category with Stripe Connect: Firecrawl Build Onboarding (firecrawl/firecrawl, 190k stars), Stripe Projects (fossasia/eventyay, 1.7k stars), Stripe Apps (fossasia/eventyay, 1.7k stars) and Dinero Currency Patterns (dinerojs/dinero.js, 6.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Stripe Connect?

TerminalSkills (a GitHub organization) maintains it in TerminalSkills/skills, which has 163 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 3, 2026.

Source: TerminalSkills/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.