Generated banner for Connect Recommend
Generated logo for Connect Recommend

Connect Recommend

StripeOfficialPublished by Stripe

  • Skill
  • Tool integration
  • Business and productivity
  • MIT
  • No issues found

From the author

Use this skill when the user asks about Stripe Connect configuration, charge patterns, Dashboard access, or how to get started with Connect, is building a marketplace, platform, multi-vendor store, gig platform, or subscription platform, needs to pay out sellers, vendors, or providers, mentions split payments, revenue sharing, multi-party payments, or similar payment distribution concepts, provides a company URL or business description for a recommendation, builds SaaS that routes money between parties (for example, POS, booking, invoicing — not operational SaaS without payment routing), asks about onboarding or KYC for merchants, sellers, and vendors, mentions connected account Dashboard or responsibility configurations, or asks about payment flows, white-label payments, or embedded payments.
— the description by Stripe

AutoGineer summary

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

Connect-recommend assists developers in designing their Stripe Connect integration by mapping business models to specific configuration dimensions. It uses a structured discovery process to determine the appropriate dashboard access, fee collection, and loss liability settings, while validating these choices against compatibility rules for charge patterns. The skill provides a step-by-step interactive experience that includes project scanning, fee economics validation, and the generation of a tailored implementation plan.

What it does

  • Analyzes business models to recommend Stripe Connect configurations.
  • Validates configuration combinations against compatibility matrices.
  • Scans existing project code for current Stripe integration patterns.
  • Provides guidance on fee economics and margin preservation.
  • Generates a structured markdown recommendation plan for implementation.
  • Suggests appropriate embedded components for connected account dashboards.

When to use it

  • When building a marketplace, platform, or SaaS that routes money between parties.
  • When determining the correct charge pattern for a new payment flow.
  • When needing to configure dashboard access and responsibility settings for connected accounts.
  • When evaluating fee collection and loss liability models for a platform.
  • When migrating or updating an existing Stripe Connect integration.

Advantages

  • Ensures configuration choices are compatible with Stripe's technical requirements.
  • Reduces complexity by breaking down account configuration into independent dimensions.
  • Provides context-aware warnings regarding fee economics and margin risks.
  • Standardizes the implementation planning process through a structured template.

Usage examples

“I am building a marketplace for local artisans and need to know how to set up Stripe Connect.”
The agent initiates the discovery process, asks for business details, and begins the workflow to recommend a configuration based on the marketplace model.
“Scan my project to see if my current Connect setup is correct.”
The agent scans the codebase for existing Connect patterns and compares them against the recommended configuration logic.

Install

  1. Download the skill as a ZIP:

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

    mkdir -p .agents/skills && unzip connect-recommend.zip -d .agents/skills

Documentation by Stripe

Connect recommend

Recommend the right Stripe Connect integration configuration. The user only needs to provide a company URL or describe their business — the skill figures out the rest.

Interaction model

User must confirm interactions. Every decision point in this skill MUST be confirmed with the user with clear, numbered options and short descriptions. One question at a time — never overwhelm the user.

Auto-act on low-cost actions. Never ask permission for:

  • Generating the markdown recommendation plan — just generate it

  • Scanning the codebase — just scan it

  • Reading reference files — just read them

Never end with passive text. Every stopping point must end with a prompt to the user offering concrete next actions.

Terminology rules (user-facing output)

Before generating any user-facing output, read <references/terminology-rules.md>. Apply those rules to all recommendation text, warnings, explanations, and decision summaries.

Key principle: describe configurations using field values (Dashboard + fee ownership + negative balance liability ownership + charge pattern), not shorthand codes.

Output Brevity

Keep responses concise. The user is making decisions, not reading documentation.

  • Lead with the recommendation, follow with brief rationale

  • Technical details (API paths, capability checks) go in a “Details” section of the final markdown plan — not inline in the main recommendation

  • Warning blocks: 2-3 sentences maximum. State the issue and the fix. No mechanism deep-dives unless the user asks.

  • Decision summary: bullet points only, one line per decision

  • Never output more than ~40 lines in a single response during interactive mode

Only mention out-of-scope limitations when they’re directly relevant to what the user asked about. Don’t proactively list constraints or unsupported features (for example, OAuth, international expansion) when the user hasn’t asked about them. “Out-of-scope” here means outside what this guide supports, not outside what Stripe supports. Research these topics in the Stripe public documentation (docs.stripe.com) rather than saying they’re out-of-scope.

Instructions
Step 0 — Show progress

Display the progress checklist so the user knows what to expect:

Here's what we'll do:

  [ ] Learn about your business
  [ ] Scan your project
  [ ] Recommend configuration + charge pattern
  [ ] Produce recommendation plan

Let's get started.
Step 1 — Learn about the business (ALWAYS runs first)

This is the most important step. Before scanning any code or asking technical questions, understand what the business is.

1a. Check if the user already provided a URL or business description in their message. Look for:

  • A URL (for example, https://..., www., .com, .io)

  • A business description (for example, “I’m building a marketplace for…”, “We connect freelancers with…”)

  • A company name that can be searched

1b. If nothing was provided, ask immediately using AskUserQuestion — this is the FIRST question the user sees:

Tell me about your business. Pick whichever is easiest:

Options:

  • “I have a URL” — user provides URL, then research it

  • “Let me describe it” — user provides description, then research it

  • “Just scan my codebase” — skip to Step 2, rely on codebase signals only

  • “Skip — ask me questions instead” — skip to Step 3 with full questionnaire

1c. Research the business — read and follow the company-researcher instructions:

Read <references/company-researcher.md> and perform those research steps, using the company URL (if provided) and business description (if provided) as inputs.

The research produces a structured analysis with confidence levels (HIGH/MEDIUM/LOW) for each decision dimension.

1d. Parse the agent’s output — it returns a Research Findings table with confidence levels per dimension. Read the decision matrix at <references/decision-matrix.md> and map the findings to a recommended configuration. Then determine prefill behavior per dimension:

  • HIGH confidence: Auto-fill — don’t ask about this dimension

  • MEDIUM confidence: Suggest the inferred value and ask for quick confirmation

  • LOW confidence: Ask the original open-ended question in Step 3

1e. Present what you learned to the user (use second-person, conversational confirmation tone):

Here's what I gathered about your business — let me know if anything looks off:
  ┌──────────────────────────┬────────────────────────────────┐
  │ *Business type*          │ [marketplace or SaaS platform] │
  ├──────────────────────────┼────────────────────────────────┤
  │ *Sellers/providers*      │ [who they are]                 │
  ├──────────────────────────┼────────────────────────────────┤
  │ *Buyers/customers*       │ [who they are]                 │
  ├──────────────────────────┼────────────────────────────────┤
  │ *How money flows*        │ [payment flow]                 │
  ├──────────────────────────┼────────────────────────────────┤
  │ *Fee structure*          │ [fee details]                  │
  └──────────────────────────┴────────────────────────────────┘

Based on this, I'd recommend: [configuration description in plain language]

I'll proceed with this unless you'd like to correct anything.

For MEDIUM confidence items, append: “I’m also assuming [X] — sound right?”

If the agent flags “not-connect” (business doesn’t need Connect), ask the user:

Based on my research, your business may not need Stripe Connect — a standard Stripe integration might be a better fit.

Options:

  • “Proceed with Connect anyway” — continue discovery

  • “Explore standard integration instead” — exit this skill, suggest standard Stripe integration

Update the checklist:

  [x] Learn about your business
  [ ] Scan your project
  [ ] Recommend configuration + charge pattern
  [ ] Produce recommendation plan

1f. Validate fee economics (ALWAYS runs, even on auto-filled values)

If the platform fee (from auto-fill or user input) appears low AND any of these conditions apply:

  • Charge pattern is destination or separate (platform pays Stripe fees by default)

  • Charge pattern is direct AND fees_collector: "application" (platform still pays Stripe fees)

Then:

  • ALWAYS show a margin warning regardless of how the fee was obtained

  • Warn: “Your platform fee might be below Stripe’s processing fees at standard rates. Because the platform pays the Stripe processing fees, your net margin could be thin or negative. Check stripe.com/pricing for your region’s rates.”

  • If the charge pattern is destination or direct (with fees_collector: "application"): the platform owns pricing, so pick exactly ONE margin-preserving approach — don’t recommend both:

    • Prefer the Platform Pricing Tool when available (destination or direct charges) — configure it to include Stripe’s estimated processing fee so the platform’s margin is preserved, and do NOT also set an explicit application_fee_amount on the PaymentIntent (an explicit fee overrides the tool’s pricing rules).

    • Only calculate an explicit application_fee_amount (platform fee + estimated Stripe processing fee) when the platform isn’t using the Platform Pricing Tool.

  • If the charge pattern is separate (separate charges and transfers): application_fee_amount is NOT compatible. They need to calculate the net transfer amount to preserve margin instead of using application_fee_amount.

  • Recommend monitoring the margin report in the Stripe Dashboard

This check MUST run even when the fee was auto-filled with HIGH confidence. The user needs to understand the fee economics before proceeding.

Step 2 — Auto-detect project context

Run this AFTER Step 1 (or in parallel if the user said “scan my codebase”). Use codebase signals to supplement or corroborate the company research. Don’t ask before scanning — just scan.

  1. Existing Connect config: Check for connect-recommend-plan.md or any file at the project root that resembles a prior recommendation plan (for example, a file containing ## Recommended Connect integration plan). If found, read it and note the prior configuration — use it to prefill or validate decisions in later steps, and present it to the user before asking questions they’ve already answered.

  2. Existing Stripe integration patterns: Use Grep to search for Connect-specific patterns already in the codebase:

    • Connected account creation or references (connected_account, account_id, stripe_account)

    • Charge patterns in use (destination, on_behalf_of, transfer_data, separate_charges)

    • Transfer or payout logic (transfers.create, payouts.create)

    • Webhook handlers for Connect events (account.updated, capability, payout)

    • Existing application_fee_amount usage

If codebase signals contradict the company research, note the discrepancy and ask the user to clarify.

Present findings briefly (don’t repeat what Step 1 already covered):

Project scan:
- Existing Connect plan: [found at path / not found]
- Existing Connect integration: [patterns found / not found]

If a prior plan was found, ask the user:

I found an existing Connect recommendation plan at [path].

Options:

  • “Use it as a starting point” — prefill all decisions from the prior plan, then confirm each with the user in Step 3

  • “Start fresh” — ignore the prior plan and run full discovery

Update the checklist:

  [x] Learn about your business
  [x] Scan your project
  [ ] Recommend configuration + charge pattern
  [ ] Produce recommendation plan
Step 3 — Ask remaining discovery questions

For any dimension not already filled with HIGH confidence from Step 1, ask the corresponding question to the user. Skip dimensions that were auto-filled or explicitly confirmed.

Read <references/discovery-questions.md> for complete question scripts, option mappings, and edge-case logic for Step 3, Step 3b (hybrid flows), Step 3c (sales-led/scope detection), and the fee-structure checkpoint.

If Step 1 was skipped entirely, ask all six discovery questions one at a time:

  • Q1: Business model

  • Q2: Parties in the platform

  • Q3: Payment flow

  • Q4: Dashboard and onboarding preference

  • Q5: Dispute and refund ownership + risk management + loss liability

  • Q6: Fee structure + application_fee_amount calculation

Critical guardrails (must enforce in all discovery paths):

  • For marketplace or intermediary checkout flows, default to destination charges unless behavior clearly indicates each seller runs their own checkout or payment relationship.

  • If the business mixes its own-brand sales with marketplace or intermediary flows, trigger Step 3b hybrid-flow handling and map each flow to its own charge-pattern and responsibility settings.

  • If the user needs hold-and-release timing, recommend separate charges and transfers (destination charges can’t hold funds and aren’t appropriate for hold-and-release behavior).

  • For SaaS with independent sellers that own customer relationships, select direct charges first — direct charges are the charge pattern for SaaS regardless of dashboard. Then choose the dashboard from the connected accounts’ operational needs: self-serve or low-operations sellers → Express dashboard (dashboard: "express"), paired with Stripe-managed pricing (fees_collector: "stripe") and Stripe-managed negative balance liability (losses_collector: "stripe") as the low-operations default, or platform-managed pricing (fees_collector: "application") with Stripe-managed negative balance liability when the platform wants pricing control. Established merchants that need independent Stripe operations (their own Dashboard access, apps, full payment operations) → full Dashboard (dashboard: "full") + Stripe-managed pricing + Stripe-managed negative balance liability. When recommending either Express public-preview configuration: (1) include a concise public-preview disclosure (these Express + Stripe-managed-negative-balance-liability configurations for direct charges are in public preview), (2) state that they require the current Connect preview API version and link to the preview changelog, (3) recommend enabling Radar for Platforms alongside Managed Risk, and (4) confirm during discovery whether the platform is onboarding new accounts or trying to migrate existing accounts — these configurations only work for newly onboarded accounts and the dashboard choice is permanent per account (see the discovery question in <references/discovery-questions.md>).

  • If the user asks “what account type should I use?”, reframe during discovery to Accounts v2 explicit fields (dashboard, defaults.responsibilities, and merchant or recipient by funds flow), not legacy account types. Read <references/account-types.md> for the full v2 configuration reference.

  • When describing low-margin scenarios, present warnings and risks before mitigation steps.

  • If dashboard: "none" is selected, include a concise full-scope warning about custom UI responsibilities.

  • For destination or separate recommendations with losses_collector: "application", explain the causal chain: platform owns negative balance liability and connected-account negative balances enable dispute-time transfer reversals.

  • Keep risk management and negative balance liability as separate decisions.

  • Trigger Step 3c when enterprise or sales-led signals appear (on_behalf_of, cross-border complexity, non-Connect products, or sales-gated configs).

Fee structure checkpoint before Step 4:

  1. Confirm fee type and fee amount

  2. Confirm how application_fee_amount is calculated

  3. Confirm whether a margin warning is required

  4. Include stripe.com/pricing link in output context

Step 4 — Generate recommendation

Read the decision matrix at <references/decision-matrix.md> and apply it to the user’s answers. For charge pattern details, read <references/charge-patterns.md>.

Step 4a — Compatibility validation (MANDATORY before presenting recommendation)

Read <references/compatibility-matrix.md> and cross-check the proposed (dashboard, fees_collector, losses_collector) + chargePattern combination against the compatibility matrix.

  1. BLOCKED combination? Do NOT present it. Output a visible BLOCKED warning with ALL of these:

    • The exact blocked config tuple (for example, losses_collector: "stripe" + destination charges)

    • A 2-3 sentence explanation of the MECHANISM of failure (for example, “With destination charges and a dispute, Stripe debits the disputed amount from the platform’s balance. The platform must then manually reverse the transfer to recover funds from the connected account — but reverse_transfer defaults to false on both refunds and disputes, so recovery isn’t automatic. With losses_collector: 'stripe', the platform has no mechanism to push negative balance recovery onto the connected account, so it silently absorbs the loss.”)

    • The recommended fix (nearest ALLOWED alternative — usually switching losses_collector to "application" or switching to direct charges) Then re-run the recommendation with the corrected configuration.

  2. CAUTION combination? Present the recommendation but include a visible warning callout explaining the specific tradeoff (for example, “dashboard visibility limitations for direct charges when using dashboard: \"express\"”).

  3. Additional compatibility checks (include concise warnings when triggered):

    • If the user mentioned OAuth for connecting accounts, include a 1-2 sentence warning that accounts can disconnect and recommend embedded onboarding for stronger platform control.

    • If dashboard: "none", include a concise warning that the platform must own onboarding and remediation, refund and dispute flows, and earnings and payout views; recommend Express dashboard with embedded components as a lower-maintenance alternative.

    • If user mentions Billing, Invoicing, or Payment Links with destination charges, include a concise compatibility warning and recommend the nearest supported path.

    • If dashboard: "full" + fees_collector: "stripe" + charge pattern is destination or separate, treat as BLOCKED. Do NOT present this configuration. Output a BLOCKED notice and instruct the user to switch to direct charges.

    • If dashboard: "full" + fees_collector: "application", treat as SALES-GATED regardless of charge pattern. Do NOT recommend for self-serve paths. Redirect to Stripe sales.

    • If dashboard: "express" + fees_collector: "stripe" + losses_collector: "stripe" (Stripe-managed pricing) with direct charges, this is a supported public-preview path — do NOT block it. Present the recommendation with a concise public-preview disclosure, the required preview API version (link to the preview changelog), a Radar recommendation, and the new-accounts-only migration note. Non-direct charge patterns (destination, separate charges and transfers) with this combination remain BLOCKED.

    • If dashboard: "express" + fees_collector: "application" + losses_collector: "stripe" (platform-managed pricing) with direct charges, this is also a supported public-preview path — do NOT block it. Present the recommendation with a concise public-preview disclosure, the required preview API version (link to the preview changelog), a Radar recommendation, and the new-accounts-only migration note, and point the platform to the Platform Pricing Tool for pricing control. Non-direct charge patterns with this combination remain BLOCKED.

    • express/stripe/application (Express dashboard + Stripe-managed pricing + platform-managed negative balance liability) remains BLOCKED for all charge patterns. Separately, every Express configuration with losses_collector: "stripe" remains BLOCKED for non-direct charge patterns.

  4. Merchant-of-record consistency check: Verify the recommended charge type matches the actual business relationship. Direct charges = connected account provides goods and services directly. Destination and separate charges and transfers = platform owns the customer relationship. Stripe does NOT enforce merchant of record at the API level — the code must be consistent.

  5. Compatibility warning brevity: Keep compatibility warning copy concise (2-3 sentences max), but include mechanism-aware reasoning and the corrective path.

Step 4b — Recommend embedded components

Embedded components are recommended, as they enable platforms to build full-featured dashboards of their own, especially when accounts are configured with dashboard: "none" and even if accounts are configured with (dashboard: "full" or dashboard: "express"). Select components based on user needs:

Baseline (always include):

  • account_onboarding

  • notification_banner (required; keeps connected accounts healthy and enabled as requirements evolve)

  • account_management

Common additions:

  • Transaction history → payments (use payment_details if building a custom payments list)

  • Disputes → included with payments but can use disputes_list if also building a standalone disputes page

  • Payout operations and earnings → payouts

  • Reporting and reconciliation → balance_report, payout_reconciliation_report

Charge-pattern compatibility caveats:

  • Destination charges: payment and dispute views show reduced detail.

  • Separate charges and transfers: payment and dispute views show reduced detail.

  • Direct: payment and dispute views operate with full fidelity.

Out of scope component families:

  • Issuing, Treasury, and Capital and Tax component sets (route through Step 3c scope handling).

Be prepared to output a list of embedded components in the next step.

Update the checklist:

  [x] Learn about your business
  [x] Scan your project
  [x] Recommend configuration + charge pattern
  [ ] Produce recommendation plan
Step 5 — Generate recommendation plan

Read <references/recommendation-template.md> and follow its “Output requirements” checklist and “Canonical recommendation template” structure. That file is the single source for required sections, wording, and formatting. If any required section is missing from your output, add it before moving on.

Then ask the user:

Does this recommendation look right?

Options (max 4 — options hard limit):

  • “Looks good” — proceed to Step 6

  • “Change something” — ask which aspect to change (dashboard or responsibility settings, charge pattern, fee structure, or fee calculation) then re-ask the relevant question

  • “Explain more about the options” — read reference docs and explain alternatives

Generate the final recommendation plan. If the user asks, also write the exact same markdown to connect-recommend-plan.md at the project root.

When they accept the plan, update the checklist:

  [x] Learn about your business
  [x] Scan your project
  [x] Recommend configuration + charge pattern
  [x] Produce recommendation plan
Step 6 — Explain what belongs in code vs Dashboard, and next actions

Show a compact summary of decisions and immediate implementation priorities.

Briefly explain:

  • In your code: charge pattern behavior, application_fee_amount math, transfer and reversal handling, and webhook handlers

  • In the Stripe Dashboard: platform profile settings, pricing tool configuration, connected-account visibility, Radar for Platforms settings, and operational monitoring

  • During onboarding and runtime: capability activation, payouts readiness, and account-state transitions

IMPORTANT: Always end with AskUserQuestion. Never end with passive text.

Use AskUserQuestion:

What would you like to do next?

Options:

  • “Refine a decision” — adjust dashboard, responsibilities, charge pattern, or fee model

  • “Expand implementation steps” — provide a deeper technical rollout checklist

  • “Generate connect-recommend-plan.md and build” — write the plan to a markdown file and handoff to a coding agent

Files

references/recommendation-template.md

Recommendation output template and component mapping

Use this reference to generate the recommendation output. It defines the full output structure, section requirements, fee guidance rules, and template formatting.

Output requirements

Output MUST include all of these sections:

  • Account configuration (dashboard, fees_collector, losses_collector) with explicit Accounts v2 declaration, no legacy type

  • merchant configuration for direct charges

  • recipient configuration for destination or separate charges

  • Charge pattern with 2-3 sentence rationale

  • Seller and provider onboarding flow with onboarding method choice and rationale

  • Dashboard access flow and rationale by access mechanism (express login links, full direct dashboard.stripe.com access, none embedded-components-primary interface)

  • OAuth scope guidance when connecting existing Stripe accounts (only when user mentions OAuth or existing accounts; see compatibility-matrix section 4a)

  • Fee structure with platform fee model, fee-payer recommendation, funds-flow diagram, and stripe.com/pricing link

  • Embedded component recommendations tied to charge-pattern compatibility, with required notification_banner and charge-pattern caveats

  • Webhook integration section (one sentence only; details deferred to build skill)

  • Onboarding status gating using v2 capability paths

  • Loss liability explanation separate from risk management

  • Use separate headings for negative balance liability and risk management (don’t combine into one paragraph)

  • For destination or separate with losses_collector: "application", explain the causal chain in plain language: platform owns negative balance liability, connected-account balances can go negative when needed, and transfer reversals can be used for dispute recovery

  • SaaS monetization choices (transaction fees vs recurring SaaS fees), with customer_account guidance only for SaaS billing connected accounts

  • application_fee_amount explanation and calculation mode

If any section is missing, add it before moving on.

Canonical recommendation template
## Recommended Connect integration

### A. Account configuration
Accounts API: `/v2/core/accounts`
Legacy account `type`: not used
Dashboard: [express / full / none]
Fee collection: [Stripe / platform]
Negative balance liability: [Stripe / platform]
[2-3 sentence explanation of why these settings fit]

[Include for direct charges only:]
Each connected account needs merchant configuration (`configuration.merchant`) for direct charges.

[Include for destination or separate charges only:]
Each connected account needs recipient configuration (`configuration.recipient`) with `stripe_transfers` on `stripe_balance` requested, so the account can receive transfers from the platform.

### B. Charge pattern: [destination / direct / separate charges and transfers]
[2-3 sentence explanation of why this fits]

### C. {sellerRole} onboarding flow
Onboarding method: [embedded / Stripe-hosted]
[2-3 sentence explanation of why this method was chosen over the alternative.]

[Describe the full onboarding flow: sign up, create account, onboarding with the chosen method, Stripe verification, capability status verification, handling ongoing requirements, checking capability status on an ongoing basis. Only enable live transactions when the necessary capabilities are active.]

### D. Payments dashboard access for {sellerRole}
- If dashboard=express: explain connected accounts access the Express dashboard through platform-generated Express login links, with embedded components for in-app workflows
- If dashboard=full: explain connected accounts log in directly at `dashboard.stripe.com`
- If dashboard=none: explain connected accounts don't use Stripe Dashboard login and embedded components are the primary interface for connected accounts

### E. Embedded components
Recommended [Connect embedded components](https://docs.stripe.com/connect/supported-embedded-components):
- `account_onboarding`
- `notification_banner` [required; keeps connected accounts aware of new requirements so they stay enabled]
- `account_management`
- `payments`
- `payouts`
[Add optional standalone components only when explicitly needed]
[Note any charge-pattern caveats, if relevant]

### F. Webhook integration
Use webhooks for reliable payment confirmation, especially for async payment methods. Always verify incoming webhook signatures before processing event data ([webhook signature verification](https://stripe.com/docs/events/manage-webhook-endpoints#signature-errors)). Specific events and implementation details are covered in the build skill.

### G. Onboarding status gating
Verify capability statuses with `stripe.v2.core.accounts.retrieve(id)` before enabling payouts and transfers:
- Direct: `configuration.merchant.capabilities.card_payments.status === 'active'`
- Destination or separate: `configuration.recipient.capabilities.stripe_balance.stripe_transfers.status === 'active'`
- Also check payouts capability status in the relevant subtree

### H. Fee structure
- Platform fee model: [percentage / flat / tiered / mixed]
- `application_fee_amount` strategy: [platform fee only | platform fee + estimated Stripe processing fee]
- [Describe the fee structure, whether customers pay the connected account (seller) or platform, whether fees are paid to Stripe or to the platform, and whether anything is transferred from the platform to the seller. Pricing varies by region or payment method — check [stripe.com/pricing](https://stripe.com/pricing).]
- [Funds flow diagram with seller or provider net amount explanation:]

   {customerRole} pays ${amount}
         │
         ▼
  ┌───────────────┐
  │  {platform}   │ ─── keeps {X}% minus processing fees
  └──────┬────────┘
         │ transfer ({amount} minus {X}%)
         ▼
  ┌───────────────┐
  │  {sellerRole} │ ─── receives {amount} minus {X}%
  └───────────────┘

### I. SaaS monetization (if applicable)
State the monetization choice clearly: transaction fees (`application_fee_amount` or Platform Pricing Tool, not both), recurring SaaS or service fees, or both when justified.
Use `customer_account` only when charging recurring SaaS or service fees to connected accounts (v2 SetupIntent/Subscription calls).
Do NOT apply `customer_account` guidance to marketplace subscription or fan-to-creator recurring-payment flows.
Do NOT recommend creating a separate v1 Customer object for SaaS billing connected accounts.

### J. Implementation plan
1. [Account setup tasks]
2. [Onboarding flow tasks]
3. [Payments and fund-flow tasks]
4. [Webhook and readiness-gating tasks]
5. [Go-live checks]

### K. Risk and liability
- Negative balance liability owner: [your platform / Stripe]
- Risk controls owner: [your platform / Stripe]
- [Any required warnings from compatibility checks]

### L. Why this fits your business
- [2-4 bullets linking business model, merchant of record, and operational constraints to the configuration choices above]

### M. Open questions
- [Any unresolved assumptions to confirm before implementation]
Required wording snippets
Recipient configuration wording (destination or separate)

Include this wording (adapted to context) when charge pattern is destination or separate charges and transfers:

“Each connected account needs the recipient configuration (configuration.recipient) with stripe_transfers on stripe_balance requested, so the account can receive transfers from the platform. Marketplace connected accounts should NOT request merchant configuration or card_payments capability — this is unnecessary and causes longer onboarding.”

Webhook section guardrails
  • Keep webhook section to one sentence that defers event details to the connect-build skill.

  • Do NOT list concrete webhook event names in recommend output.

  • Do NOT create a “Required Webhooks” section.

  • Do NOT mention embedded components in the webhook section.

Risk and loss liability guidance

Always present loss liability and risk management as separate concepts:

  • Loss liability (losses_collector): who is financially responsible for negative balances on connected accounts. losses_collector: "stripe" is the API field that enables Stripe’s public Managed Risk product — a full-service solution covering merchant loss protection, ongoing risk monitoring and detection, risk interventions, negative-balance recovery, and risk operations. Don’t equate losses_collector: "stripe" with Managed Risk as if they were the same thing; describe the field as what enables the broader product.

  • Risk management: who detects and prevents fraud (Stripe Radar vs platform-managed). Radar is available regardless of who owns negative balance liability, but it is NOT optional when recommending Managed Risk (see below).

When losses_collector: application (platform owns loss liability), emphasize that Radar is essential — fraudulent charges that slip through come directly out of the platform’s balance. For marketplaces using destination charges, the platform is merchant of record and must manage risk.

Radar requirement for Managed Risk: Whenever a recommendation includes losses_collector: "stripe" (Express with Stripe-managed pricing, Express with platform-managed pricing, or full/Stripe/Stripe SaaS), explicitly recommend enabling Radar for Platforms alongside it. Managed Risk’s loss-protection model assumes Radar is active to catch transaction-level fraud; don’t present Managed Risk as replacing the need for Radar.

Public-preview disclosure

When the final recommendation is dashboard: "express" + fees_collector: "stripe" + losses_collector: "stripe" (Stripe-managed pricing, direct charges) or dashboard: "express" + fees_collector: "application" + losses_collector: "stripe" (platform-managed pricing, direct charges), include in the recommendation output:

  • A concise public-preview disclosure stating that this Express + Stripe-managed-negative-balance-liability direct-charge configuration is in public preview.

  • A statement that this configuration requires using the current Connect preview API version (not the platform’s pinned GA API version), with a link to the preview changelog so the user can confirm the exact version before implementing.

  • A note that this configuration is only available for newly onboarded connected accounts — see “Migration limitation” below.

Keep the disclosure to two or three sentences total.

Migration limitation

The Express + Stripe-managed pricing and Express + platform-managed pricing configurations can only be used for new connected accounts created going forward — existing connected accounts can’t be migrated to either configuration. If the platform already has connected accounts on another configuration (for example, existing Express accounts with platform-owned pricing and losses, or full-dashboard accounts) and wants one of these configurations, clarify that only newly onboarded accounts can use the new configuration; existing accounts keep their current configuration unless the platform pursues a separate account-migration path with Stripe. The dashboard choice (Express versus full) is a permanent, one-way decision made at account creation for each connected account and can’t be changed later, so the platform needs to confirm this before onboarding accounts under either configuration.

Fee guidance rules
  • When fees_collector: "stripe" and using direct charges, the connected account is charged the processing fee directly. The application_fee_amount is in addition to that and goes directly to the platform.

  • With destination or separate charges, the platform ALWAYS pays Stripe’s processing fees.

  • Do NOT hardcode Stripe fee amounts (rates vary by region, card type, method, and negotiated pricing).

  • Do NOT make absolute profit and loss guarantees.

  • Do NOT recommend application_fee_amount for separate charges and transfers (instead, retain fee by transferring less than charge amount).

  • Do NOT set explicit application_fee_amount when Platform Pricing Tool is used (doing so will override tool logic).

  • Always link to stripe.com/pricing.

  • For platform-owned pricing, recommend Platform Pricing Tool and margin report. Platform Pricing Tool and explicit application_fee_amount are mutually exclusive — don’t recommend both.

  • Mention Brazil or Malaysia cross-border fee-collection constraints where relevant.

  • For low flat fees on variable amounts, warn about margin compression at larger ticket sizes.

  • For very small transactions, warn about currency minimums and fee-to-proceeds effects.

Fee output requirements

These requirements apply only when the recommendation does NOT use the Platform Pricing Tool. When the Platform Pricing Tool is recommended (see “Fee guidance rules” above), skip applicationFeeIncludes and any application_fee_amount math entirely — state that pricing is configured in the Platform Pricing Tool instead, and don’t set an explicit application_fee_amount.

When NOT using the Platform Pricing Tool, every recommendation MUST explicitly:

  • Name the applicationFeeIncludes value (stripe_fee_estimate or platform_fee_only) and explain what it means for the platform’s margin

  • Show a funds flow diagram with the platform fee

  • Recommend the single most appropriate fee approach for the scenario; explain both approaches only when the platform’s margin goal or constraints are genuinely unclear (see Funds-flow comparison guidance below)

Low-margin warning template

This section applies unless the platform uses direct charges with Stripe-owned pricing (fees_collector: "stripe"). In that configuration, the connected account pays Stripe fees directly, so this concern doesn’t apply. When recommending the Platform Pricing Tool, retain the low-margin warning and margin explanation, but don’t include explicit application_fee_amount instructions because setting it overrides the tool’s pricing rules.

When platform fee appears low relative to processing fees, keep this order:

  1. Warn first: Explicitly state that the selected platform fee might be below Stripe processing fees, so the platform might lose money per transaction when it absorbs fees.

  2. Show downside before fix: include one concise illustrative example of net margin without fee passthrough (label assumptions clearly and link to stripe.com/pricing).

  3. Then provide the fix:

    • If NOT using the Platform Pricing Tool: recommend margin-preserving application_fee_amount logic (platform fee + estimated Stripe fee) and explain why it preserves margin.

    • If using the Platform Pricing Tool: recommend configuring the tool to include Stripe’s estimated processing fee so the platform’s margin is preserved, and explicitly do NOT set application_fee_amount on the PaymentIntent.

  4. Close with validation path: link to stripe.com/pricing and recommend monitoring the margin report.

Suggested warning phrasing:

Warning: Your platform fee may be below Stripe processing fees at standard rates. With this charge pattern, your platform pays Stripe processing fees on every transaction. If you absorb those fees, your net per transaction may be negative. Check stripe.com/pricing for your region and payment-method mix.

Funds-flow comparison guidance

Recommend the option that fits the user’s margin goal. Present both options only when the margin goal or constraints are genuinely unclear.

To disambiguate, ask: “Are you trying to make X% margin, or do you want your users to pay X%?” The answer determines which option to recommend.

When destination or direct flow uses application_fee_amount, choose guidance as follows:

  • Margin-preserving recommendation: application_fee_amount = platform fee + estimated Stripe processing fee (still an approximation — actual rates vary by region, card type, and payment method)

  • Platform-absorbs-fees recommendation: application_fee_amount = platform fee only

  • If unclear: present both options concisely with the tradeoff and call out what assumption decides the recommendation

Onboarding status gating details

Always include gating guidance to prevent transfers and payouts for unready accounts. stripe_balance.payouts is auto-requested when card_payments or stripe_transfers is requested, so do NOT explicitly request stripe_balance.payouts in account create/update calls.

Use:

  • configuration.merchant.capabilities.card_payments.status

  • configuration.merchant.capabilities.stripe_balance.payouts.status

  • configuration.recipient.capabilities.stripe_balance.stripe_transfers.status

  • configuration.recipient.capabilities.stripe_balance.payouts.status

Do NOT rely on v1 charges_enabled or payouts_enabled booleans for this flow.

Embedded component template notes

The embedded components section should list the components selected during Step 4b (see SKILL.md for selection logic and charge-pattern compatibility caveats). See Connect embedded components for documentation.

Requirements and compatibility

Written for: Claude Code

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.

Needs: Names Claude Code tools

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/connect-recommend · 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.

Download ZIP

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