connect-required-verification-information
Skill4 starsChanged 6 months agoMITView on GitHub
Use this skill when the user asks what information a Stripe Connect connected account must provide for verification, onboarding, KYC, or account requirements; when they need to compare requirements between connected-account setups; or when they ask which verification fields, documents, or business details are required for a particular platform country, account country, business type, dashboard, service agreement, or capability.
3 other projects use a version of this, 3 of them edited.
Adopted by
Most recently taken up by
- stripe/aiedited, first seen Oct 13, 2026
- fossasia/eventyayedited, first seen Oct 8, 2026
- NiazMorshed2007/jcredited, first seen Sep 20, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 3
- stripe/ai★ 2k99% same
- fossasia/eventyay★ 1.7k98% same
- NiazMorshed2007/jcr★ 1998% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository79 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- 21st-magicSkill
- alpacaSkill
- ask-mattSkill
- autoresearchSkill
- auto-stage-commitSkill
- browser-harnessSkill
- codebase-designSkill
- codeburnSkill
- codex-reviewSkill
- compact-memorySkill
- connect-recommendSkill
- decision-mappingSkill
- delegate-taskSkill
- design-an-interfaceSkill
- design-mdSkill
- diagnosing-bugsSkill
- domain-modelingSkill
- edit-articleSkill
- extract-designSkill
- ffmpegSkill
- find-skillsSkill
- firecrawlSkill
- generateSkill
- git-guardrails-claude-codeSkill
- grillingSkill
- grill-me-codexSkill
- grill-meSkill
- grill-with-docs-codexSkill
- grill-with-docsSkill
- gwSkill
- handoffSkill
- implementSkill
- improve-codebase-architectureSkill
- kie-aiSkill
- lightragSkill
- llmfitSkill
- loop-meSkill
- migrate-to-shoehornSkill
- notebooklmSkill
- obsidian-vaultSkill
- openspaceSkill
- playwrightSkill
- prototypeSkill
- qaSkill
- request-refactor-planSkill
- resolving-merge-conflictsSkill
- reviewSkill
- roastSkill
- scaffold-exercisesSkill
- session-handoffSkill
- setup-matt-pocock-skillsSkill
- setup-pre-commitSkill
- site-teardownSkill
- skill-discoverySkill
- skilluiSkill
- spline-3dSkill
- stripe-appsSkill
- stripe-best-practicesSkill
- stripe-directorySkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
68 rules. 23 are common, 6 are distinctive, and 39 are very specific to this project.
23
Common
Most of the 3 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
39
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Common: line 25
Every time you ask the user to provide a value for a field:
- Common: line 27
use a multiple-choice question.
- Common: line 28
if you need free user input, instruct the user to use the question’s free-response field
- Common: line 30
if the user already provided a valid answer in an earlier message, use that instead of asking again
- Common: line 36
Ask for a field *only* after all of its prerequisite fields are satisfied.
- Common: line 38
Ask for one field at a time, or one group of fields only when they are dependency-free at that point in the flow.
- Common: line 41
Follow the Interaction contract for every user question.
- Common: line 42
When the number of available options exceeds four, *always* print the full validated reference list before asking the multiple-choice …
- Very specific: line 43
When printing countries, always print the full country name followed by its code in parentheses, for example, Germany (DE).
- Common: line 45
Leave the descriptions for the country suggested options blank.
- Common: line 47
Every list of selectable options shown to the user must be pre-validated against all currently known constraints before you display it.
- Common: line 48
Never display an option as selectable if you already know it will be removed, rejected, or auto-adjusted later in the flow.
- Very specific: line 50
Ask about capabilities after platformCountry, accountCountry, and the downstream validity constraints for that setup are resolved.
- Very specific: line 52
If the businessStructure map for the chosen legalEntityType is empty or contains exactly one key nil, skip businessStructure.
- Very specific: line 53
If the user decides to change an earlier choice like platformCountry, you must invalidate and re-check all downstream fields before …
- Common: line 54
Keep the dependency chain implicit.
- Common: line 55
Use external-facing language when talking to the user.
- Common: line 101
Ask for a node *only* after all of its incoming dependencies are resolved.
- Very specific: line 102
Always ask the user for apiVersion first.
- Common: line 123
Use this algorithm whenever you build or validate the capability list:
- Very specific: line 127
if tosType=recipient, force transfers and remove all other capabilities except crypto_transfers, which may be available in rare cases
- Very specific: line 128
if apiVersion=v1 and crypto_transfers is selected, also include transfers
- Very specific: line 129
If apiVersion=v2, drop any capability not present in get-v2-supported-v1-capabilities.
- Common: line 131
If the filtered list is empty, tell the user that no capabilities are supported for the current setup and ask them to revise earlier setup …
- Very specific: line 132
When asking about capabilities, print the full filtered list first, then ask a multiple-choice question that includes the most likely …
- Common: line 133
If the user asks for a capability outside the filtered list, explain why it is unavailable for the current setup.
- Common: line 139
When the user asks what verification information they need, use this flow:
- Very specific: line 141
Ask for apiVersion. Recommend v2.
- Very specific: line 145
Ask for accountCountry from the returned country_map keys.
- Very specific: line 146
After accountCountry is validated, ask for:
- Very specific: line 150
After legalEntityType is chosen, ask for businessStructure if the validated structure map exposes it.
- Very specific: line 152
Ask for orrProgram only if the validated setup exposes one or more public programs.
- Very specific: line 154
Only after the setup is valid, call https://docs.stripe.com/_endpoint/get-requirements-for-setups with one top-level setup key …
- Common: line 159
Treat transport or build failures as retryable helper failures, and reserve unsupported-setup conclusions for successful prerequisite …
- Very specific: line 179
Ask the user which platformCountry value they want to use.
- Common: line 186
After that response returns, collect setup choices as described in the Agent flow section.
- Very specific: line 211
If the user wants apiVersion=v2, first fetch and apply the v2 capability filter to compare against the user’s requested capabilities:
- Common: line 217
Only when the user’s requested setup actually matches those available options, then call the requirements endpoint.
- Common: line 235
Use this response to present the requirements to the user as explained in the Construct the result section.
- Very specific: line 251
Use get-platform-countries to choose your initial platformCountry:
- Very specific: line 256
Use get-requirement-selections-for-platform-country to validate the setup before you call the main requirements endpoint:
- Very specific: line 269
if you change accountCountry, re-check all downstream selections
- Very specific: line 270
if you change legalEntityType, re-check businessStructure and all downstream selections
- Very specific: line 271
if you change accountCountry, tosType, or apiVersion, re-run Resolve capabilities
- Very specific: line 273
Use get-requirements-for-setups as your main source of requirement data:
- Common: line 286
Check the supplemental endpoints to see if there are any additional capability-specific restrictions to present to the user.
- Very specific: line 309
use the capitalized section name as the table heading, for example Account, Company, Representative, Directors, or Owners
- Very specific: line 317
If a field has alternatives, keep them in the same bullet and render them as a set of options, for example
field_a or field_b - Very specific: line 321
If extras is empty, leave the entry blank
- Very specific: line 338
If any limit amount or limit time is <= 0, treat that impact as immediate
- Very specific: line 339
If both a time limit and an amount limit exist for the same impact, join them with or
- Very specific: line 341
If both if not provided and if not verified text exist, render the if not provided sentence(s) first and then the if not verified …
- Very specific: line 342
If neither set of limits is present, render —
- Distinctive: line 343
If two sections share the same row-definition family, they still remain separate tables.
- Distinctive: line 354
Use the row definitions below for that section’s row-definition family.
- Very specific: line 366
If apiVersion=v2 and a requirement doesn’t expose v2_field_name, omit that field from the rendered table.
- Distinctive: line 370
if the user asks for a JSON summary of required items, return a JSON object in this exact shape.
- Very specific: line 385
Do not use ellipses (...) or placeholder strings in the output — list every field name explicitly.
- Very specific: line 387
If apiVersion=v2, inform the user that this JSON is for information only, and doesn’t match the shape of a real API response.
- Very specific: line 389
treat a field as currently_due when any unverified limit amount or time is <= 0, or any verified limit amount or time is <= 0
- Very specific: line 392
do not add a separate future_requirements bucket.
- Very specific: line 395
If apiVersion=v2, omit fields that have no v2_field_name
- Distinctive: line 400
When you return results to the user:
- Distinctive: line 403
always provide the user with a link containing the exact URL query parameters you used so they can view the requirements themselves and …
- Very specific: line 405
when comparing two setups, include account-setup-B in the page URL only if you validated and queried setup B
- Distinctive: line 406
if any requested choice had to be changed because of selector dependencies, say so explicitly before presenting the requirements
- Very specific: line 411
if you receive validation_errors, ask the user to correct the setup inputs using the Interaction contract instead of guessing
- Very specific: line 412
if you receive build_errors, retry the request.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Instructions
The human-accessible version of this documentation allows the user to select connected account fields and regions using a form, and then makes API requests to fetch and display the requirements a connected account with the selected configuration and region must provide. Follow these instructions to fetch the same information.
Interaction contract
Terminology used in this document:
field: a setup input such asplatformCountry,accountCountry, orcapabilitiesoption: a presented selectable option for a fieldvalue: the option the user selects, or the free-response value the user provides for a field
Every time you ask the user to provide a value for a field:
- use a multiple-choice question; never stop at a plain free-form prompt or wait for raw chat input
- if you need free user input, instruct the user to use the question’s free-response field
- for long option lists, explicitly say that any value from the full validated list is still accepted through the free-response field
- if the user already provided a valid answer in an earlier message, use that instead of asking again
Hard rules
You must follow these rules:
- Ask for a field only after all of its prerequisite fields are satisfied.
- Collect setup fields progressively as the flow advances.
- Ask for one field at a time, or one group of fields only when they are dependency-free at that point in the flow.
- For example, ask for
platformCountryandaccountCountryseparately: the platform country determines which account countries are valid, so asking both together can produce invalid combinations. But you may ask fordashboardType,tosType, andlegalEntityTypetogether in one group because their valid options are already known from the same response.
- For example, ask for
- If there is ever a conflict between the user’s request and the validated setup, inform the user of the conflict and ask them to revise their setup choices using the Interaction contract. Keep the validated setup aligned with what the user requested without silently dropping the conflict.
- Follow the Interaction contract for every user question.
- When the number of available options exceeds four, always print the full validated reference list before asking the multiple-choice question so the user can see the full option space.
- When printing countries, always print the full country name followed by its code in parentheses, for example,
Germany (DE). - In the multiple-choice question, include a small set of suggested options so the user can move forward with immediate clarity. The reference list above remains the authoritative full set.
- Leave the descriptions for the country suggested options blank.
- When printing countries, always print the full country name followed by its code in parentheses, for example,
- For any field with four or fewer valid options, show every valid option directly in the multiple-choice question. Do not print a separate reference list first.
- Every list of selectable options shown to the user must be pre-validated against all currently known constraints before you display it.
- Never display an option as selectable if you already know it will be removed, rejected, or auto-adjusted later in the flow.
- Present options that stay valid through the current flow.
- Ask about
capabilitiesafterplatformCountry,accountCountry, and the downstream validity constraints for that setup are resolved. - Only ask about
orrProgramwhen it is present in the publicprogramsreturned for the validated setup. - If the
businessStructuremap for the chosenlegalEntityTypeis empty or contains exactly one keynil, skipbusinessStructure. Otherwise, ask forbusinessStructureand always allow anoneoption or leave unselected as a suggested option in the multiple-choice question. - If the user decides to change an earlier choice like
platformCountry, you must invalidate and re-check all downstream fields before continuing. - Keep the dependency chain implicit. Share the information the user needs to make progress and keep the experience simple.
- Use external-facing language when talking to the user. See below to translate the internal API terminology.
Internal fields -> External language
| Internal field | External language |
apiVersion | Accounts API version |
platformCountry | Platform country |
accountCountry | Account country |
dashboardType | Dashboard type |
tosType | Service agreement |
legalEntityType | Business type |
businessStructure | Business structure |
capabilities | Capabilities |
orrProgram | Requirements update |
eu2025 | Europe |
Dependency chain
You must follow this dependency chain exactly:
flowchart TD
apiVersion["apiVersion"] --> capabilities
platformCountry --> accountCountry["accountCountry"]
accountCountry --> dashboardType["dashboardType"]
accountCountry --> tosType["tosType"]
accountCountry --> legalEntityType["legalEntityType"]
legalEntityType --> businessStructure["businessStructure (optional)"]
accountCountry --> capabilities["capabilities"]
accountCountry --> orrProgram["orrProgram (only if returned)"]
tosType --> capabilities
apiVersion --> capabilities
dashboardType --> finalRequest["final requirements request"]
apiVersion --> finalRequest
platformCountry --> finalRequest
accountCountry --> finalRequest
tosType --> finalRequest
legalEntityType --> finalRequest
businessStructure --> finalRequest
capabilities --> finalRequest
orrProgram --> finalRequestInterpret the diagram literally:
- Ask for a node only after all of its incoming dependencies are resolved.
- Always ask the user for
apiVersionfirst. Recommendv2by default.
Inputs you eventually need
By the time you make the final requirements request, you must have validated values for all of the following fields:
apiVersion:v1orv2platformCountryaccountCountrydashboardTypetosTypelegalEntityTypecapabilities: at least one capability must be selected
You also must have asked for the following optional fields, if they’re applicable:
businessStructure: ask only whenlegalEntityTypeis notindividualorrProgram: ask only when present in the publicprogramslist for that validated setup
Resolve capabilities
Use this algorithm whenever you build or validate the capability list:
- Start from
country_map[accountCountry].capabilities. - Apply
tosTyperules:- if
tosType=recipient, forcetransfersand remove all other capabilities exceptcrypto_transfers, which may be available in rare cases - if
apiVersion=v1andcrypto_transfersis selected, also includetransfers
- if
- If
apiVersion=v2, drop any capability not present inget-v2-supported-v1-capabilities. - Show the user the filtered capability list. When the user explicitly asks about a filtered-out capability, clearly explain that the asked-for capability is unavailable for the current setup.
- If the filtered list is empty, tell the user that no capabilities are supported for the current setup and ask them to revise earlier setup choices using the Interaction contract before making the final requirements request.
- When asking about
capabilities, print the full filtered list first, then ask a multiple-choice question that includes the most likely choice or choices based on prior user context. - If the user asks for a capability outside the filtered list, explain why it is unavailable for the current setup.
- Keep the user’s requested capability visible in the conversation and explain the incompatibility directly. For example, if the user asks for
paypal_payments, but also selectedv2accounts, explain thatpaypal_paymentsis unavailable forv2accounts, and offer them the choice of switching toapiVersionv1and choosingpaypal_payments, or remaining withapiVersionv2and choosing a different capability.
Agent flow
When the user asks what verification information they need, use this flow:
- Ask for
apiVersion. Recommendv2. - Fetch
https://docs.stripe.com/_endpoint/get-platform-countriesand use the public supported list to ask forplatformCountry. - Fetch
https://docs.stripe.com/_endpoint/get-v2-supported-v1-capabilitiesifapiVersion=v2. - Fetch
https://docs.stripe.com/_endpoint/get-requirement-selections-for-platform-country?platformCountry=...with the chosenplatformCountry. - Ask for
accountCountryfrom the returnedcountry_mapkeys. - After
accountCountryis validated, ask for:dashboardTypetosTypelegalEntityType
- After
legalEntityTypeis chosen, ask forbusinessStructureif the validated structure map exposes it. - Resolve and ask for
capabilitiesusing Resolve capabilities. - Ask for
orrProgramonly if the validated setup exposes one or more public programs. - If the user’s requested setup doesn’t match the valid options, tell them exactly which parts are invalid or auto-adjusted, then ask the correcting follow-up using the Interaction contract. Keep the mismatch visible, keep the setup grounded in the user’s request, and continue with a structured follow-up question.
- Only after the setup is valid, call
https://docs.stripe.com/_endpoint/get-requirements-for-setupswith one top-level setup keyaccount-setup-A[...], includingaccount-setup-A[apiVersion],account-setup-A[platformCountry],account-setup-A[accountCountry],account-setup-A[dashboardType],account-setup-A[tosType],account-setup-A[legalEntityType], optionalaccount-setup-A[businessStructure], one or moreaccount-setup-A[capabilities][i], and optionalaccount-setup-A[orrProgram]. - At the end, you must call
https://docs.stripe.com/_endpoint/get-website-requirements-for-capabilities?capabilities[i]=...andhttps://docs.stripe.com/_endpoint/get-mcc-restrictions-for-capabilities?capabilities[i]=...with the final validated capabilities to check for additional information.
If you are asked to compare two setups or are asked what is needed to update from X to Y, you must follow the validation flow for setup A with a top-level account-setup-A[...] key and then follow the flow again for setup B with a second top-level key account-setup-B[...] before calling the diffable requirements request.
Treat transport or build failures as retryable helper failures, and reserve unsupported-setup conclusions for successful prerequisite fetches and business validation results.
curl examples
In these examples, set the docs host to the public site:
DOCS_HOST="https://docs.stripe.com"Naive user: “What do I need to verify for a Stripe connected account?”
Ask for apiVersion. Recommend v2.
Fetch the public platform-country list:
curl --get "$DOCS_HOST/_endpoint/get-platform-countries"Ask the user which platformCountry value they want to use. Then, fetch the allowed options for that platform country. This request tells you what is valid next, and you must use it before choosing downstream fields. For example, if the user chose US:
curl --get "$DOCS_HOST/_endpoint/get-requirement-selections-for-platform-country" \
--data-urlencode "platformCountry=US"After that response returns, collect setup choices as described in the Agent flow section.
Smart user: “I have a CA platform, and I want to onboard a FR company connected account to use card payments”
Ask for apiVersion. Recommend v2.
# Step 1: verify the platform country is valid
curl --get "$DOCS_HOST/_endpoint/get-platform-countries"
# Step 2: fetch all public options for that platform country
curl --get "$DOCS_HOST/_endpoint/get-requirement-selections-for-platform-country" \
--data-urlencode "platformCountry=CA"From that second response, first verify that FR is a valid account country, then read:
country_map.FR.dashboard_typescountry_map.FR.tos_typescountry_map.FR.entity_type_structurescountry_map.FR.capabilitiescountry_map.FR.programs
Then, confirm the user’s requested setup actually matches those available options.
If the user wants apiVersion=v2, first fetch and apply the v2 capability filter to compare against the user’s requested capabilities:
curl --get "$DOCS_HOST/_endpoint/get-v2-supported-v1-capabilities"Only when the user’s requested setup actually matches those available options, then call the requirements endpoint.
The requirements endpoint expects nested query-string fields, not a JSON body:
curl --get "$DOCS_HOST/_endpoint/get-requirements-for-setups" \
--data-urlencode "account-setup-A[apiVersion]=v2" \
--data-urlencode "account-setup-A[platformCountry]=CA" \
--data-urlencode "account-setup-A[accountCountry]=FR" \
--data-urlencode "account-setup-A[dashboardType]=none" \
--data-urlencode "account-setup-A[tosType]=full" \
--data-urlencode "account-setup-A[legalEntityType]=company" \
--data-urlencode "account-setup-A[businessStructure]=corporation" \
--data-urlencode "account-setup-A[capabilities][0]=card_payments"Optionally, since .programs is present for this configuration, you can ask the user if they would like to choose a requirements update and add --data-urlencode "account-setup-A[orrProgram]=eu-2025" to the request.
Use this response to present the requirements to the user as explained in the Construct the result section.
Fetch the optional supplemental tables for the selected capabilities:
curl --get "$DOCS_HOST/_endpoint/get-website-requirements-for-capabilities" \
--data-urlencode "capabilities[0]=card_payments"curl --get "$DOCS_HOST/_endpoint/get-mcc-restrictions-for-capabilities" \
--data-urlencode "capabilities[0]=card_payments"Read the API responses
Use get-platform-countries to choose your initial platformCountry:
platform_countriesis the public list of availableplatformCountryoptionsdefault_countryis the page’s default starting country
Use get-requirement-selections-for-platform-country to validate the setup before you call the main requirements endpoint:
country_mapis the source of truth for which field values are valid for thatplatformCountryvalue- the keys of
country_mapare the allowedaccountCountryoptions country_map[ACCOUNT_COUNTRY].dashboard_typesconstrainsdashboardTypecountry_map[ACCOUNT_COUNTRY].tos_typesconstrainstosTypecountry_map[ACCOUNT_COUNTRY].entity_type_structuresconstrainslegalEntityTypeand optionalbusinessStructurecountry_map[ACCOUNT_COUNTRY].capabilitiesconstrains capability choicescountry_map[ACCOUNT_COUNTRY].programslists the only public ORR programs you may pass asorrProgramexternal_country_mapshould be ignored
Apply these dependency rules before making the final request:
- if you change
accountCountry, re-check all downstream selections - if you change
legalEntityType, re-checkbusinessStructureand all downstream selections - if you change
accountCountry,tosType, orapiVersion, re-run Resolve capabilities
Use get-requirements-for-setups as your main source of requirement data:
requirementscontains the successful result for each requested setup keyvalidation_errorsmeans the setup was invalid and must be corrected before you interpret the responsebuild_errorsmeans the endpoint failed unexpectedly while building the summary; you must treat this as retryable rather than as a business conclusion
Within each successful setup result:
requirements[field_name]is the requirement data for a single raw field, including enforcement limits, alternatives, display metadata, and related annotations used by the docs rendererextrascontains human-readable labels and validation guidance for that requirementrequirement_tagscontains top-level requirement tags returned alongside the requirements datarequirement_groupscontains grouped requirement data returned alongside the requirements data
Check the supplemental endpoints to see if there are any additional capability-specific restrictions to present to the user.
requirements_by_capabilityfrom the website endpoint is a separate website requirements table that explains requirements the connected account’s website must meet to support the selected capability. These should be presented to the user as a separate table.restrictions_by_capabilityfrom the MCC endpoint is a separate MCC restrictions table that explains requirements the connected account’s MCC must meet to support the selected capability. If this endpoint returns any restrictions, ask the user what kind of business they are running to determine whether their business type is prohibited or restricted from using the specific capability.- Empty maps are valid results for many standard capabilities and are not necessarily errors.
Construct the result
Transform the API response into one or more human-readable tables in your own reply to the user, followed by any additional explanatory notes. These are output tables that you construct from the response data, not references to pre-existing tables on the human docs page.
How to construct the tables:
- Split each raw field key into a section using its prefix:
company.*->companydocuments.*->documentsindividual.*->individualrepresentative.*->representativedirectors.*->directorsowners.*->ownersexecutives.*->executives- anything else ->
account
- Render one table per non-empty section. Do not merge multiple sections into one table.
- For each table:
- use the capitalized section name as the table heading, for example
Account,Company,Representative,Directors, orOwners - Include the following columns:
- Heading: blank
- Content: Row display name, for example “Name”, “Date of birth”, or “Address”
- Heading:
Requirement- Content: a bulleted list of displayed fields
- Render one bullet per displayed field
- Render each field in code format
- If a field has alternatives, keep them in the same bullet and render them as a set of options, for example
field_a` or `field_b
- Heading:
Verification- Content: a bulleted list built from
extras[].value - Render each
extras[].valueentry as one list item - If
extrasis empty, leave the entry blank
- Content: a bulleted list built from
- Heading:
Enforcement action- Content: human-readable enforcement text built from both sets of limit fields
- First use the unverified limit fields to generate the
if not providedmessage(s):capability_limit_amountcapability_limit_timepayment_limit_amountpayment_limit_timepayout_limit_amountpayout_limit_time
- Then use the verified limit fields to generate the
if not verifiedmessage(s):verified_capability_limit_amountverified_capability_limit_timeverified_payment_limit_amountverified_payment_limit_timeverified_payout_limit_amountverified_payout_limit_time
- If any limit amount or limit time is
<= 0, treat that impact as immediate - If both a time limit and an amount limit exist for the same impact, join them with
or - Group impacts with identical thresholds into a single sentence, for example
Capability, payments, and payouts will be paused immediately if not provided. - If both
if not providedandif not verifiedtext exist, render theif not providedsentence(s) first and then theif not verifiedsentence(s); prefix the firstif not verifiedsentence withAlso, - If neither set of limits is present, render
—
- Heading: blank
- use the capitalized section name as the table heading, for example
- If two sections share the same row-definition family, they still remain separate tables. For example,
representativeandownersboth use thepersonrow-definition family, but they render as separateRepresentativeandOwnerstables because they are different sections. - Assign each section to one of the row-definition families listed below in the
Row definitionsstep. The row-definition family only controls how rows are matched and labeled inside that section’s table:account->accountcompany->entitydocuments->entityindividual->personrepresentative->personowners->personexecutives->persondirectors->person
- For every non-
accountsection, strip the section prefix before matching row rules. For example, matchrepresentative.first_nameasfirst_nameandcompany.address.cityasaddress.city. - Use the row definitions below for that section’s row-definition family. Create a row only when at least one field in that section matches the row.
- Row definitions:
account: Merchant category code: /business_profile.mcc/ URL: /business_profile.(url|requirement)/ Product description: /business_profile.product_description/ Support phone: /business_profile.support_phone/ Statement descriptors: /settings.payments.statement_descriptor/
- /settings.card_payments.statement_descriptor/ Konbini support email address:
/settings.konbini_payments.support_email/Konbini support phone number:/settings.konbini_payments.support_phone/Konbini support hours:/settings.konbini_payments.support_hours/Terms of service:/^tos_acceptance\./Issuing terms of service:/settings\.card_issuing\.tos_acceptance\./Estimated worker count:/business_profile\.estimated_worker_count/Annual revenue:/business_profile\.annual_revenue/External account:/external_account/Legal guardian:/legal_guardian\./
entity: Company name: /name$/ Company name (kana): /name_kana/ Company name (kanji): /name_kanji/ Company address: /address\..*/ Company address (kana): /address_kana/ Company address (kanji): /address_kanji/ Company phone: /phone/ Company tax ID: /tax_id/ Company registration number: /registration_number/ Company ID number: /id_number/ Trade license: /company_license/ Memorandum of Association: /company_memorandum_of_association/ Proof of bank account: /bank_account_ownership_verification/ Directors provided: /directors_provided/ Owners provided: /owners_provided/ Executives provided: /executives_provided/
person: Name: /(first|last)_name/ Name (kana): /(first|last)_name_kana/ Name (kanji): /(first|last)_name_kanji/ Aliases: /full_name_aliases/ Date of birth: /dob\./ Address: /^address\./ Address (kana): /address_kana/ Address (kanji): /address_kanji/ Registered address: /registered_address/ Email: /email/ Phone: /phone/ Gender: /gender/ Political Exposure: /political_exposure/ Tax information: /ssn_last_4$/ or /id_number$/ Secondary ID number: /(id_number_secondary)/ Job title: /(relationship\.title)/ Relationship with legal entity: /relationship\.(?!title)/ Nationality: /nationality/ Passport: /passport/ Proof of liveness: /proof_of_liveness/
- For
apiVersion=v2, replace each displayed field withv2_field_nameand usev2_alternatives. - If
apiVersion=v2and a requirement doesn’t exposev2_field_name, omit that field from the rendered table. If that removes every field from a row group, omit the row. If a section becomes empty, omit that section table.
How to construct the JSON-style summary:
- if the user asks for a JSON summary of required items, return a JSON object in this exact shape. Each array holds zero or more field names:
{ "requirements": { "currently_due": [ "configuration.merchant.mcc", "company.name", "representative.first_name" ], "eventually_due": [ "business_profile.url" ] } }
Do not use ellipses (...) or placeholder strings in the output — list every field name explicitly.
- this shape is a derived summary for comparison and display. It is not a raw Accounts API response.
- If
apiVersion=v2, inform the user that this JSON is for information only, and doesn’t match the shape of a real API response. - derive each field’s due bucket from the requirement’s limit fields in the
get-requirements-for-setupsresponse:- treat a field as
currently_duewhen any unverified limit amount or time is<= 0, or any verified limit amount or time is<= 0 - otherwise treat it as
eventually_due
- treat a field as
- populate
requirements.currently_dueandrequirements.eventually_duefrom those derived buckets - do not add a separate
future_requirementsbucket. Regulatory or ORR-driven future changes are modeled throughorrProgramsetup selection and A/B setup comparison, not through a third due array - for
apiVersion=v1, use the raw requirement field names in both arrays - for
apiVersion=v2, usev2_field_namevalues in both arrays - If
apiVersion=v2, omit fields that have nov2_field_name - the JSON diff view compares requirement names only; it doesn’t diff verification text, thresholds, or supplemental metadata
How to respond to users
When you return results to the user:
- restate the exact validated setup you queried, including
apiVersion,platformCountry,accountCountry,dashboardType,tosType,legalEntityType, optionalbusinessStructure, selectedcapabilities, and optionalorrProgram - always provide the user with a link containing the exact URL query parameters you used so they can view the requirements themselves and verify your conclusions
- for example:
https://docs.stripe.com/_endpoint/get-requirements-for-setups?account-setup-A[platformCountry]=CA&account-setup-A[accountCountry]=FR&account-setup-A[dashboardType]=full&account-setup-A[tosType]=full&account-setup-A[legalEntityType]=individual&account-setup-A[capabilities][0]=card_payments&account-setup-A[orrProgram]=eu-2025->https://docs.stripe.com/connect/required-verification-information?accountSetupKeys=account-setup-A&account-setup-A%5BapiVersion%5D=v2&account-setup-A%5BplatformCountry%5D=CA&account-setup-A%5BaccountCountry%5D=FR&account-setup-A%5BdashboardType%5D=full&account-setup-A%5BtosType%5D=full&account-setup-A%5BlegalEntityType%5D=individual&account-setup-A%5BbusinessStructure%5D=undefined&account-setup-A%5Bcapabilities%5D=card_payments&account-setup-A%5BorrProgram%5D=eu-2025 - when comparing two setups, include
account-setup-Bin the page URL only if you validated and queried setup B
- for example:
- if any requested choice had to be changed because of selector dependencies, say so explicitly before presenting the requirements
- present currently due requirements separately from eventually due requirements, and label them clearly
- explain verification bullets using
extras[].valueas the source of truth - mention when a requirement was omitted because it matched none of the table row definitions in this document
- mention when website or MCC endpoints returned no supplemental data, so the user doesn’t mistake that for a fetch failure
- if you receive
validation_errors, ask the user to correct the setup inputs using the Interaction contract instead of guessing - if you receive
build_errors, retry the request; if the error persists, tell the user the helper endpoint failed unexpectedly
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

