Connect Recommend
StripeOfficialPublished by Stripe
- Skill
- Tool integration
- Business and productivity
- MIT
- No issues found
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
Download the skill as a ZIP:
https://autogineer.com/agent-skills/stripe/connect-recommend/downloadUnzip 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 plan1f. 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
destinationorseparate(platform pays Stripe fees by default)Charge pattern is
directANDfees_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
destinationordirect(withfees_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_amounton 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_amountis NOT compatible. They need to calculate the net transfer amount to preserve margin instead of usingapplication_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.
Existing Connect config: Check for
connect-recommend-plan.mdor 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.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_amountusage
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 planStep 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_amountcalculation
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, andmerchantorrecipientby 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:
Confirm fee type and fee amount
Confirm how
application_fee_amountis calculatedConfirm whether a margin warning is required
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.
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_transferdefaults to false on both refunds and disputes, so recovery isn’t automatic. Withlosses_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_collectorto"application"or switching to direct charges) Then re-run the recommendation with the corrected configuration.
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\"”).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 isdestinationorseparate, 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 withlosses_collector: "stripe"remains BLOCKED for non-direct charge patterns.
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.
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_onboardingnotification_banner(required; keeps connected accounts healthy and enabled as requirements evolve)account_management
Common additions:
Transaction history →
payments(usepayment_detailsif building a custom payments list)Disputes → included with
paymentsbut can usedisputes_listif also building a standalone disputes pagePayout operations and earnings →
payoutsReporting 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 planStep 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 planStep 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_amountmath, transfer and reversal handling, and webhook handlersIn 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.mdand build” — write the plan to a markdown file and handoff to a coding agent
Files
- ATTRIBUTION.mdAdded by AutoGineer831 B
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md23.8 KiB
- references/account-types.md18.6 KiB
- references/charge-patterns.md12.0 KiB
- references/company-researcher.md7.6 KiB
- references/compatibility-matrix.md17.5 KiB
- references/decision-matrix.md37.6 KiB
- references/discovery-questions.md19.7 KiB
- references/recommendation-template.md17.3 KiB
- references/terminology-rules.md8.9 KiB
references/discovery-questions.md
Discovery questions and decision mappings
Use this reference when running Step 3 discovery. It contains the full user interaction scripts, option mappings, and edge-case logic.
Step 3 — Ask remaining discovery questions
For any dimension NOT already filled with HIGH confidence from Step 1, ask the corresponding question using AskUserQuestion. Skip questions that were auto-filled. For MEDIUM confidence items where the user confirmed the suggestion, skip those too.
If Step 1 was skipped entirely (user chose “ask me questions instead”), ask all 6 questions one at a time as below. Each question uses AskUserQuestion with clear options.
If the user asks “what account type should I use?” (or similar), reframe during discovery before recommending settings: Accounts v2 uses explicit fields (dashboard, defaults.responsibilities, and merchant/recipient by funds flow), not the legacy type parameter.
Q1: Business model (skip if auto-filled)
Ask the user:
What best describes your business?Options:
“Marketplace (buyers + sellers, for example Etsy, Airbnb)”
“Platform with service providers (for example Uber, DoorDash)”
“SaaS enabling payments (for example Shopify, Squarespace)”
“Crowdfunding, subscription, or other model”
Q2: Who are the parties? (skip if auto-filled)
Based on Q1, ask the user:
Who are the two sides of your platform?Options (adapted to Q1 answer):
“Platform + independent sellers”
“Platform + service providers/contractors”
“Platform + creators/hosts”
“Platform + businesses (B2B)”
Q3: Payment flow (skip if auto-filled)
Ask the user:
How should money flow through your platform?Options:
“Platform collects, then pays out to sellers automatically (typical marketplace flow)”
“Buyers pay sellers directly, platform takes a fee”
“Platform processes payments on behalf of sellers”
“Platform holds funds, releases to sellers after delivery/confirmation”
Resolving ambiguous payment flow signals: Use the plain-language merchant-of-record definition from the terminology rules: ask who the customer thinks they paid (name on receipt or statement and who handles payment support issues such as refunds and disputes).
Critical disambiguation rule: Distinguish payout expectations from checkout ownership. Language like “payments associated with sellers,” “payments belong to sellers,” or “payments tied to their account” usually means sellers should receive their share. That is a payout expectation, not a direct-charge requirement, and destination charges satisfy it through automatic transfers.
When the user’s description contains conflicting signals (for example, “payments should be associated with the seller” but “my platform provides the checkout flow”), treat “platform-provided checkout, booking, or listing UI” as the stronger signal for marketplace flows and default to destination charges. The platform is acting as an intermediary in the customer checkout flow.
Choose direct charges when the behavior matches SaaS enablement: each seller runs their own payment relationship, customers pay the seller directly, seller branding appears on receipts and statements, and seller-side operations handle payment support, refunds, and disputes. Users don’t need to explicitly use merchant-of-record terminology for this to apply.
Hold-and-release detection: If the user selects “Platform holds funds, releases to sellers after delivery/confirmation” OR the business description mentions any of: delivery confirmation before payout, hold-and-release, release on completion, manual transfer trigger, multiple sellers per checkout, or shipping with delayed payout, recommend separate charges and transfers. Destination charges transfer funds automatically upon payment success and can’t hold funds. For hold-and-release, the charge is created on the platform (no transfer_data), the platform holds funds in its own balance, and after delivery or service confirmation the platform creates a transfer to the connected account.
Don’t describe destination charges as “holding funds before release” or “initiating transfers after delivery” — that language applies only to separate charges and transfers.
B2B enterprise carve-out: For B2B enterprise platforms with complex billing, multi-vendor purchase orders, or independent settlement timing, prefer separate charges and transfers over destination charges. B2B platforms often need per-vendor invoicing, partial payments, and independent settlement timing that destination charges can’t support. If the user’s needs exceed typical automated patterns (complex multi-vendor billing, purchase orders), trigger Step 3c (sales-led detection).
Q4: Dashboard and onboarding (skip if auto-filled or confirmed)
Ask the user:
What level of Stripe access should your sellers/providers have?Options:
“Lightweight Express dashboard — simple view of earnings/payouts (recommended)”
“Full Stripe dashboard — sellers manage their own Stripe account independently”
“No dashboard — fully embedded or white-labeled in my platform”
Map answers to v2 config:
“Lightweight Express” →
dashboard: "express",onboardingMethod: "embedded"“Full Stripe dashboard” →
dashboard: "full",onboardingMethod: "embedded"“No dashboard” →
dashboard: "none",onboardingMethod: "embedded"
When selecting dashboard: "none", include this warning:
WARNING: dashboard: none — Full Scope Warning:
- You must build custom onboarding and ongoing remediation logic (higher operational overhead than embedded/hosted)
- You must build refund management UI (connected accounts have no Stripe dashboard)
- You must build dispute management flows (connected accounts can't manage disputes themselves)
- You must build earnings/payout views for sellers
Consider embedded components as a middle ground for less maintenance.Dashboard access for sellers or providers:
Express dashboard: provide sellers an Express login link from
stripe.accounts.createLoginLink(accountId).Full Stripe dashboard: direct sellers to log in at dashboard.stripe.com.
No dashboard: platform uses embedded components or custom UI backed by Stripe API data.
Dashboard selection logic:
dashboard: "full"when any of these apply:Sellers or providers are established or enterprise merchants that need to access the full Stripe Dashboard directly, install Stripe apps, or manage payments, refunds, and payouts without relying on the platform’s UI
Businesses described as established or enterprise
User asks for full dashboard or direct account management
Fees and losses are both Stripe-managed AND the merchant needs these capabilities beyond what Express supports
dashboard: "express"when any of these apply:Sellers or providers are individual, self-serve, or less technical
Marketplace model with platform-owned checkout
Destination charges pattern
User wants a lightweight dashboard for sellers
Cobranding benefit is desired
SaaS with direct charges, self-serve or low-operations needs — Express is now the default (Stripe-managed pricing + Stripe-managed negative balance liability; or platform-managed pricing + Stripe-managed negative balance liability). Disclose that these direct-charge Express + Stripe-managed-negative-balance-liability configurations are in public preview.
SaaS-with-payments rule: SaaS, direct charges, and Stripe-managed responsibilities no longer automatically imply full dashboard. Default to
dashboard: "express"(Stripe-managed or platform-managed pricing, public preview) for self-serve or low-operations SaaS platforms. Usedashboard: "full"only when the merchant needs independent access, apps, or full payment operations beyond what Express provides.dashboard: "none"when white-label or fully embedded control is required.
Non-technical user language (“not tech savvy”) is a supporting signal, not a standalone override. It should reinforce a marketplace recommendation (dashboard: "express"), but it doesn’t override the full Dashboard when established merchants need to access Stripe directly, install Stripe apps, or manage payments, refunds, and payouts without relying on the platform’s UI.
When recommending, always explain why:
Express: cobranded seller dashboard with minimal maintenance.
Full: independent seller control over payments, refunds, and payouts.
None: white-labeled UX; platform owns all seller UI views (or uses embedded components).
Q4b: New versus existing connected accounts (ask whenever dashboard: "express" + losses_collector: "stripe" + direct charges is being considered)
Before finalizing a recommendation of dashboard: "express" + losses_collector: "stripe" with direct charges (Stripe-managed or platform-managed pricing), determine whether the platform is configuring newly onboarded accounts or trying to change the configuration of existing connected accounts. Ask the user:
Are these connected accounts you're onboarding for the first time, or accounts you already have on a different Stripe configuration today?Options:
“New accounts — we haven’t onboarded them to Stripe yet”
“Existing accounts — they’re already on Stripe with a different configuration”
“A mix of both”
Mapping:
New accounts only →
dashboard: "express"+losses_collector: "stripe"+ direct charges can be recommended without restriction (subject to the other compatibility checks).Existing accounts (any or all) → This configuration CANNOT be used to migrate those existing accounts. Existing connected accounts keep their current dashboard, fee, and loss-liability configuration. If the platform wants this configuration, clarify it only applies to accounts newly onboarded going forward — don’t imply that existing accounts can be switched over using a settings change or an update to their account configuration.
Mix of both → Recommend this configuration for the new-account cohort only, and explicitly call out that the existing cohort is unaffected and stays on its current configuration.
Always include this warning when recommending dashboard: "express" + losses_collector: "stripe" + direct charges:
WARNING: This configuration applies to new accounts only.
- Existing connected accounts can't be migrated to it.
- The dashboard choice (Express vs. full) is a permanent, one-way decision made at account creation for each connected account and can't be changed later.
- If you have existing accounts on a different configuration, they'll keep that configuration; only newly onboarded accounts can use this configuration.Q5: Dispute and refund responsibility (skip if auto-filled or confirmed)
Ask the user:
Who handles disputes and refunds?Options:
“Platform handles disputes and refunds”
“Sellers handle their own disputes”
“Shared responsibility”
Q5b: Risk and fraud management (conditional on Q1 answer)
There are two risk types: transactional risk (fraudulent payments and chargebacks) and merchant fraud. They can be managed independently.
Key principle: recommend Stripe-managed risk when possible. See the “Risk Management by Business Model” section in decision-matrix.md for detailed context.
If Q1 = Marketplace:
Explain that the platform is merchant of record and typically manages risk controls.
Ask:
How do you want to handle fraud protection?Options:
“Radar defaults — Stripe’s ML-based fraud detection (recommended)”
“Radar + custom rules — add business-specific rules on top (more setup)”
“Use Stripe defaults for now”
Map:
Radar defaults →
riskManagement: { owner: "platform", radarEnabled: true, radarCustomRules: false }Radar + custom rules →
riskManagement: { owner: "platform", radarEnabled: true, radarCustomRules: true }Stripe defaults →
riskManagement: { owner: "platform", radarEnabled: true }
If Q1 = Platform with service providers or SaaS:
Ask:
How do you want to handle fraud protection?Options:
“Let Stripe manage it — lower implementation overhead (recommended)”
“I’ll manage it with Radar — more control, more complexity”
“Use Stripe defaults for now”
Map:
If the resulting configuration uses
losses_collector: "stripe"(Managed Risk — SaaS with payments, including Stripe-managed or platform-managed pricing with Express dashboard, or full dashboard): Radar for Platforms is REQUIRED regardless of which option the user picks, because Managed Risk’s loss-protection pricing assumes Radar is active. UseriskManagement: { owner: "stripe", radarEnabled: true }for “Let Stripe manage it” and “Use Stripe defaults for now,” and recommend enabling Radar for Platforms explicitly in the output — don’t describe it as something to add later.Platform-managed Radar →
riskManagement: { owner: "platform", radarEnabled: true, radarCustomRules: true }If the resulting configuration uses
losses_collector: "application"(for example, “platform with service providers” using destination charges): Stripe-managed →riskManagement: { owner: "stripe", radarEnabled: false }; Stripe defaults →riskManagement: { owner: "stripe", radarEnabled: false }
If Q1 = Crowdfunding, subscription, or other:
Skip and default to
riskManagement: { owner: "stripe", radarEnabled: false }.
Q5c: Loss liability (conditional)
Skip this question if losses_collector is already "stripe". Ask only when platform ownership is relevant (destination or separate).
Read the “Loss Liability (Negative Balance Liability)” section in decision-matrix.md.
Key rule: negative balance liability (who is financially liable) is separate from risk management (who detects fraud).
Defaults:
Marketplace destination or separate: platform-owned liability and platform-owned pricing.
SaaS direct: Stripe-owned liability and Stripe-owned pricing.
Suggested explanation script:
One more decision: loss liability.
This determines who bears the financial cost if a customer disputes a charge
or fraud occurs. It's separate from fraud detection (Radar handles that).
Example: A customer disputes a $100 charge.
→ Platform-owned: Stripe debits the platform's balance $100. The platform must
reverse the prior transfer to recover funds from the connected account — which
may drive that account's balance negative.
Required for marketplaces — `losses_collector: "application"` enables connected
account balances to go negative for transfer reversals.
→ Stripe-owned: If the connected account's balance goes negative and remains
unresolved, Stripe absorbs the unrecovered amount.
Recommended for SaaS — simpler, connected account is already merchant of record.For marketplace destination or separate:
Auto-select platform-owned and explain that transfer reversals require connected account negative balance support.
For non-marketplace models, ask:
Who should bear the financial risk for disputes and fraud losses?Options:
“Stripe — simpler, less financial risk (recommended for SaaS)”
“My platform — more control, I have a risk team”
“Explain the tradeoffs”
If user asks for tradeoffs, show side-by-side pros and cons and then re-ask with first two options.
Map answers:
Marketplace, destination, or separate →
lossLiability.owner = "platform"SaaS or direct + Stripe →
lossLiability.owner = "stripe"SaaS or direct + platform →
lossLiability.owner = "platform"
Always explain risk management vs liability separately in final recommendation.
Q6: Fee structure (skip if auto-filled)
Ask the user:
How do you want to charge your platform fee?Options:
“Percentage of each transaction (for example, 8%)”
“Flat fee per transaction (for example, $2)”
“Tiered/custom pricing”
“Subscription + transaction fee”
If user chose percentage or flat fee, ask:
What's your platform fee?Options:
“5%”
“10%”
“15%”
“Other (I’ll specify)”
Q6b: application_fee_amount calculation (conditional)
Ask only when charge pattern is destination. Don’t ask about application_fee_amount for separate charges and transfers — use transfer math instead. For direct charges with Stripe-owned pricing (fees_collector: "stripe"), the connected account pays Stripe fees and this question is moot. For direct charges with platform-owned pricing (fees_collector: "application"), the platform pays Stripe fees — use the Platform Pricing Tool.
Read the “Fee Calculation & Fee Economics” section in decision-matrix.md for full context.
Key rule: with destination charges, Stripe processing fees are deducted from the platform balance. The platform can’t make connected accounts pay those fees directly.
Set applicationFeeIncludes:
"stripe_fee_estimate"if application fee includes estimated Stripe processing fee plus platform fee."platform_fee_only"if platform absorbs Stripe processing fees from margin.
Store:
"feeStructure": {
"type": "percentage",
"platformFeePercent": <value>,
"applicationFeeIncludes": "stripe_fee_estimate" | "platform_fee_only",
"description": "application_fee_amount = X% platform fee [+ estimated Stripe processing fee | only]"
}Fee language interpretation rules:
“X% inclusive of all fees” / “X% total take” → absorb Stripe fees (
platform_fee_only).“X% on top of processing fees” / “X% above Stripe fees” → include Stripe estimate (
stripe_fee_estimate).“X% platform fee” without qualifier → ask preferred option, or default to
stripe_fee_estimate.
Critical rule: if applicationFeeIncludes = "stripe_fee_estimate", application_fee_amount must include both platform fee and Stripe fee estimate.
Step 3b — Hybrid business model detection
If the business has two distinct payment flows (for example, SaaS + marketplace), don’t force one charge pattern.
Identify both sides and expected charge pattern.
Include this warning:
**Dual charge patterns add significant complexity.** Supporting both direct and destination charges means two separate payment flows, two sets of webhook handlers, and more testing scope. Consider launching with the side that's most critical to your business first, then adding the second once the first is stable.Explain shared account reality: the same connected account may participate in multiple flows.
Show fee arithmetic separately for each side.
Step 3c — Sales-led and scope detection
Trigger this check when any of these appear:
dashboard: "full"+fees_collector: "application"requeston_behalf_ofrequirementsFully custom API onboarding
OAuth or connecting existing Stripe accounts
Cross-border fund intermediation requirements
Complex B2B multi-vendor billing and settlement timing
Regulated finance, remittance, or segregation signals
Issuing, Treasury, Capital, Tax, or Terminal alongside Connect
For non-payments products (Issuing, Treasury, Capital, Tax, Terminal):
State that this guidance covers Connect payments integration only.
Point to product docs and mention possible interoperability considerations.
For enterprise or sales-assisted signals:
Ask whether they’re already working with a Stripe sales or account team.
If yes: ask whether the account team already recommended an integration pattern.
If yes with a recommendation: align to it, call out any compatibility constraints, and suggest confirming final details with that team.
If no: produce a recommendation but remind them to check with their Stripe representative before implementation.
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 or Stripe.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download connect-recommend.zip