Returns fields[], documents[], and individualRequirements[] for the given country (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each fields[].pointer names the place of the value in the POST /v2/onboarding body: /businessInfo/taxId is businessInfo: { taxId }. documents[] is a checklist of what to collect: upload each file with POST /v2/documents and send the returned id in the top-level documentIds[] of the submit body.
GET
/
onboarding
/
requirements
Discover onboarding requirements for a country
curl --request GET \ --url https://api.sandbox.conduit.financial/v2/onboarding/requirements \ --header 'x-api-key: <api-key>'
{
"type": "INVALID_OID_FORMAT",
"title": "Invalid Object ID Format",
"status": 400,
"detail": "A path or query parameter expected a valid object identifier but received a value that does not match the expected format.",
"resolution": "Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.",
"docs": "https://v2.docs.conduit.financial/errors#invalid-oid-format",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "API_KEY_MISSING",
"title": "API Key Missing",
"status": 401,
"detail": "The request did not include an API key. All API requests must be authenticated.",
"resolution": "Include your API key in the 'x-api-key' header with every request.",
"docs": "https://v2.docs.conduit.financial/errors#api-key-missing",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "ORGANIZATION_ACCESS_SUSPENDED",
"title": "Organization Access Suspended",
"status": 403,
"detail": "Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.",
"resolution": "Contact Conduit support.",
"docs": "https://v2.docs.conduit.financial/errors#organization-access-suspended",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "NOT_FOUND",
"title": "Not Found",
"status": 404,
"detail": "The requested resource does not exist or you do not have access to it.",
"resolution": "Check that the resource ID in the URL is correct. The resource may have been deleted or may belong to a different account.",
"docs": "https://v2.docs.conduit.financial/errors#not-found",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "SUBJECT_REQUIREMENTS_NOT_AVAILABLE",
"title": "Subject Requirements Not Available",
"status": 422,
"detail": "No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.",
"resolution": "This subject type is not available for your organization in this context at this time. Do not retry. Contact your Conduit account manager.",
"docs": "https://v2.docs.conduit.financial/errors#subject-requirements-not-available",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "RATE_LIMITED",
"title": "Rate Limited",
"status": 429,
"detail": "Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.",
"resolution": "Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.",
"docs": "https://v2.docs.conduit.financial/errors#rate-limited",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z",
"retryAfterSeconds": 3
}
{
"type": "INTERNAL_ERROR",
"title": "Internal Error",
"status": 500,
"detail": "An unexpected error occurred while processing your request.",
"resolution": "Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.",
"docs": "https://v2.docs.conduit.financial/errors#internal-error",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
ISO 3166-1 alpha-2 or alpha-3 country code for the customer's primary jurisdiction. For an individual subject this is the account holder's country of residence.
The application subject. business (the default when omitted) onboards an entity; individual onboards a natural person, whose data goes under ownership.persons[0] and activity.
The key of a GET /v2/onboarding/policy-subjects?axis=industry entry, submitted at companyClassification.primaryIndustry. Adds any fields, documents and person requirements tied to that industry to the returned fields[], documents[], and individualRequirements[]. Omit to get the industry-agnostic response. A high-risk industry makes enhanced due diligence apply, and the response shows that only when it has the industry. A business subject only: an individual carries no company classification, so passing it with subjectType=individual is rejected.
ISO 3166-1 alpha-2 or alpha-3 country code for the account holder's nationality. Omit it to get the response for an account holder whose nationality is unknown: the identifier fields then follow the country of residence alone. An individual subject only: a business carries no nationality, so passing it with subjectType=business is rejected.
Discovery response schema version. Bumps on any breaking discovery-response change (field renamed, removed, type changed, conditional semantics changed). Distinct from the webhook envelope's apiVersion which tracks the API major. Clients pin the literal and fail loudly on mismatch; servers do not negotiate.
Customer-level documents to collect. Rows are usually keyed by canonicalType — EXCEPT address-targeted proof-of-address, which can appear as two rows sharing canonicalType PROOF_OF_ADDRESS disambiguated by addressTarget (registered / operating); collect both, and key those rows on addressTarget, not canonicalType alone. Upload every requiredArtifacts[] entry and any one alternatives[] entry when present, otherwise upload the row itself via POST /v2/documents.
Document floor: the minimum number of documents POST /v2/onboarding accepts — currently 0 or 1. 1 means the submission must carry at least one document, counting documentIds at the top level and on each person; a submission with none anywhere is rejected with 422 ONBOARDING_NOT_READY. 0 means documents are optional at submit. Submit checks the count, not the type. The review checks each documents[] row with required: true, so send what each of them asks for with the submission: its minCount, and one row per groupId.
{
"type": "INVALID_OID_FORMAT",
"title": "Invalid Object ID Format",
"status": 400,
"detail": "A path or query parameter expected a valid object identifier but received a value that does not match the expected format.",
"resolution": "Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.",
"docs": "https://v2.docs.conduit.financial/errors#invalid-oid-format",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "API_KEY_MISSING",
"title": "API Key Missing",
"status": 401,
"detail": "The request did not include an API key. All API requests must be authenticated.",
"resolution": "Include your API key in the 'x-api-key' header with every request.",
"docs": "https://v2.docs.conduit.financial/errors#api-key-missing",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "ORGANIZATION_ACCESS_SUSPENDED",
"title": "Organization Access Suspended",
"status": 403,
"detail": "Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.",
"resolution": "Contact Conduit support.",
"docs": "https://v2.docs.conduit.financial/errors#organization-access-suspended",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "NOT_FOUND",
"title": "Not Found",
"status": 404,
"detail": "The requested resource does not exist or you do not have access to it.",
"resolution": "Check that the resource ID in the URL is correct. The resource may have been deleted or may belong to a different account.",
"docs": "https://v2.docs.conduit.financial/errors#not-found",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "SUBJECT_REQUIREMENTS_NOT_AVAILABLE",
"title": "Subject Requirements Not Available",
"status": 422,
"detail": "No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.",
"resolution": "This subject type is not available for your organization in this context at this time. Do not retry. Contact your Conduit account manager.",
"docs": "https://v2.docs.conduit.financial/errors#subject-requirements-not-available",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{
"type": "RATE_LIMITED",
"title": "Rate Limited",
"status": 429,
"detail": "Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.",
"resolution": "Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.",
"docs": "https://v2.docs.conduit.financial/errors#rate-limited",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z",
"retryAfterSeconds": 3
}
{
"type": "INTERNAL_ERROR",
"title": "Internal Error",
"status": 500,
"detail": "An unexpected error occurred while processing your request.",
"resolution": "Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.",
"docs": "https://v2.docs.conduit.financial/errors#internal-error",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Conduit API","colors":{"primary":"#0445F5"},"favicon":"https://mintcdn.com/conduit-v2/TDfL4m3KARlDDGif/favicon.svg?fit=max\u0026auto=format\u0026n=TDfL4m3KARlDDGif\u0026q=85\u0026s=26f960e7de4cc7324c4942bb0970c778","api":{"playground":{}},"navbar":{"primary":{"type":"button","label":"Talk to Sales","href":"https://meetings.hubspot.com/gianmarco-carmelino/talk-to-sales"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"variables":{"production-host":"https://api.conduit.financial","sandbox-host":"https://api.sandbox.conduit.financial"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Trust Center","href":"https://trust.conduitpay.com/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"conduit-v2","hasAudioNarration":false,"actualSubdomain":"conduit-v2","customDomains":["docs.conduit.financial"],"gitSource":{"type":"github","owner":"conduit-financial","repo":"conduit-api","deployBranch":"main","contentDirectory":"api-docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af240c680c4ca53605dbb7e","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"KYB Reference","count":204},{"language":"default","tag":"API Reference","count":138},{"language":"default","tag":"Africa","count":47},{"language":"default","tag":"Europe","count":45},{"language":"default","tag":"Latin America","count":41},{"language":"default","tag":"Sandbox","count":36},{"language":"default","tag":"Asia-Pacific","count":35},{"language":"default","tag":"Guides","count":33},{"language":"default","tag":"Asia (West, South \u0026 Central)","count":28},{"language":"default","tag":"Errors","count":22}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country","slug":"/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country","pageMetadata":{"title":"Discover onboarding requirements for a country","description":"Returns `fields[]`, `documents[]`, and `individualRequirements[]` for the given `country` (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each `fields[].pointer` names the place of the value in the `POST /v2/onboarding` body: `/businessInfo/taxId` is `businessInfo: { taxId }`. `documents[]` is a checklist of what to collect: upload each file with `POST /v2/documents` and send the returned id in the top-level `documentIds[]` of the submit body.","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /onboarding/requirements","href":"/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Returns \", _jsx(_components.code, {\n children: \"fields[]\"\n }), \", \", _jsx(_components.code, {\n children: \"documents[]\"\n }), \", and \", _jsx(_components.code, {\n children: \"individualRequirements[]\"\n }), \" for the given \", _jsx(_components.code, {\n children: \"country\"\n }), \" (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each \", _jsx(_components.code, {\n children: \"fields[].pointer\"\n }), \" names the place of the value in the \", _jsx(_components.code, {\n children: \"POST /v2/onboarding\"\n }), \" body: \", _jsx(_components.code, {\n children: \"/businessInfo/taxId\"\n }), \" is \", _jsx(_components.code, {\n children: \"businessInfo: { taxId }\"\n }), \". \", _jsx(_components.code, {\n children: \"documents[]\"\n }), \" is a checklist of what to collect: upload each file with \", _jsx(_components.code, {\n children: \"POST /v2/documents\"\n }), \" and send the returned id in the top-level \", _jsx(_components.code, {\n children: \"documentIds[]\"\n }), \" of the submit body.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Discover onboarding requirements for a country","description":"Returns `fields[]`, `documents[]`, and `individualRequirements[]` for the given `country` (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each `fields[].pointer` names the place of the value in the `POST /v2/onboarding` body: `/businessInfo/taxId` is `businessInfo: { taxId }`. `documents[]` is a checklist of what to collect: upload each file with `POST /v2/documents` and send the returned id in the top-level `documentIds[]` of the submit body.","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /onboarding/requirements","href":"/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/conduit-v2/fc10fecbb08a67cd/changelog-feed.js"],"openApiReferenceData":{"operation":{"description":"Returns `fields[]`, `documents[]`, and `individualRequirements[]` for the given `country` (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each `fields[].pointer` names the place of the value in the `POST /v2/onboarding` body: `/businessInfo/taxId` is `businessInfo: { taxId }`. `documents[]` is a checklist of what to collect: upload each file with `POST /v2/documents` and send the returned id in the top-level `documentIds[]` of the submit body.","operationId":"OnboardingController_resolveDiscovery_v2","parameters":["ab5cfda1-2bb5-474d-910a-ab8a5e7816ce","e5ea3069-0c2e-4834-b398-9a6210fa0f43","d134e5e3-b83a-4dd4-8d86-307f9b46b7c4","f3ce5ffa-53a2-46f3-87e8-762bc66b24df"],"responses":{"200":"83077161-36a2-40aa-bf3c-0548115fb7a0","400":"38bccefa-3477-4d13-9fac-ad27257701c4","401":"6daea06f-0362-426a-8b0f-e78d080bbcea","403":"061cad62-2f19-4ee0-b868-e532cef9148c","404":"d439b5c5-f0b8-4925-9ede-29737f6ca522","422":"b5daef80-6734-4f0b-a3e7-2ebfa3e0e33c","429":"fdc6b467-8e03-4ad9-b15e-402df18c6fd5","500":"c1634a00-7c75-4f97-ba13-8180d7a1f4fa"},"summary":"Discover onboarding requirements for a country","tags":["Customer Onboarding"],"method":"get","type":"path","servers":["5707e0ee-a73c-4f7a-b3dd-5e91e6ddef88","107fb7ae-4503-4921-bfe7-67fa54c45455"],"security":["e216d117-afec-4a29-92f2-646b533f2725"],"path":"/onboarding/requirements","baseUrlOptions":["https://api.sandbox.conduit.financial/v2","https://api.conduit.financial/v2"],"title":"Discover onboarding requirements for a country","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ab5cfda1-2bb5-474d-910a-ab8a5e7816ce":{"name":"country","required":true,"in":"query","description":"ISO 3166-1 alpha-2 or alpha-3 country code for the customer's primary jurisdiction. For an individual subject this is the account holder's country of residence.","schema":{"type":"string","isRequired":true,"description":"ISO 3166-1 alpha-2 or alpha-3 country code for the customer's primary jurisdiction. For an individual subject this is the account holder's country of residence.","uniqueKey":"","typeLabel":"string"}},"e5ea3069-0c2e-4834-b398-9a6210fa0f43":{"name":"subjectType","required":false,"in":"query","description":"The application subject. `business` (the default when omitted) onboards an entity; `individual` onboards a natural person, whose data goes under `ownership.persons[0]` and `activity`.","schema":{"type":"string","enum":["business","individual"],"isRequired":false,"description":"The application subject. `business` (the default when omitted) onboards an entity; `individual` onboards a natural person, whose data goes under `ownership.persons[0]` and `activity`.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"d134e5e3-b83a-4dd4-8d86-307f9b46b7c4":{"name":"industry","required":false,"in":"query","description":"The `key` of a `GET /v2/onboarding/policy-subjects?axis=industry` entry, submitted at `companyClassification.primaryIndustry`. Adds any fields, documents and person requirements tied to that industry to the returned `fields[]`, `documents[]`, and `individualRequirements[]`. Omit to get the industry-agnostic response. A high-risk industry makes enhanced due diligence apply, and the response shows that only when it has the industry. A business subject only: an individual carries no company classification, so passing it with `subjectType=individual` is rejected.","schema":{"type":"string","isRequired":false,"description":"The `key` of a `GET /v2/onboarding/policy-subjects?axis=industry` entry, submitted at `companyClassification.primaryIndustry`. Adds any fields, documents and person requirements tied to that industry to the returned `fields[]`, `documents[]`, and `individualRequirements[]`. Omit to get the industry-agnostic response. A high-risk industry makes enhanced due diligence apply, and the response shows that only when it has the industry. A business subject only: an individual carries no company classification, so passing it with `subjectType=individual` is rejected.","uniqueKey":"","typeLabel":"string"}},"f3ce5ffa-53a2-46f3-87e8-762bc66b24df":{"name":"nationality","required":false,"in":"query","description":"ISO 3166-1 alpha-2 or alpha-3 country code for the account holder's nationality. Omit it to get the response for an account holder whose nationality is unknown: the identifier fields then follow the country of residence alone. An individual subject only: a business carries no nationality, so passing it with `subjectType=business` is rejected.","schema":{"type":"string","isRequired":false,"description":"ISO 3166-1 alpha-2 or alpha-3 country code for the account holder's nationality. Omit it to get the response for an account holder whose nationality is unknown: the identifier fields then follow the country of residence alone. An individual subject only: a business carries no nationality, so passing it with `subjectType=business` is rejected.","uniqueKey":"","typeLabel":"string"}}},"responses":{"83077161-36a2-40aa-bf3c-0548115fb7a0":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"schemaVersion":{"type":"string","description":"Discovery response schema version. Bumps on any breaking discovery-response change (field renamed, removed, type changed, conditional semantics changed). Distinct from the webhook envelope's `apiVersion` which tracks the API major. Clients pin the literal and fail loudly on mismatch; servers do not negotiate.","enum":["3"],"isRequired":true,"uniqueKey":"schemaVersion","typeLabel":"enum\u003cstring>"},"context":{"type":"string","enum":["onboarding","feature","order"],"description":"The discovery context that produced this requirements set.","example":"onboarding","isRequired":true,"uniqueKey":"context","typeLabel":"enum\u003cstring>"},"country":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 3166-1 alpha-3 country code the requirements were resolved for. Always three uppercase letters.","example":"USA","isRequired":true,"uniqueKey":"country","typeLabel":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the field in the submission payload. Always starts with /. Array indices appear as integers.","example":"/businessInfo/taxId","isRequired":true,"uniqueKey":"fields.items.[INDEX].pointer","typeLabel":"string"},"label":{"type":"string","description":"Human-readable label for display","example":"Tax Identification Number","isRequired":true,"uniqueKey":"fields.items.[INDEX].label","typeLabel":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","date","datetime","email","url","phone","country","enum","stringArray","enumArray"],"description":"Data type of the field","example":"string","isRequired":true,"uniqueKey":"fields.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"required":{"type":"boolean","description":"Whether the field is required at submit","isRequired":true,"uniqueKey":"fields.items.[INDEX].required","typeLabel":"boolean"},"helpText":{"description":"One-line guidance for the field, intended to render as a tooltip / info pill next to the label. Plain text, no markup. For `businessInfo.taxId` and `businessInfo.businessEntityId` this is the country-specific identifier description from `countries.json` (with the issuing authority prefixed when known, e.g. 'Issued by HMRC.'). For other fields it is universal copy from the server-side field registry. Silently absent when neither source has guidance on file. See api-conventions §5.1.5.","example":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","type":"string","uniqueKey":"fields.items.[INDEX].helpText","typeLabel":"string"},"group":{"description":"Section grouping code for renderers. Stable camelCase token drawn from a closed set per discovery context (onboarding today: `businessInfo`, `companyClassification`, `registeredAddress`, `operatingAddress`, `businessActivity`, `activity`, `regulatoryHistory`, `certification`, `customAnswers`; `activity` carries an individual subject's own activity envelope, where `businessActivity` carries a business subject's; `customAnswers` carries operator-authored questions). Omitted on top-level scalars without a section and on fields nested inside `individualRequirements[].fields[]` (already a logical group). Presentation metadata; submit ignores it.","type":"string","uniqueKey":"fields.items.[INDEX].group","typeLabel":"string"},"mustEqual":{"oneOf":[{"type":"boolean","description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","uniqueKey":"fields.items.[INDEX].mustEqual.oneOf.0","typeLabel":"boolean"},{"type":"string","description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","uniqueKey":"fields.items.[INDEX].mustEqual.oneOf.1","typeLabel":"string"},{"type":"number","description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","uniqueKey":"fields.items.[INDEX].mustEqual.oneOf.2","typeLabel":"number"}],"uniqueKey":"fields.items.[INDEX].mustEqual","typeLabel":"boolean | string | number"},"constraints":{"description":"Per-value limits on this field alone, enforceable client-side. Satisfying them does not by itself clear submit: a value must also satisfy the field's `allowedValues`, its `mustEqual`, and every `conditionalOverride` whose conditions hold. Some `pattern` values state only a canonical spelling, and submit can accept equivalent spellings such a pattern does not list.","type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string","uniqueKey":"fields.items.[INDEX].constraints.pattern","typeLabel":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string","uniqueKey":"fields.items.[INDEX].constraints.example","typeLabel":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"],"uniqueKey":"fields.items.[INDEX].constraints.format","typeLabel":"enum\u003cstring>"},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"fields.items.[INDEX].constraints.minLength","typeLabel":"integer"},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"fields.items.[INDEX].constraints.maxLength","typeLabel":"integer"},"min":{"description":"Minimum numeric value","type":"number","uniqueKey":"fields.items.[INDEX].constraints.min","typeLabel":"number"},"max":{"description":"Maximum numeric value","type":"number","uniqueKey":"fields.items.[INDEX].constraints.max","typeLabel":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string","uniqueKey":"fields.items.[INDEX].constraints.minDate","typeLabel":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string","uniqueKey":"fields.items.[INDEX].constraints.maxDate","typeLabel":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"],"uniqueKey":"fields.items.[INDEX].constraints.maxDateTime","typeLabel":"enum\u003cstring>"},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"fields.items.[INDEX].constraints.minAgeYears","typeLabel":"integer"},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"fields.items.[INDEX].constraints.maxAgeYears","typeLabel":"integer"},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"],"uniqueKey":"fields.items.[INDEX].constraints.checksum","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"fields.items.[INDEX].constraints","typeLabel":"object"},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string","uniqueKey":"fields.items.[INDEX].requiredOneOf","typeLabel":"string"},"conditions":{"description":"Conditional applicability rules. The field applies (is shown / required) only when every condition evaluates true against the current submission. Empty / absent means unconditional.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure","isRequired":true,"uniqueKey":"fields.items.[INDEX].conditions.items.[INDEX].pointer","typeLabel":"string"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq","isRequired":true,"uniqueKey":"fields.items.[INDEX].conditions.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string","uniqueKey":"fields.items.[INDEX].conditions.items.[INDEX].value","typeLabel":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string","uniqueKey":"fields.items.[INDEX].conditions.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"uniqueKey":"fields.items.[INDEX].conditions.items.[INDEX].values","typeLabel":"string[]"},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"],"uniqueKey":"fields.items.[INDEX].conditions.items.[INDEX].scope","typeLabel":"enum\u003cstring>"}},"required":["pointer","operator"],"additionalProperties":false,"uniqueKey":"fields.items.[INDEX].conditions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"fields.items.[INDEX].conditions","typeLabel":"object[]"},"allowedValues":{"description":"Allowed values for enum / enumArray fields. The submitted value MUST be one of these.","example":["LLC","CORPORATION","PARTNERSHIP"],"type":"array","items":{"type":"string","uniqueKey":"fields.items.[INDEX].allowedValues.items.[INDEX]","typeLabel":"string"},"uniqueKey":"fields.items.[INDEX].allowedValues","typeLabel":"string[]"},"options":{"description":"Structured per-option metadata for enum fields with display / grouping hints (label, abbr, description, category). `value` mirrors an entry in `allowedValues`. Present when the projector has localized data to surface (e.g. country-specific legal structures); enum fields without rich metadata use `allowedValues` alone.","type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Submitted value. Must be one of the entries in the sibling `allowedValues` array.","example":"Sociedad Anónima","isRequired":true,"uniqueKey":"fields.items.[INDEX].options.items.[INDEX].value","typeLabel":"string"},"label":{"type":"string","description":"Human-readable label for display","example":"Sociedad Anónima","isRequired":true,"uniqueKey":"fields.items.[INDEX].options.items.[INDEX].label","typeLabel":"string"},"abbr":{"oneOf":[{"type":"string","description":"Short-form / acronym for the option","example":"S.A.","uniqueKey":"fields.items.[INDEX].options.items.[INDEX].abbr.oneOf.0","typeLabel":"string"},{"type":"null","description":"Short-form / acronym for the option","example":"S.A.","uniqueKey":"fields.items.[INDEX].options.items.[INDEX].abbr.oneOf.1","typeLabel":"null"}],"uniqueKey":"fields.items.[INDEX].options.items.[INDEX].abbr","typeLabel":"string | null"},"description":{"description":"Long-form description of the option","type":"string","uniqueKey":"fields.items.[INDEX].options.items.[INDEX].description","typeLabel":"string"},"category":{"type":"string","enum":["Corp","LLC","Sole Proprietorship","Partnership","Other","regulatory_review"],"description":"Out-of-band metadata for an option that affects how it should be rendered or handled. Values: the legal-structure canonical bucket (`Corp` / `LLC` / `Sole Proprietorship` / `Partnership` / `Other`) — used to map the localised `value` to a standardised type; and `regulatory_review` — indicates this option is subject to additional regulatory review and may warrant a pre-submission warning to the user. Silently absent on options that carry no such metadata.","uniqueKey":"fields.items.[INDEX].options.items.[INDEX].category","typeLabel":"enum\u003cstring>"}},"required":["value","label"],"additionalProperties":false,"uniqueKey":"fields.items.[INDEX].options.items.[INDEX]","typeLabel":"object"},"uniqueKey":"fields.items.[INDEX].options","typeLabel":"object[]"},"conditionalOverrides":{"description":"Extra constraints that apply only while their own conditions hold. Each element carries a `conditions` array read exactly like the field's own `conditions` — every condition must hold, and `scope: 'person'` resolves the pointer against the current `ownership.persons[i]` row — plus the `constraints` submit adds for that case. Three cases ship. An address states what submit keys on that address's own country: a person's `/address/state` carries the US subdivision pattern and `/address/postalCode` the US ZIP pattern while that same person's `/address/country` is `USA` (`scope: 'person'`), and the business's `/operatingAddress/state` and `/operatingAddress/postalCode` carry the same two while `/operatingAddress/country` is `USA`, read at the root of the body because the condition names no scope. A person's `/taxIdNumber` carries the US Social Security Number pattern while that same person's `/taxIdType` is `SSN`. When two or more requirement rules declare one field and a rule's check depends on a condition discovery cannot settle (most often a `scope: 'person'` condition), that rule's check is an element too: its `constraints` and, for an enum field, its `allowedValues`. Some overrides' `pattern` states only the canonical value to send, not the full set submit accepts: the US subdivision pattern states the two-letter code with or without the `US-` prefix, while submit also accepts the full state name and other spellings. Apply every element whose conditions hold ON TOP OF the field's own `constraints`, never in place of them: the value must match the field-level `pattern` and every override `pattern` that applies, and a bound named twice tightens to the stricter value. The property is additive and a client may ignore it, in which case the field reads exactly as it did before the property existed and submit can still reject a value the override would have named. Silently absent when the field carries no conditional case.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure","isRequired":true,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].pointer","typeLabel":"string"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq","isRequired":true,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string","uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].value","typeLabel":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string","uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].values","typeLabel":"string[]"},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"],"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].scope","typeLabel":"enum\u003cstring>"}},"required":["pointer","operator"],"additionalProperties":false,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX]","typeLabel":"object"},"description":"Conditions that must ALL hold for this override to apply. Same shape and evaluation as `conditions` on the field itself, `scope` included.","isRequired":true,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions","typeLabel":"object[]"},"constraints":{"type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string","uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.pattern","typeLabel":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string","uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.example","typeLabel":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"],"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.format","typeLabel":"enum\u003cstring>"},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.minLength","typeLabel":"integer"},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxLength","typeLabel":"integer"},"min":{"description":"Minimum numeric value","type":"number","uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.min","typeLabel":"number"},"max":{"description":"Maximum numeric value","type":"number","uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.max","typeLabel":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string","uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.minDate","typeLabel":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string","uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxDate","typeLabel":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"],"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxDateTime","typeLabel":"enum\u003cstring>"},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.minAgeYears","typeLabel":"integer"},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxAgeYears","typeLabel":"integer"},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"],"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.checksum","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"description":"Constraints submit adds while the conditions hold. They narrow the field, never widen it, and they do not replace the field's own `constraints`: `pattern` is a SECOND regex that states the canonical form for this case, applied as well as the field-level `pattern`, and a bound named on both takes whichever value is stricter. As at field level, submit can be more lenient than some of these patterns state. `example` is a value valid under this override. Empty when the override narrows only `allowedValues`.","isRequired":true,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints","typeLabel":"object"},"allowedValues":{"description":"Allowed values for an enum / enumArray field while the conditions hold: a subset of the field's own `allowedValues`. Submit refuses a value outside it in that case. Omitted when the override does not narrow the values.","example":["SSN"],"type":"array","items":{"type":"string","uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].allowedValues.items.[INDEX]","typeLabel":"string"},"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX].allowedValues","typeLabel":"string[]"}},"required":["conditions","constraints"],"additionalProperties":false,"uniqueKey":"fields.items.[INDEX].conditionalOverrides.items.[INDEX]","typeLabel":"object"},"uniqueKey":"fields.items.[INDEX].conditionalOverrides","typeLabel":"object[]"}},"required":["pointer","label","type","required"],"uniqueKey":"fields.items.[INDEX]","typeLabel":"object"},"description":"Scalar fields the integrator must collect, with format hints and allowedValues for enum fields.","isRequired":true,"uniqueKey":"fields","typeLabel":"object[]"},"documents":{"type":"array","items":{"type":"object","properties":{"canonicalType":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","SELFIE"],"description":"Canonical category label for this document slot. Collect a document matching the title or category and upload it with `POST /v2/documents`. Setting that upload's optional `type` to this value records the file against this slot; Conduit still identifies the document itself, and that determination is what applies.","isRequired":true,"uniqueKey":"documents.items.[INDEX].canonicalType","typeLabel":"enum\u003cstring>"},"title":{"type":"string","description":"Human-readable name for UI display: the artifact when the row has one, otherwise the document type. The artifacts are in `alternatives`, `requiredArtifacts` and `optionalArtifacts`.","example":"Articles of Incorporation","isRequired":true,"uniqueKey":"documents.items.[INDEX].title","typeLabel":"string"},"required":{"type":"boolean","description":"True when the review needs a document for this row. Submit does not check document types, so an application without a required document is accepted and stays in `processing` until the document arrives. A row with `conditions` is required only when every condition holds on your submission. Rows that share a `groupId` are one requirement: a document for any one of them satisfies it. False on a recommended row.","isRequired":true,"uniqueKey":"documents.items.[INDEX].required","typeLabel":"boolean"},"from":{"description":"Issuing authority, when known and different from the title","type":"string","uniqueKey":"documents.items.[INDEX].from","typeLabel":"string"},"alternatives":{"description":"Acceptable alternative artifacts. Collect ANY ONE of these to satisfy the requirement.","type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Certificate of Incorporation","isRequired":true,"uniqueKey":"documents.items.[INDEX].alternatives.items.[INDEX].title","typeLabel":"string"},"from":{"description":"Issuing authority, when known and different from the title","type":"string","uniqueKey":"documents.items.[INDEX].alternatives.items.[INDEX].from","typeLabel":"string"}},"required":["title"],"additionalProperties":false,"uniqueKey":"documents.items.[INDEX].alternatives.items.[INDEX]","typeLabel":"object"},"uniqueKey":"documents.items.[INDEX].alternatives","typeLabel":"object[]"},"requiredArtifacts":{"description":"Present only when the slot mixes required artifacts with alternative or optional artifacts. Single required-only slots are flattened to the row itself.","type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Certificate of Incorporation","isRequired":true,"uniqueKey":"documents.items.[INDEX].requiredArtifacts.items.[INDEX].title","typeLabel":"string"},"from":{"description":"Issuing authority, when known and different from the title","type":"string","uniqueKey":"documents.items.[INDEX].requiredArtifacts.items.[INDEX].from","typeLabel":"string"}},"required":["title"],"additionalProperties":false,"uniqueKey":"documents.items.[INDEX].requiredArtifacts.items.[INDEX]","typeLabel":"object"},"uniqueKey":"documents.items.[INDEX].requiredArtifacts","typeLabel":"object[]"},"optionalArtifacts":{"description":"Recommended artifacts for this canonical document slot. These are not required for submission.","type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Certificate of Incorporation","isRequired":true,"uniqueKey":"documents.items.[INDEX].optionalArtifacts.items.[INDEX].title","typeLabel":"string"},"from":{"description":"Issuing authority, when known and different from the title","type":"string","uniqueKey":"documents.items.[INDEX].optionalArtifacts.items.[INDEX].from","typeLabel":"string"}},"required":["title"],"additionalProperties":false,"uniqueKey":"documents.items.[INDEX].optionalArtifacts.items.[INDEX]","typeLabel":"object"},"uniqueKey":"documents.items.[INDEX].optionalArtifacts","typeLabel":"object[]"},"optional":{"description":"True when collection is recommended but not required. Always the opposite of `required`.","type":"boolean","uniqueKey":"documents.items.[INDEX].optional","typeLabel":"boolean"},"minCount":{"description":"Number of files of this canonical type the integrator must upload. Absent / 1 means a single file satisfies the slot; values greater than 1 require N distinct uploads (e.g. 3 consecutive bank statements). The review enforces the same floor; submit does not.","type":"integer","minimum":1,"maximum":9007199254740991,"uniqueKey":"documents.items.[INDEX].minCount","typeLabel":"integer"},"groupId":{"description":"When present, this document row is one branch of an `any-of` alternation. Every row sharing the same `groupId` forms a single decision point: satisfying ANY branch's own minCount satisfies the group. The integrator should render grouped rows together (e.g. a single slab with each branch as a sub-option). The `group:` prefix namespaces the id away from canonical type names (which are SCREAMING_SNAKE_CASE and never contain `:` or `+`).","example":"group:any-of:AUDITED_FINANCIAL_STATEMENT+BANK_STATEMENT","type":"string","uniqueKey":"documents.items.[INDEX].groupId","typeLabel":"string"},"policyFallback":{"description":"True when this row exists because the requirement rule asks for the canonicalType but the country has no jurisdiction-specific document. Conduit substitutes a generic, company-producible alternative (e.g. an internal share register, board resolution, utility bill). The customer is still expected to provide evidence; see `guidance` for what to collect.","type":"boolean","uniqueKey":"documents.items.[INDEX].policyFallback","typeLabel":"boolean"},"guidance":{"description":"One-line collection guidance shown to the integrator's end customer: what evidence to collect for this slot. Present on `policyFallback: true` rows (what to supply absent a jurisdiction-specific document) and on address-targeted proof-of-address rows (which address the document must show — registered vs operating).","type":"string","uniqueKey":"documents.items.[INDEX].guidance","typeLabel":"string"},"addressTarget":{"description":"Which submitted address this proof-of-address row must be shown to prove. Present ONLY on `PROOF_OF_ADDRESS` rows that are address-targeted: the requirement can surface as two rows sharing `canonicalType: \"PROOF_OF_ADDRESS\"`, disambiguated by this field (`registered` always; `operating` when the operating address differs). Both must be collected. Machine-readable key for these rows — do NOT dedupe address-targeted rows by `canonicalType`.","type":"string","enum":["registered","operating"],"uniqueKey":"documents.items.[INDEX].addressTarget","typeLabel":"enum\u003cstring>"},"conditions":{"description":"Present when the document is owed only conditionally. The document is owed only when every condition holds on your submission; evaluate them like a field's `conditions`.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure","isRequired":true,"uniqueKey":"documents.items.[INDEX].conditions.items.[INDEX].pointer","typeLabel":"string"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq","isRequired":true,"uniqueKey":"documents.items.[INDEX].conditions.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string","uniqueKey":"documents.items.[INDEX].conditions.items.[INDEX].value","typeLabel":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string","uniqueKey":"documents.items.[INDEX].conditions.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"uniqueKey":"documents.items.[INDEX].conditions.items.[INDEX].values","typeLabel":"string[]"},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"],"uniqueKey":"documents.items.[INDEX].conditions.items.[INDEX].scope","typeLabel":"enum\u003cstring>"}},"required":["pointer","operator"],"additionalProperties":false,"uniqueKey":"documents.items.[INDEX].conditions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"documents.items.[INDEX].conditions","typeLabel":"object[]"}},"required":["canonicalType","title","required"],"additionalProperties":false,"uniqueKey":"documents.items.[INDEX]","typeLabel":"object"},"description":"Customer-level documents to collect. Rows are usually keyed by canonicalType — EXCEPT address-targeted proof-of-address, which can appear as two rows sharing canonicalType `PROOF_OF_ADDRESS` disambiguated by `addressTarget` (registered / operating); collect both, and key those rows on `addressTarget`, not canonicalType alone. Upload every requiredArtifacts[] entry and any one alternatives[] entry when present, otherwise upload the row itself via POST /v2/documents.","isRequired":true,"uniqueKey":"documents","typeLabel":"object[]"},"minDocuments":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Document floor: the minimum number of documents POST /v2/onboarding accepts — currently 0 or 1. `1` means the submission must carry at least one document, counting `documentIds` at the top level and on each person; a submission with none anywhere is rejected with 422 ONBOARDING_NOT_READY. `0` means documents are optional at submit. Submit checks the count, not the type. The review checks each `documents[]` row with `required: true`, so send what each of them asks for with the submission: its `minCount`, and one row per `groupId`.","example":1,"isRequired":true,"uniqueKey":"minDocuments","typeLabel":"integer"},"individualRequirements":{"type":"array","items":{"oneOf":[{"type":"object","required":["role","minCount","fields","documents"],"properties":{"role":{"type":"string","description":"Role discriminant. BENEFICIAL_OWNER is the only role that carries `ownershipThreshold`.","enum":["BENEFICIAL_OWNER"],"isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.role","typeLabel":"enum\u003cstring>"},"minCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Minimum number of persons that must fill this role. BENEFICIAL_OWNER may be 0 when the rule only conditionally requires beneficial-owner disclosure (e.g. only when actual ownership crosses `ownershipThreshold`).","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.minCount","typeLabel":"integer"},"fields":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the field in the submission payload. Always starts with /. Array indices appear as integers.","example":"/businessInfo/taxId","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].pointer","typeLabel":"string"},"label":{"type":"string","description":"Human-readable label for display","example":"Tax Identification Number","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].label","typeLabel":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","date","datetime","email","url","phone","country","enum","stringArray","enumArray"],"description":"Data type of the field","example":"string","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"required":{"type":"boolean","description":"Whether the field is required at submit","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].required","typeLabel":"boolean"},"helpText":{"description":"One-line guidance for the field, intended to render as a tooltip / info pill next to the label. Plain text, no markup. For `businessInfo.taxId` and `businessInfo.businessEntityId` this is the country-specific identifier description from `countries.json` (with the issuing authority prefixed when known, e.g. 'Issued by HMRC.'). For other fields it is universal copy from the server-side field registry. Silently absent when neither source has guidance on file. See api-conventions §5.1.5.","example":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].helpText","typeLabel":"string"},"group":{"description":"Section grouping code for renderers. Stable camelCase token drawn from a closed set per discovery context (onboarding today: `businessInfo`, `companyClassification`, `registeredAddress`, `operatingAddress`, `businessActivity`, `activity`, `regulatoryHistory`, `certification`, `customAnswers`; `activity` carries an individual subject's own activity envelope, where `businessActivity` carries a business subject's; `customAnswers` carries operator-authored questions). Omitted on top-level scalars without a section and on fields nested inside `individualRequirements[].fields[]` (already a logical group). Presentation metadata; submit ignores it.","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].group","typeLabel":"string"},"mustEqual":{"oneOf":[{"type":"boolean","description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].mustEqual.oneOf.0","typeLabel":"boolean"},{"type":"string","description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].mustEqual.oneOf.1","typeLabel":"string"},{"type":"number","description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].mustEqual.oneOf.2","typeLabel":"number"}],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].mustEqual","typeLabel":"boolean | string | number"},"constraints":{"description":"Per-value limits on this field alone, enforceable client-side. Satisfying them does not by itself clear submit: a value must also satisfy the field's `allowedValues`, its `mustEqual`, and every `conditionalOverride` whose conditions hold. Some `pattern` values state only a canonical spelling, and submit can accept equivalent spellings such a pattern does not list.","type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.pattern","typeLabel":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.example","typeLabel":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.format","typeLabel":"enum\u003cstring>"},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.minLength","typeLabel":"integer"},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.maxLength","typeLabel":"integer"},"min":{"description":"Minimum numeric value","type":"number","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.min","typeLabel":"number"},"max":{"description":"Maximum numeric value","type":"number","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.max","typeLabel":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.minDate","typeLabel":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.maxDate","typeLabel":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.maxDateTime","typeLabel":"enum\u003cstring>"},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.minAgeYears","typeLabel":"integer"},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.maxAgeYears","typeLabel":"integer"},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints.checksum","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].constraints","typeLabel":"object"},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].requiredOneOf","typeLabel":"string"},"conditions":{"description":"Conditional applicability rules. The field applies (is shown / required) only when every condition evaluates true against the current submission. Empty / absent means unconditional.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditions.items.[INDEX].pointer","typeLabel":"string"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditions.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditions.items.[INDEX].value","typeLabel":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditions.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditions.items.[INDEX].values","typeLabel":"string[]"},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditions.items.[INDEX].scope","typeLabel":"enum\u003cstring>"}},"required":["pointer","operator"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditions","typeLabel":"object[]"},"allowedValues":{"description":"Allowed values for enum / enumArray fields. The submitted value MUST be one of these.","example":["LLC","CORPORATION","PARTNERSHIP"],"type":"array","items":{"type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].allowedValues.items.[INDEX]","typeLabel":"string"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].allowedValues","typeLabel":"string[]"},"options":{"description":"Structured per-option metadata for enum fields with display / grouping hints (label, abbr, description, category). `value` mirrors an entry in `allowedValues`. Present when the projector has localized data to surface (e.g. country-specific legal structures); enum fields without rich metadata use `allowedValues` alone.","type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Submitted value. Must be one of the entries in the sibling `allowedValues` array.","example":"Sociedad Anónima","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].options.items.[INDEX].value","typeLabel":"string"},"label":{"type":"string","description":"Human-readable label for display","example":"Sociedad Anónima","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].options.items.[INDEX].label","typeLabel":"string"},"abbr":{"oneOf":[{"type":"string","description":"Short-form / acronym for the option","example":"S.A.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].options.items.[INDEX].abbr.oneOf.0","typeLabel":"string"},{"type":"null","description":"Short-form / acronym for the option","example":"S.A.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].options.items.[INDEX].abbr.oneOf.1","typeLabel":"null"}],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].options.items.[INDEX].abbr","typeLabel":"string | null"},"description":{"description":"Long-form description of the option","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].options.items.[INDEX].description","typeLabel":"string"},"category":{"type":"string","enum":["Corp","LLC","Sole Proprietorship","Partnership","Other","regulatory_review"],"description":"Out-of-band metadata for an option that affects how it should be rendered or handled. Values: the legal-structure canonical bucket (`Corp` / `LLC` / `Sole Proprietorship` / `Partnership` / `Other`) — used to map the localised `value` to a standardised type; and `regulatory_review` — indicates this option is subject to additional regulatory review and may warrant a pre-submission warning to the user. Silently absent on options that carry no such metadata.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].options.items.[INDEX].category","typeLabel":"enum\u003cstring>"}},"required":["value","label"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].options.items.[INDEX]","typeLabel":"object"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].options","typeLabel":"object[]"},"conditionalOverrides":{"description":"Extra constraints that apply only while their own conditions hold. Each element carries a `conditions` array read exactly like the field's own `conditions` — every condition must hold, and `scope: 'person'` resolves the pointer against the current `ownership.persons[i]` row — plus the `constraints` submit adds for that case. Three cases ship. An address states what submit keys on that address's own country: a person's `/address/state` carries the US subdivision pattern and `/address/postalCode` the US ZIP pattern while that same person's `/address/country` is `USA` (`scope: 'person'`), and the business's `/operatingAddress/state` and `/operatingAddress/postalCode` carry the same two while `/operatingAddress/country` is `USA`, read at the root of the body because the condition names no scope. A person's `/taxIdNumber` carries the US Social Security Number pattern while that same person's `/taxIdType` is `SSN`. When two or more requirement rules declare one field and a rule's check depends on a condition discovery cannot settle (most often a `scope: 'person'` condition), that rule's check is an element too: its `constraints` and, for an enum field, its `allowedValues`. Some overrides' `pattern` states only the canonical value to send, not the full set submit accepts: the US subdivision pattern states the two-letter code with or without the `US-` prefix, while submit also accepts the full state name and other spellings. Apply every element whose conditions hold ON TOP OF the field's own `constraints`, never in place of them: the value must match the field-level `pattern` and every override `pattern` that applies, and a bound named twice tightens to the stricter value. The property is additive and a client may ignore it, in which case the field reads exactly as it did before the property existed and submit can still reject a value the override would have named. Silently absent when the field carries no conditional case.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].pointer","typeLabel":"string"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].value","typeLabel":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].values","typeLabel":"string[]"},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].scope","typeLabel":"enum\u003cstring>"}},"required":["pointer","operator"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX]","typeLabel":"object"},"description":"Conditions that must ALL hold for this override to apply. Same shape and evaluation as `conditions` on the field itself, `scope` included.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions","typeLabel":"object[]"},"constraints":{"type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.pattern","typeLabel":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.example","typeLabel":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.format","typeLabel":"enum\u003cstring>"},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.minLength","typeLabel":"integer"},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxLength","typeLabel":"integer"},"min":{"description":"Minimum numeric value","type":"number","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.min","typeLabel":"number"},"max":{"description":"Maximum numeric value","type":"number","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.max","typeLabel":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.minDate","typeLabel":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxDate","typeLabel":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxDateTime","typeLabel":"enum\u003cstring>"},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.minAgeYears","typeLabel":"integer"},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxAgeYears","typeLabel":"integer"},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.checksum","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"description":"Constraints submit adds while the conditions hold. They narrow the field, never widen it, and they do not replace the field's own `constraints`: `pattern` is a SECOND regex that states the canonical form for this case, applied as well as the field-level `pattern`, and a bound named on both takes whichever value is stricter. As at field level, submit can be more lenient than some of these patterns state. `example` is a value valid under this override. Empty when the override narrows only `allowedValues`.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints","typeLabel":"object"},"allowedValues":{"description":"Allowed values for an enum / enumArray field while the conditions hold: a subset of the field's own `allowedValues`. Submit refuses a value outside it in that case. Omitted when the override does not narrow the values.","example":["SSN"],"type":"array","items":{"type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].allowedValues.items.[INDEX]","typeLabel":"string"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX].allowedValues","typeLabel":"string[]"}},"required":["conditions","constraints"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides.items.[INDEX]","typeLabel":"object"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX].conditionalOverrides","typeLabel":"object[]"}},"required":["pointer","label","type","required"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields.items.[INDEX]","typeLabel":"object"},"description":"Scalar fields each person filling this role must submit. Each `pointer` is rooted at the person object (un-prefixed, e.g. `/firstName`, not `/ownership/persons/firstName`). Conditions on these fields default to `scope: 'root'`; per-person conditional applicability uses `scope: 'person'`.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.fields","typeLabel":"object[]"},"documents":{"type":"array","items":{"type":"object","properties":{"canonicalType":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","SELFIE"],"description":"Canonical category label for this document slot. Collect a document matching the title or category and upload it with `POST /v2/documents`. Setting that upload's optional `type` to this value records the file against this slot; Conduit still identifies the document itself, and that determination is what applies.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.documents.items.[INDEX].canonicalType","typeLabel":"enum\u003cstring>"},"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Government-issued photo ID","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.documents.items.[INDEX].title","typeLabel":"string"},"optional":{"description":"True when collection is recommended but not required for submission.","type":"boolean","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.documents.items.[INDEX].optional","typeLabel":"boolean"}},"required":["canonicalType","title"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.documents.items.[INDEX]","typeLabel":"object"},"description":"Documents each person in this role must supply. Upload via POST /v2/documents and reference the returned id under `ownership.persons[i].documentIds[]`.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.documents","typeLabel":"object[]"},"maxCount":{"description":"Maximum number of persons accepted under this role. Absent when unbounded.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.maxCount","typeLabel":"integer"},"ownershipThreshold":{"example":25,"type":"number","description":"Minimum ownership percentage qualifying a person as a beneficial owner under this rule. Absent when the rule doesn't constrain ownership disclosure.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.ownershipThreshold","typeLabel":"number"},"conditionalOverrides":{"description":"Lower ownership thresholds that apply only while their conditions hold. Enhanced due diligence, for example, lowers the threshold when the business declares a high-risk regulated activity. When more than one element holds, use the lowest `ownershipThreshold`. Silently absent when no conditional threshold applies.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX].conditions.items.[INDEX].pointer","typeLabel":"string"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX].conditions.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX].conditions.items.[INDEX].value","typeLabel":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX].conditions.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX].conditions.items.[INDEX].values","typeLabel":"string[]"},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX].conditions.items.[INDEX].scope","typeLabel":"enum\u003cstring>"}},"required":["pointer","operator"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX].conditions.items.[INDEX]","typeLabel":"object"},"description":"Conditions that must ALL hold for this threshold to apply. Evaluate them like a field's `conditions`.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX].conditions","typeLabel":"object[]"},"ownershipThreshold":{"type":"number","description":"The ownership percentage that qualifies a person as a beneficial owner while the conditions hold.","example":10,"isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX].ownershipThreshold","typeLabel":"number"}},"required":["conditions","ownershipThreshold"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides.items.[INDEX]","typeLabel":"object"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0.conditionalOverrides","typeLabel":"object[]"}},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["role","minCount","fields","documents"],"properties":{"role":{"type":"string","description":"Role label for this requirement row. A business row carries `CONTROLLING_PERSON`, `LEGAL_REPRESENTATIVE` or the sentinel `any`; `BENEFICIAL_OWNER` has its own branch. An individual row carries `ACCOUNT_HOLDER`, the one role of an individual application. Submit a role under `ownership.persons[i].roles[]` verbatim, except `any`, which marks a row that applies to every declared person and is rejected as a person's role at submit. Each row is self-contained: `documents[]` already includes any requirement authored with the sentinel role `any`, so a client only needs this one row per role. An `any` row appears only when a rule asks for `any` as a person requirement.","example":"CONTROLLING_PERSON","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.role","typeLabel":"string"},"minCount":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Minimum number of persons that must fill this role","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.minCount","typeLabel":"integer"},"fields":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the field in the submission payload. Always starts with /. Array indices appear as integers.","example":"/businessInfo/taxId","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].pointer","typeLabel":"string"},"label":{"type":"string","description":"Human-readable label for display","example":"Tax Identification Number","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].label","typeLabel":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","date","datetime","email","url","phone","country","enum","stringArray","enumArray"],"description":"Data type of the field","example":"string","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"required":{"type":"boolean","description":"Whether the field is required at submit","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].required","typeLabel":"boolean"},"helpText":{"description":"One-line guidance for the field, intended to render as a tooltip / info pill next to the label. Plain text, no markup. For `businessInfo.taxId` and `businessInfo.businessEntityId` this is the country-specific identifier description from `countries.json` (with the issuing authority prefixed when known, e.g. 'Issued by HMRC.'). For other fields it is universal copy from the server-side field registry. Silently absent when neither source has guidance on file. See api-conventions §5.1.5.","example":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].helpText","typeLabel":"string"},"group":{"description":"Section grouping code for renderers. Stable camelCase token drawn from a closed set per discovery context (onboarding today: `businessInfo`, `companyClassification`, `registeredAddress`, `operatingAddress`, `businessActivity`, `activity`, `regulatoryHistory`, `certification`, `customAnswers`; `activity` carries an individual subject's own activity envelope, where `businessActivity` carries a business subject's; `customAnswers` carries operator-authored questions). Omitted on top-level scalars without a section and on fields nested inside `individualRequirements[].fields[]` (already a logical group). Presentation metadata; submit ignores it.","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].group","typeLabel":"string"},"mustEqual":{"oneOf":[{"type":"boolean","description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].mustEqual.oneOf.0","typeLabel":"boolean"},{"type":"string","description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].mustEqual.oneOf.1","typeLabel":"string"},{"type":"number","description":"Required-with-const marker. Submit enforces strict equality on the field value (not just presence). Most common case: legal-certification booleans (`certification.termsAndConditions: { required: true, mustEqual: true }`) where `false` submits are rejected. Omitted when not constrained to a single value.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].mustEqual.oneOf.2","typeLabel":"number"}],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].mustEqual","typeLabel":"boolean | string | number"},"constraints":{"description":"Per-value limits on this field alone, enforceable client-side. Satisfying them does not by itself clear submit: a value must also satisfy the field's `allowedValues`, its `mustEqual`, and every `conditionalOverride` whose conditions hold. Some `pattern` values state only a canonical spelling, and submit can accept equivalent spellings such a pattern does not list.","type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.pattern","typeLabel":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.example","typeLabel":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.format","typeLabel":"enum\u003cstring>"},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.minLength","typeLabel":"integer"},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.maxLength","typeLabel":"integer"},"min":{"description":"Minimum numeric value","type":"number","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.min","typeLabel":"number"},"max":{"description":"Maximum numeric value","type":"number","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.max","typeLabel":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.minDate","typeLabel":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.maxDate","typeLabel":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.maxDateTime","typeLabel":"enum\u003cstring>"},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.minAgeYears","typeLabel":"integer"},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.maxAgeYears","typeLabel":"integer"},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints.checksum","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].constraints","typeLabel":"object"},"requiredOneOf":{"description":"Names a group of fields of which at least one must be sent. Every field in the response that has the same value is in the group, and each of them alone is enough. Absent when the field is in no group.","example":"accountIdentifier","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].requiredOneOf","typeLabel":"string"},"conditions":{"description":"Conditional applicability rules. The field applies (is shown / required) only when every condition evaluates true against the current submission. Empty / absent means unconditional.","type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditions.items.[INDEX].pointer","typeLabel":"string"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditions.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditions.items.[INDEX].value","typeLabel":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditions.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditions.items.[INDEX].values","typeLabel":"string[]"},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditions.items.[INDEX].scope","typeLabel":"enum\u003cstring>"}},"required":["pointer","operator"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditions","typeLabel":"object[]"},"allowedValues":{"description":"Allowed values for enum / enumArray fields. The submitted value MUST be one of these.","example":["LLC","CORPORATION","PARTNERSHIP"],"type":"array","items":{"type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].allowedValues.items.[INDEX]","typeLabel":"string"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].allowedValues","typeLabel":"string[]"},"options":{"description":"Structured per-option metadata for enum fields with display / grouping hints (label, abbr, description, category). `value` mirrors an entry in `allowedValues`. Present when the projector has localized data to surface (e.g. country-specific legal structures); enum fields without rich metadata use `allowedValues` alone.","type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Submitted value. Must be one of the entries in the sibling `allowedValues` array.","example":"Sociedad Anónima","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].options.items.[INDEX].value","typeLabel":"string"},"label":{"type":"string","description":"Human-readable label for display","example":"Sociedad Anónima","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].options.items.[INDEX].label","typeLabel":"string"},"abbr":{"oneOf":[{"type":"string","description":"Short-form / acronym for the option","example":"S.A.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].options.items.[INDEX].abbr.oneOf.0","typeLabel":"string"},{"type":"null","description":"Short-form / acronym for the option","example":"S.A.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].options.items.[INDEX].abbr.oneOf.1","typeLabel":"null"}],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].options.items.[INDEX].abbr","typeLabel":"string | null"},"description":{"description":"Long-form description of the option","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].options.items.[INDEX].description","typeLabel":"string"},"category":{"type":"string","enum":["Corp","LLC","Sole Proprietorship","Partnership","Other","regulatory_review"],"description":"Out-of-band metadata for an option that affects how it should be rendered or handled. Values: the legal-structure canonical bucket (`Corp` / `LLC` / `Sole Proprietorship` / `Partnership` / `Other`) — used to map the localised `value` to a standardised type; and `regulatory_review` — indicates this option is subject to additional regulatory review and may warrant a pre-submission warning to the user. Silently absent on options that carry no such metadata.","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].options.items.[INDEX].category","typeLabel":"enum\u003cstring>"}},"required":["value","label"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].options.items.[INDEX]","typeLabel":"object"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].options","typeLabel":"object[]"},"conditionalOverrides":{"description":"Extra constraints that apply only while their own conditions hold. Each element carries a `conditions` array read exactly like the field's own `conditions` — every condition must hold, and `scope: 'person'` resolves the pointer against the current `ownership.persons[i]` row — plus the `constraints` submit adds for that case. Three cases ship. An address states what submit keys on that address's own country: a person's `/address/state` carries the US subdivision pattern and `/address/postalCode` the US ZIP pattern while that same person's `/address/country` is `USA` (`scope: 'person'`), and the business's `/operatingAddress/state` and `/operatingAddress/postalCode` carry the same two while `/operatingAddress/country` is `USA`, read at the root of the body because the condition names no scope. A person's `/taxIdNumber` carries the US Social Security Number pattern while that same person's `/taxIdType` is `SSN`. When two or more requirement rules declare one field and a rule's check depends on a condition discovery cannot settle (most often a `scope: 'person'` condition), that rule's check is an element too: its `constraints` and, for an enum field, its `allowedValues`. Some overrides' `pattern` states only the canonical value to send, not the full set submit accepts: the US subdivision pattern states the two-letter code with or without the `US-` prefix, while submit also accepts the full state name and other spellings. Apply every element whose conditions hold ON TOP OF the field's own `constraints`, never in place of them: the value must match the field-level `pattern` and every override `pattern` that applies, and a bound named twice tightens to the stricter value. The property is additive and a client may ignore it, in which case the field reads exactly as it did before the property existed and submit can still reject a value the override would have named. Silently absent when the field carries no conditional case.","type":"array","items":{"type":"object","properties":{"conditions":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"RFC 6901 JSON Pointer to the submitted-data field this condition reads. Resolution is governed by the sibling scope (root by default; person-scoped when scope='person').","example":"/companyClassification/legalStructure","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].pointer","typeLabel":"string"},"operator":{"type":"string","enum":["eq","in","not_in","exists","is_true","is_false"],"description":"Comparison operator. The field is required / applies only when the condition evaluates true against the current submitted data.","example":"eq","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Single comparison value, used with eq / exists operators","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].value","typeLabel":"string"},"values":{"description":"Array of comparison values, used with in / not_in operators. When the field at `pointer` is an array, `in` holds when any element of it is one of these values.","type":"array","items":{"type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].values","typeLabel":"string[]"},"scope":{"description":"Evaluation scope for `pointer`. Default `root` evaluates against the top-level submission; `person` evaluates against the current `ownership.persons[i]` row (used inside `individualRequirements[].fields[].conditions`).","type":"string","enum":["root","person"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX].scope","typeLabel":"enum\u003cstring>"}},"required":["pointer","operator"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions.items.[INDEX]","typeLabel":"object"},"description":"Conditions that must ALL hold for this override to apply. Same shape and evaluation as `conditions` on the field itself, `scope` included.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].conditions","typeLabel":"object[]"},"constraints":{"type":"object","properties":{"pattern":{"description":"Regex stating the canonical form of the value. A value that matches it is in the form submit expects; for some fields, submit is more lenient than this pattern and can accept spellings it does not state, so a value outside it is not always refused.","example":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.pattern","typeLabel":"string"},"example":{"description":"Example value matching the pattern","example":"12.345.678/0001-95","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.example","typeLabel":"string"},"format":{"description":"Advertised server-enforced semantic format marker. Closed enum: `safeString` (structured short fields — rejects control characters, HTML tags, and punctuation outside the documented allowlist), `prose` (free-text fields — allows ordinary punctuation and multi-line text, rejecting control characters, invisible-format characters, line/paragraph separators, and lone surrogates) or `ip` (an IPv4 or IPv6 address — no zone identifier, no leading zeros in IPv4 octets). The server enforces the rule at submit; the marker advertises it so clients can pre-validate. Arbitrary regex aliases belong in `pattern`.","type":"string","enum":["safeString","prose","ip"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.format","typeLabel":"enum\u003cstring>"},"minLength":{"description":"Minimum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.minLength","typeLabel":"integer"},"maxLength":{"description":"Maximum string length","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxLength","typeLabel":"integer"},"min":{"description":"Minimum numeric value","type":"number","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.min","typeLabel":"number"},"max":{"description":"Maximum numeric value","type":"number","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.max","typeLabel":"number"},"minDate":{"description":"Earliest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"1800-01-01","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.minDate","typeLabel":"string"},"maxDate":{"description":"Latest allowed date as ISO 8601 (YYYY-MM-DD) or the literal 'today'","example":"today","type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxDate","typeLabel":"string"},"maxDateTime":{"description":"Latest allowed instant for a datetime field: the literal 'now'. A value up to five minutes ahead of the server clock is accepted to absorb clock skew.","example":"now","type":"string","enum":["now"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxDateTime","typeLabel":"enum\u003cstring>"},"minAgeYears":{"description":"Minimum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.minAgeYears","typeLabel":"integer"},"maxAgeYears":{"description":"Maximum age in years (for date-of-birth-style fields)","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.maxAgeYears","typeLabel":"integer"},"checksum":{"description":"A check digit rule the value must pass beyond `pattern`: `aba` for a US routing number, `iban` for an international bank account number (mod-97).","type":"string","enum":["aba","iban"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints.checksum","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"description":"Constraints submit adds while the conditions hold. They narrow the field, never widen it, and they do not replace the field's own `constraints`: `pattern` is a SECOND regex that states the canonical form for this case, applied as well as the field-level `pattern`, and a bound named on both takes whichever value is stricter. As at field level, submit can be more lenient than some of these patterns state. `example` is a value valid under this override. Empty when the override narrows only `allowedValues`.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].constraints","typeLabel":"object"},"allowedValues":{"description":"Allowed values for an enum / enumArray field while the conditions hold: a subset of the field's own `allowedValues`. Submit refuses a value outside it in that case. Omitted when the override does not narrow the values.","example":["SSN"],"type":"array","items":{"type":"string","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].allowedValues.items.[INDEX]","typeLabel":"string"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX].allowedValues","typeLabel":"string[]"}},"required":["conditions","constraints"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides.items.[INDEX]","typeLabel":"object"},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX].conditionalOverrides","typeLabel":"object[]"}},"required":["pointer","label","type","required"],"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields.items.[INDEX]","typeLabel":"object"},"description":"Scalar fields each person filling this role must submit. Each `pointer` is rooted at the person object (un-prefixed, e.g. `/firstName`, not `/ownership/persons/firstName`). Conditions on these fields default to `scope: 'root'`; per-person conditional applicability uses `scope: 'person'`.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.fields","typeLabel":"object[]"},"documents":{"type":"array","items":{"type":"object","properties":{"canonicalType":{"type":"string","enum":["BUSINESS_REGISTRATION","ARTICLES_OF_INCORPORATION","TAX_CERTIFICATE","OPERATING_LICENSE","REGULATORY_LICENSE","SHAREHOLDERS_REGISTRY","DIRECTORS_REGISTRY","AUTHORIZATION_TO_ACT","PROOF_OF_ADDRESS","CERTIFICATE_OF_GOOD_STANDING","FLOW_OF_FUNDS","AUDITED_FINANCIAL_STATEMENT","BANK_STATEMENT","ORG_STRUCTURE_CHART","AML_AUDIT","COMPLIANCE_POLICY","INSTITUTIONAL_INVESTOR_DOCUMENTATION","IRS_W8BEN_E","IRS_W8BEN","IRS_W9","IDENTITY_VERIFICATION","IDENTITY_VERIFICATION_ATTESTATION","EDD_EVIDENCE","BANK_VERIFICATION_LETTER","INVOICE","CONTRACT","PAYROLL_REGISTER","INVESTMENT_AGREEMENT","OTHER","SELFIE"],"description":"Canonical category label for this document slot. Collect a document matching the title or category and upload it with `POST /v2/documents`. Setting that upload's optional `type` to this value records the file against this slot; Conduit still identifies the document itself, and that determination is what applies.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.documents.items.[INDEX].canonicalType","typeLabel":"enum\u003cstring>"},"title":{"type":"string","description":"Human-readable artifact name for UI display","example":"Government-issued photo ID","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.documents.items.[INDEX].title","typeLabel":"string"},"optional":{"description":"True when collection is recommended but not required for submission.","type":"boolean","uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.documents.items.[INDEX].optional","typeLabel":"boolean"}},"required":["canonicalType","title"],"additionalProperties":false,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.documents.items.[INDEX]","typeLabel":"object"},"description":"Documents each person in this role must supply. Upload via POST /v2/documents and reference the returned id under `ownership.persons[i].documentIds[]`.","isRequired":true,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.documents","typeLabel":"object[]"},"maxCount":{"description":"Maximum number of persons accepted under this role. Absent when unbounded.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1.maxCount","typeLabel":"integer"}},"uniqueKey":"individualRequirements.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"individualRequirements.items.[INDEX]","typeLabel":"object"},"description":"Per-role count and person-level field + document requirements for ownership.persons[].","isRequired":true,"uniqueKey":"individualRequirements","typeLabel":"object[]"}},"required":["schemaVersion","context","country","fields","documents","minDocuments","individualRequirements"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"schemaVersion":"3","context":"onboarding","country":"USA","fields":[{"pointer":"/businessInfo/taxId","label":"Tax Identification Number","type":"string","required":true,"helpText":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","group":"\u003cstring>","mustEqual":true,"constraints":{"pattern":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","example":"12.345.678/0001-95","format":"safeString","minLength":0,"maxLength":0,"min":123,"max":123,"minDate":"1800-01-01","maxDate":"today","maxDateTime":"now","minAgeYears":0,"maxAgeYears":0,"checksum":"aba"},"requiredOneOf":"accountIdentifier","conditions":[{"pointer":"/companyClassification/legalStructure","operator":"eq","value":"\u003cstring>","values":["\u003cstring>"],"scope":"root"}],"allowedValues":["LLC","CORPORATION","PARTNERSHIP"],"options":[{"value":"Sociedad Anónima","label":"Sociedad Anónima","abbr":"S.A.","description":"\u003cstring>","category":"Corp"}],"conditionalOverrides":[{"conditions":[{"pointer":"/companyClassification/legalStructure","operator":"eq","value":"\u003cstring>","values":["\u003cstring>"],"scope":"root"}],"constraints":{"pattern":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","example":"12.345.678/0001-95","format":"safeString","minLength":0,"maxLength":0,"min":123,"max":123,"minDate":"1800-01-01","maxDate":"today","maxDateTime":"now","minAgeYears":0,"maxAgeYears":0,"checksum":"aba"},"allowedValues":["SSN"]}]}],"documents":[{"canonicalType":"BUSINESS_REGISTRATION","title":"Articles of Incorporation","required":true,"from":"\u003cstring>","alternatives":[{"title":"Certificate of Incorporation","from":"\u003cstring>"}],"requiredArtifacts":[{"title":"Certificate of Incorporation","from":"\u003cstring>"}],"optionalArtifacts":[{"title":"Certificate of Incorporation","from":"\u003cstring>"}],"optional":true,"minCount":4503599627370496,"groupId":"group:any-of:AUDITED_FINANCIAL_STATEMENT+BANK_STATEMENT","policyFallback":true,"guidance":"\u003cstring>","addressTarget":"registered","conditions":[{"pointer":"/companyClassification/legalStructure","operator":"eq","value":"\u003cstring>","values":["\u003cstring>"],"scope":"root"}]}],"minDocuments":1,"individualRequirements":[{"role":"BENEFICIAL_OWNER","minCount":4503599627370495,"fields":[{"pointer":"/businessInfo/taxId","label":"Tax Identification Number","type":"string","required":true,"helpText":"Issued by HMRC. 10-digit number; auto-assigned on CT registration; appears on HMRC correspondence. VAT Registration Number (GB + 9 digits; XI prefix for NI–EU trade) is supplementary — collect separately if VAT-registered.","group":"\u003cstring>","mustEqual":true,"constraints":{"pattern":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","example":"12.345.678/0001-95","format":"safeString","minLength":0,"maxLength":0,"min":123,"max":123,"minDate":"1800-01-01","maxDate":"today","maxDateTime":"now","minAgeYears":0,"maxAgeYears":0,"checksum":"aba"},"requiredOneOf":"accountIdentifier","conditions":[{"pointer":"/companyClassification/legalStructure","operator":"eq","value":"\u003cstring>","values":["\u003cstring>"],"scope":"root"}],"allowedValues":["LLC","CORPORATION","PARTNERSHIP"],"options":[{"value":"Sociedad Anónima","label":"Sociedad Anónima","abbr":"S.A.","description":"\u003cstring>","category":"Corp"}],"conditionalOverrides":[{"conditions":[{"pointer":"/companyClassification/legalStructure","operator":"eq","value":"\u003cstring>","values":["\u003cstring>"],"scope":"root"}],"constraints":{"pattern":"^\\d{2}\\.\\d{3}\\.\\d{3}/\\d{4}-\\d{2}$","example":"12.345.678/0001-95","format":"safeString","minLength":0,"maxLength":0,"min":123,"max":123,"minDate":"1800-01-01","maxDate":"today","maxDateTime":"now","minAgeYears":0,"maxAgeYears":0,"checksum":"aba"},"allowedValues":["SSN"]}]}],"documents":[{"canonicalType":"BUSINESS_REGISTRATION","title":"Government-issued photo ID","optional":true}],"maxCount":0,"ownershipThreshold":25,"conditionalOverrides":[{"conditions":[{"pointer":"/companyClassification/legalStructure","operator":"eq","value":"\u003cstring>","values":["\u003cstring>"],"scope":"root"}],"ownershipThreshold":10}]}]}}},"exampleType":"generated"}},"exampleType":"generated"},"38bccefa-3477-4d13-9fac-ad27257701c4":{"description":"**INVALID_OID_FORMAT**: A path or query parameter expected a valid object identifier but received a value that does not match the expected format.\n\n**VALIDATION_ERROR**: The request body or query parameters failed validation. One or more fields have invalid values, missing required properties, or incorrect types. A required text field that holds only spaces counts as missing. Multipart file uploads that fail at the multipart-parser layer (unexpected form-field name, too many parts) carry an extra 'field' member naming the offending form-field.\n\n**INVALID_POLICY_SUBJECT**: The submitted catalog-backed classification key (e.g. `companyClassification.primaryIndustry`) is unknown, retired, not directly selectable, or does not match the field's expected subject kind. Valid options are surfaced by the discovery endpoint.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"number","description":"HTTP status code","example":404,"isRequired":true,"uniqueKey":"status","typeLabel":"number"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization.","isRequired":true,"uniqueKey":"resolution","typeLabel":"string"},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found","isRequired":true,"uniqueKey":"docs","typeLabel":"string"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string","uniqueKey":"correlationId","typeLabel":"string"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)","uniqueKey":"details","typeLabel":"any"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string","description":"JSON pointer to the invalid field","example":"/email","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"detail":{"type":"string","description":"What is wrong with this field","example":"Invalid email format","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"allowedValues":{"description":"The values this field accepts, when it is a closed set","example":["ach","fedwire","rtp"],"type":"array","items":{"type":"string","uniqueKey":"errors.items.[INDEX].allowedValues.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.items.[INDEX].allowedValues","typeLabel":"string[]"},"category":{"description":"Class of blocker (requirements-validator output only). 'field' = form-field gap, 'document' = missing or insufficient document (including per-UBO document slots), 'individual' = required person missing.","example":"field","type":"string","enum":["field","document","individual"],"uniqueKey":"errors.items.[INDEX].category","typeLabel":"enum\u003cstring>"}},"required":["pointer","detail"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["type","title","status","detail","resolution","docs","instance","timestamp"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"},"examples":{"Example":{"title":"Example","value":{"type":"INVALID_OID_FORMAT","title":"Invalid Object ID Format","status":400,"detail":"A path or query parameter expected a valid object identifier but received a value that does not match the expected format.","resolution":"Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.","docs":"https://v2.docs.conduit.financial/errors#invalid-oid-format","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"6daea06f-0362-426a-8b0f-e78d080bbcea":{"description":"**API_KEY_MISSING**: The request did not include an API key. All API requests must be authenticated.\n\n**API_KEY_INVALID**: The provided API key is not recognized or has been revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"number","description":"HTTP status code","example":404,"isRequired":true,"uniqueKey":"status","typeLabel":"number"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization.","isRequired":true,"uniqueKey":"resolution","typeLabel":"string"},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found","isRequired":true,"uniqueKey":"docs","typeLabel":"string"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string","uniqueKey":"correlationId","typeLabel":"string"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","resolution","docs","instance","timestamp"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"},"examples":{"Example":{"title":"Example","value":{"type":"API_KEY_MISSING","title":"API Key Missing","status":401,"detail":"The request did not include an API key. All API requests must be authenticated.","resolution":"Include your API key in the 'x-api-key' header with every request.","docs":"https://v2.docs.conduit.financial/errors#api-key-missing","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"061cad62-2f19-4ee0-b868-e532cef9148c":{"description":"**ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"number","description":"HTTP status code","example":404,"isRequired":true,"uniqueKey":"status","typeLabel":"number"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization.","isRequired":true,"uniqueKey":"resolution","typeLabel":"string"},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found","isRequired":true,"uniqueKey":"docs","typeLabel":"string"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string","uniqueKey":"correlationId","typeLabel":"string"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","resolution","docs","instance","timestamp"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"},"examples":{"Example":{"title":"Example","value":{"type":"ORGANIZATION_ACCESS_SUSPENDED","title":"Organization Access Suspended","status":403,"detail":"Conduit has suspended this organization's access. Requests with the organization's API keys and from its users are refused until Conduit restores access.","resolution":"Contact Conduit support.","docs":"https://v2.docs.conduit.financial/errors#organization-access-suspended","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"d439b5c5-f0b8-4925-9ede-29737f6ca522":{"description":"**NOT_FOUND**: The requested resource does not exist or you do not have access to it.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"number","description":"HTTP status code","example":404,"isRequired":true,"uniqueKey":"status","typeLabel":"number"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization.","isRequired":true,"uniqueKey":"resolution","typeLabel":"string"},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found","isRequired":true,"uniqueKey":"docs","typeLabel":"string"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string","uniqueKey":"correlationId","typeLabel":"string"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","resolution","docs","instance","timestamp"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"NOT_FOUND","title":"Not Found","status":404,"detail":"The requested resource does not exist or you do not have access to it.","resolution":"Check that the resource ID in the URL is correct. The resource may have been deleted or may belong to a different account.","docs":"https://v2.docs.conduit.financial/errors#not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"},"examples":{"Example":{"title":"Example","value":{"type":"NOT_FOUND","title":"Not Found","status":404,"detail":"The requested resource does not exist or you do not have access to it.","resolution":"Check that the resource ID in the URL is correct. The resource may have been deleted or may belong to a different account.","docs":"https://v2.docs.conduit.financial/errors#not-found","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"b5daef80-6734-4f0b-a3e7-2ebfa3e0e33c":{"description":"**SUBJECT_REQUIREMENTS_NOT_AVAILABLE**: No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"number","description":"HTTP status code","example":404,"isRequired":true,"uniqueKey":"status","typeLabel":"number"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization.","isRequired":true,"uniqueKey":"resolution","typeLabel":"string"},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found","isRequired":true,"uniqueKey":"docs","typeLabel":"string"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string","uniqueKey":"correlationId","typeLabel":"string"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","resolution","docs","instance","timestamp"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"SUBJECT_REQUIREMENTS_NOT_AVAILABLE","title":"Subject Requirements Not Available","status":422,"detail":"No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.","resolution":"This subject type is not available for your organization in this context at this time. Do not retry. Contact your Conduit account manager.","docs":"https://v2.docs.conduit.financial/errors#subject-requirements-not-available","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"},"examples":{"Example":{"title":"Example","value":{"type":"SUBJECT_REQUIREMENTS_NOT_AVAILABLE","title":"Subject Requirements Not Available","status":422,"detail":"No requirements are available for the requested subject type in the current context — the country, provider, and organization conditions of the request — so it cannot be fulfilled. This does not assert that no requirements exist for the subject anywhere; it reports that none apply to this request. It is returned wherever a subject's requirements are read: onboarding discovery and submit, and feature-request discovery and submit. It is a deterministic state, not a transient outage: it does not resolve on retry.","resolution":"This subject type is not available for your organization in this context at this time. Do not retry. Contact your Conduit account manager.","docs":"https://v2.docs.conduit.financial/errors#subject-requirements-not-available","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"fdc6b467-8e03-4ad9-b15e-402df18c6fd5":{"description":"**RATE_LIMITED**: Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"number","description":"HTTP status code","example":404,"isRequired":true,"uniqueKey":"status","typeLabel":"number"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization.","isRequired":true,"uniqueKey":"resolution","typeLabel":"string"},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found","isRequired":true,"uniqueKey":"docs","typeLabel":"string"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"retryAfterSeconds":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991,"description":"Seconds to wait before retrying","example":3,"isRequired":true,"uniqueKey":"retryAfterSeconds","typeLabel":"integer"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string","uniqueKey":"correlationId","typeLabel":"string"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","resolution","docs","instance","timestamp","retryAfterSeconds"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3},"examples":{"Example":{"title":"Example","value":{"type":"RATE_LIMITED","title":"Rate Limited","status":429,"detail":"Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the bucket refills) on every response once your API key is accepted.","resolution":"Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.","docs":"https://v2.docs.conduit.financial/errors#rate-limited","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z","retryAfterSeconds":3}}},"exampleType":"examples"}},"exampleType":"examples"},"c1634a00-7c75-4f97-ba13-8180d7a1f4fa":{"description":"**INTERNAL_ERROR**: An unexpected error occurred while processing your request.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Machine-readable error code","example":"CUSTOMER_NOT_FOUND","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"title":{"type":"string","description":"Human-readable error type label","example":"Customer Not Found","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"number","description":"HTTP status code","example":404,"isRequired":true,"uniqueKey":"status","typeLabel":"number"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence","example":"Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"resolution":{"type":"string","description":"What the developer should do to resolve this error","example":"Verify the customer ID. Check you are using the correct API key for this organization.","isRequired":true,"uniqueKey":"resolution","typeLabel":"string"},"docs":{"type":"string","description":"URL to error documentation","example":"https://v2.docs.conduit.financial/errors#customer-not-found","isRequired":true,"uniqueKey":"docs","typeLabel":"string"},"instance":{"type":"string","description":"Request path that produced the error","example":"/v2/customers/cus_034A0gCCVsxdV2PjHLx9k1","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"timestamp":{"type":"string","description":"ISO 8601 UTC timestamp","example":"2026-04-27T20:00:00.000Z","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string"},"correlationId":{"description":"Request correlation ID","example":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","type":"string","uniqueKey":"correlationId","typeLabel":"string"},"details":{"description":"Additional structured data for domain-specific errors (e.g. missing field lists, pair info)","uniqueKey":"details","typeLabel":"any"}},"required":["type","title","status","detail","resolution","docs","instance","timestamp"],"uniqueKey":"","typeLabel":"object"},"example":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"},"examples":{"Example":{"title":"Example","value":{"type":"INTERNAL_ERROR","title":"Internal Error","status":500,"detail":"An unexpected error occurred while processing your request.","resolution":"Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.","docs":"https://v2.docs.conduit.financial/errors#internal-error","instance":"/v2/...","correlationId":"00469ea4-52c1-4ffa-bd05-9f28b236a5fe","timestamp":"2026-01-15T09:30:00.000Z"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"e216d117-afec-4a29-92f2-646b533f2725":{"api-key":{"type":"apiKey","in":"header","name":"x-api-key","scopes":[],"schemeName":"api-key"}}},"servers":{"5707e0ee-a73c-4f7a-b3dd-5e91e6ddef88":{"url":"https://api.sandbox.conduit.financial/v2","description":"Sandbox"},"107fb7ae-4503-4921-bfe7-67fa54c45455":{"url":"https://api.conduit.financial/v2","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","scopes":[],"schemeName":"api-key"},"schema":{"title":"x-api-key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"api-key","name":"x-api-key"}],"title":"api-key"}]},"originalFileLocation":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json"},"subdomain":"conduit-v2","siteName":"Conduit API","title":"Discover onboarding requirements for a country - Conduit API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T22:59:24.612Z","originalFileLocation":"api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns fields[], documents[], and individualRequirements[] for the given country (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each fields[].pointer names the place of the value in the POST /v2/onboarding body: /businessInfo/taxId is businessInfo: { taxId }. documents[] is a checklist of what to collect: upload each file with POST /v2/documents and send the returned id in the top-level documentIds[] of the submit body.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Conduit API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Discover onboarding requirements for a country - Conduit API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns fields[], documents[], and individualRequirements[] for the given country (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each fields[].pointer names the place of the value in the POST /v2/onboarding body: /businessInfo/taxId is businessInfo: { taxId }. documents[] is a checklist of what to collect: upload each file with POST /v2/documents and send the returned id in the top-level documentIds[] of the submit body.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Conduit API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://conduit-v2.mintlify.site/_mintlify/api/og/v2?division=Customer+Onboarding\u0026amp;title=Discover+onboarding+requirements+for+a+country\u0026amp;description=Returns+%60fields%5B%5D%60%2C+%60documents%5B%5D%60%2C+and+%60individualRequirements%5B%5D%60+for+the+given+%60country%60+%28alpha-2+or+alpha-3%2C+normalized+server-side%3B+response+always+echoes+al\u0026amp;theme=3d508c90c97bd7e1f652ff9d\u0026amp;signature=bf1783642a43167d221a19e82f0329fa32ec79d0b6d9f2f3f375c77d8ac0028d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Discover onboarding requirements for a country - Conduit API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns fields[], documents[], and individualRequirements[] for the given country (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each fields[].pointer names the place of the value in the POST /v2/onboarding body: /businessInfo/taxId is businessInfo: { taxId }. documents[] is a checklist of what to collect: upload each file with POST /v2/documents and send the returned id in the top-level documentIds[] of the submit body.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://conduit-v2.mintlify.site/_mintlify/api/og/v2?division=Customer+Onboarding\u0026amp;title=Discover+onboarding+requirements+for+a+country\u0026amp;description=Returns+%60fields%5B%5D%60%2C+%60documents%5B%5D%60%2C+and+%60individualRequirements%5B%5D%60+for+the+given+%60country%60+%28alpha-2+or+alpha-3%2C+normalized+server-side%3B+response+always+echoes+al\u0026amp;theme=3d508c90c97bd7e1f652ff9d\u0026amp;signature=bf1783642a43167d221a19e82f0329fa32ec79d0b6d9f2f3f375c77d8ac0028d\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/conduit-v2/aehrL9Bd40t-JxrL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Conduit API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0445F5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.conduit.financial/#organization\",\"name\":\"Conduit API\",\"url\":\"https://docs.conduit.financial\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.conduit.financial#website\",\"name\":\"Conduit API\",\"url\":\"https://docs.conduit.financial\",\"publisher\":{\"@id\":\"https://docs.conduit.financial/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country#webpage\",\"url\":\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country\",\"name\":\"Discover onboarding requirements for a country\",\"description\":\"Returns fields[], documents[], and individualRequirements[] for the given country (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each fields[].pointer names the place of the value in the POST /v2/onboarding body: /businessInfo/taxId is businessInfo: { taxId }. documents[] is a checklist of what to collect: upload each file with POST /v2/documents and send the returned id in the top-level documentIds[] of the submit body.\",\"dateModified\":\"2026-11-06T22:59:24.612Z\",\"isPartOf\":{\"@id\":\"https://docs.conduit.financial#website\"},\"breadcrumb\":{\"@id\":\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Customer Onboarding\",\"item\":\"https://docs.conduit.financial/api-reference/customer-onboarding/submit-a-customer-onboarding-application\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Discover onboarding requirements for a country\",\"item\":\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country#apireference\",\"headline\":\"Discover onboarding requirements for a country\",\"name\":\"Discover onboarding requirements for a country\",\"description\":\"Returns fields[], documents[], and individualRequirements[] for the given country (alpha-2 or alpha-3, normalized server-side; response always echoes alpha-3). Each fields[].pointer names the place of the value in the POST /v2/onboarding body: /businessInfo/taxId is businessInfo: { taxId }. documents[] is a checklist of what to collect: upload each file with POST /v2/documents and send the returned id in the top-level documentIds[] of the submit body.\",\"url\":\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country\",\"mainEntityOfPage\":{\"@id\":\"https://docs.conduit.financial/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country#webpage\"},\"dateModified\":\"2026-11-06T22:59:24.612Z\",\"publisher\":{\"@id\":\"https://docs.conduit.financial/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.conduit.financial#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Conduit API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Conduit API","nav":{"global":{"anchors":[{"anchor":"Trust Center","href":"https://trust.conduitpay.com/"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"Sandbox","pages":[{"title":"Sandbox","href":"/sandbox/overview"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Conventions","href":"/api-reference/overview"},{"title":"OpenAPI Specification","href":"/sdks/openapi"},{"title":"Changelog","href":"/changelog"}]},{"group":"Errors","pages":[{"title":"Error Codes","href":"/errors"},{"group":"Recovery playbooks","pages":[{"title":"TRAVEL_RULE_REJECTED error","href":"/errors/travel-rule-rejected"},{"title":"SENDER_INFO_TIMEOUT error","href":"/errors/sender-info-timeout"},{"title":"USER_SIGNATURE_DECLINED error","href":"/errors/user-signature-declined"},{"title":"USER_SIGNATURE_TIMEOUT error","href":"/errors/user-signature-timeout"},{"title":"USER_SIGNATURE_REJECTED_BY_PROVIDER error","href":"/errors/user-signature-rejected-by-provider"},{"title":"COMPLIANCE_HOLD error","href":"/errors/compliance-hold"},{"title":"COMPLIANCE_REVIEW_REJECTED error","href":"/errors/compliance-review-rejected"},{"title":"CRYPTO_WALLET_MISCONFIGURED error","href":"/errors/crypto-wallet-misconfigured"},{"title":"RETURNED_BY_SENDER error","href":"/errors/returned-by-sender"},{"title":"PROVIDER_REJECTED error","href":"/errors/provider-rejected"},{"title":"RAIL_POLICY_REJECTED error","href":"/errors/rail-policy-rejected"},{"title":"INSUFFICIENT_FUNDS_AT_SETTLE error","href":"/errors/insufficient-funds-at-settle"},{"title":"RAIL_UNAVAILABLE error","href":"/errors/rail-unavailable"},{"title":"SANDBOX_TRANSACTION_NOT_FORCE_TERMINAL_READY error","href":"/errors/sandbox-transaction-not-force-terminal-ready"},{"title":"INVALID_ADDRESS_FORMAT error","href":"/errors/invalid-address-format"},{"title":"CUSTOMER_NOT_ONBOARDED","href":"/errors/customer-not-onboarded"},{"title":"RATE_UNAVAILABLE","href":"/errors/rate-unavailable"},{"title":"RATE_UNAVAILABLE_AFTER_HOURS","href":"/errors/rate-unavailable-after-hours"},{"title":"DOCUMENTATION_REQUIRED","href":"/errors/documentation-required"},{"title":"RECIPIENT_NOT_WHITELISTED","href":"/errors/recipient-not-whitelisted"},{"title":"PAYOUT_RAIL_CURRENCY_MISMATCH","href":"/errors/payout-rail-currency-mismatch"}]}]},{"group":"Customers","pages":[{"title":"List customers","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers","href":"/api-reference/customers/list-customers"},{"title":"Get a customer by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{id}","href":"/api-reference/customers/get-a-customer-by-id"},{"title":"Submit a customer update application","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/updates","href":"/api-reference/customers/submit-a-customer-update-application"}]},{"group":"Registered Addresses","pages":[{"title":"List registered addresses for a customer","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/wallets/registered-addresses","href":"/api-reference/registered-addresses/list-registered-addresses-for-a-customer"},{"title":"Register a wallet address for a customer","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallets/registered-addresses","href":"/api-reference/registered-addresses/register-a-wallet-address-for-a-customer"},{"title":"Get a registered address by id","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /wallets/registered-addresses/{id}","href":"/api-reference/registered-addresses/get-a-registered-address-by-id"},{"title":"Revoke (soft-delete) a registered address","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json delete /wallets/registered-addresses/{id}","href":"/api-reference/registered-addresses/revoke-soft-delete-a-registered-address"}]},{"group":"Wallets","pages":[{"title":"Claim non-custodial control for a customer","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallets/claim-non-custodial","href":"/api-reference/wallets/claim-non-custodial-control-for-a-customer"},{"title":"List customer wallets","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/wallets","href":"/api-reference/wallets/list-customer-wallets"},{"title":"Create a wallet","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallets","href":"/api-reference/wallets/create-a-wallet"},{"title":"List non-custodial claims","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/wallets/claims","href":"/api-reference/wallets/list-non-custodial-claims"},{"title":"Get a non-custodial claim by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/wallets/claims/{claimId}","href":"/api-reference/wallets/get-a-non-custodial-claim-by-id"},{"title":"Get a wallet by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/wallets/{walletId}","href":"/api-reference/wallets/get-a-wallet-by-id"},{"title":"Get wallet balances","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/wallets/{walletId}/balances","href":"/api-reference/wallets/get-wallet-balances"},{"title":"Get a wallet statement","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/wallets/{walletId}/statement","href":"/api-reference/wallets/get-a-wallet-statement"},{"title":"Rotate a wallet","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallets/{walletId}/rotate","href":"/api-reference/wallets/rotate-a-wallet"}]},{"group":"Wallet Signers","pages":[{"title":"List signers for a customer's wallets","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/wallet-signers","href":"/api-reference/wallet-signers/list-signers-for-a-customers-wallets"},{"title":"Add a signer to a customer's wallets","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallet-signers","href":"/api-reference/wallet-signers/add-a-signer-to-a-customers-wallets"},{"title":"Reissue a wallet signer's enrollment invite","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallet-signers/{signerId}/reissue-invite","href":"/api-reference/wallet-signers/reissue-a-wallet-signers-enrollment-invite"},{"title":"Recover a signer's pending admin-approval link","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallet-signers/{signerId}/reissue-admin-approval","href":"/api-reference/wallet-signers/recover-a-signers-pending-admin-approval-link"},{"title":"Start a passkey recovery for a signer","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallet-signers/{signerId}/recovery","href":"/api-reference/wallet-signers/start-a-passkey-recovery-for-a-signer"},{"title":"Cancel a signer's passkey recovery","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallet-signers/{signerId}/recovery/cancel","href":"/api-reference/wallet-signers/cancel-a-signers-passkey-recovery"},{"title":"Remove a signer from a customer's wallets","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json delete /customers/{customerId}/wallet-signers/{signerId}","href":"/api-reference/wallet-signers/remove-a-signer-from-a-customers-wallets"},{"title":"Promote a signer to admin in place of an admin","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallet-signers/{signerId}/promote","href":"/api-reference/wallet-signers/promote-a-signer-to-admin-in-place-of-an-admin"},{"title":"Demote an admin","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/wallet-signers/{signerId}/demote","href":"/api-reference/wallet-signers/demote-an-admin"}]},{"group":"Signing Quorum","pages":[{"title":"Get a customer's signing quorum configuration","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/signing-quorum","href":"/api-reference/signing-quorum/get-a-customers-signing-quorum-configuration"},{"title":"Set a customer's signing quorum threshold","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json put /customers/{customerId}/signing-quorum","href":"/api-reference/signing-quorum/set-a-customers-signing-quorum-threshold"},{"title":"Override a wallet's signing quorum threshold","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json put /wallets/{walletId}/signing-quorum","href":"/api-reference/signing-quorum/override-a-wallets-signing-quorum-threshold"},{"title":"Clear a wallet's signing quorum override","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json delete /wallets/{walletId}/signing-quorum","href":"/api-reference/signing-quorum/clear-a-wallets-signing-quorum-override"}]},{"group":"Virtual Accounts","pages":[{"title":"List customer virtual accounts","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/virtual-accounts","href":"/api-reference/virtual-accounts/list-customer-virtual-accounts"},{"title":"Get a virtual account","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/virtual-accounts/{virtualAccountId}","href":"/api-reference/virtual-accounts/get-a-virtual-account"},{"title":"Get virtual account balances","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/virtual-accounts/{virtualAccountId}/balances","href":"/api-reference/virtual-accounts/get-virtual-account-balances"},{"title":"Get a virtual account statement","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/virtual-accounts/{virtualAccountId}/statement","href":"/api-reference/virtual-accounts/get-a-virtual-account-statement"}]},{"group":"Applications","pages":[{"title":"List all applications","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /applications","href":"/api-reference/applications/list-all-applications"},{"title":"Get an application by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /applications/{id}","href":"/api-reference/applications/get-an-application-by-id"},{"title":"Cancel an application","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /applications/{id}/cancel","href":"/api-reference/applications/cancel-an-application"},{"title":"Get an identity-verification link for a person","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /applications/{applicationId}/persons/{referenceId}/idv-link","href":"/api-reference/applications/get-an-identity-verification-link-for-a-person"}]},{"group":"Verifications","pages":[{"title":"Initiate a customer verification","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/verifications","href":"/api-reference/verifications/initiate-a-customer-verification"}]},{"group":"Signing Requests","pages":[{"title":"List signing requests awaiting a machine signature","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /signing-requests","href":"/api-reference/signing-requests/list-signing-requests-awaiting-a-machine-signature"},{"title":"Get a signing request","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /signing-requests/{id}","href":"/api-reference/signing-requests/get-a-signing-request"},{"title":"Approve a signing request with a machine stamp","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /signing-requests/{id}/approve","href":"/api-reference/signing-requests/approve-a-signing-request-with-a-machine-stamp"},{"title":"Reject a signing request with a machine stamp","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /signing-requests/{id}/reject","href":"/api-reference/signing-requests/reject-a-signing-request-with-a-machine-stamp"}]},{"group":"Transactions","pages":[{"title":"Submit sender (originator) information for a deposit parked on UNREGISTERED_ADDRESS","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /transactions/{id}/sender-information","href":"/api-reference/transactions/submit-sender-originator-information-for-a-deposit-parked-on-unregistered_address"},{"title":"List transactions","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /transactions","href":"/api-reference/transactions/list-transactions"},{"title":"Get a transaction by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /transactions/{id}","href":"/api-reference/transactions/get-a-transaction-by-id"}]},{"group":"Payouts","pages":[{"title":"Discover payout requirements","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /payouts/requirements","href":"/api-reference/payouts/discover-payout-requirements"},{"title":"Preview payout requirements","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /payouts/requirements","href":"/api-reference/payouts/preview-payout-requirements"},{"title":"Create a payout","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /payouts","href":"/api-reference/payouts/create-a-payout"},{"title":"Retrieve a payout","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /payouts/{id}","href":"/api-reference/payouts/retrieve-a-payout"},{"title":"Cancel a pending payout","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /payouts/{id}/cancel","href":"/api-reference/payouts/cancel-a-pending-payout"}]},{"group":"RFIs","pages":[{"title":"List RFIs","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /rfis","href":"/api-reference/rfis/list-rfis"},{"title":"Get an RFI by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /rfis/{id}","href":"/api-reference/rfis/get-an-rfi-by-id"},{"title":"Acknowledge an RFI","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /rfis/{id}/acknowledge","href":"/api-reference/rfis/acknowledge-an-rfi"},{"title":"Respond to an RFI","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /rfis/{id}/responses","href":"/api-reference/rfis/respond-to-an-rfi"}]},{"group":"Documents","pages":[{"title":"List documents","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /documents","href":"/api-reference/documents/list-documents"},{"title":"Upload a document","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /documents","href":"/api-reference/documents/upload-a-document"},{"title":"Get a document by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /documents/{id}","href":"/api-reference/documents/get-a-document-by-id"},{"title":"Get a download URL for a document","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /documents/{id}/download","href":"/api-reference/documents/get-a-download-url-for-a-document"}]},{"group":"Payee checks","pages":[{"title":"Check a payee name","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /payee-checks","href":"/api-reference/payee-checks/check-a-payee-name"}]},{"group":"Whitelist Recipients","pages":[{"title":"List whitelist recipients for a customer","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/whitelist-recipients","href":"/api-reference/whitelist-recipients/list-whitelist-recipients-for-a-customer"},{"title":"Register an intercompany recipient for whitelisting","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/whitelist-recipients","href":"/api-reference/whitelist-recipients/register-an-intercompany-recipient-for-whitelisting"},{"title":"Get a whitelist recipient by id","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/whitelist-recipients/{id}","href":"/api-reference/whitelist-recipients/get-a-whitelist-recipient-by-id"},{"title":"Revoke a whitelist recipient","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json delete /customers/{customerId}/whitelist-recipients/{id}","href":"/api-reference/whitelist-recipients/revoke-a-whitelist-recipient"}]},{"group":"Orders","pages":[{"title":"List orders for the authenticated organization","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /orders","href":"/api-reference/orders/list-orders-for-the-authenticated-organization"},{"title":"Create an order","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /orders","href":"/api-reference/orders/create-an-order"},{"title":"List required recipient fields","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /orders/requirements","href":"/api-reference/orders/list-required-recipient-fields"},{"title":"Retrieve an order by id","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /orders/{id}","href":"/api-reference/orders/retrieve-an-order-by-id"},{"title":"Cancel a pending order","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /orders/{id}/cancel","href":"/api-reference/orders/cancel-a-pending-order"},{"title":"Execute a pending order","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /orders/{id}/execute","href":"/api-reference/orders/execute-a-pending-order"}]},{"group":"Asset Chain Pairs","pages":[{"title":"List offerable asset/chain pairs","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /asset-chain-pairs","href":"/api-reference/asset-chain-pairs/list-offerable-assetchain-pairs"}]},{"group":"Quotes","pages":[{"title":"Price a conversion, payout, or withdrawal","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /quotes","href":"/api-reference/quotes/price-a-conversion-payout-or-withdrawal"}]},{"group":"Webhook Endpoints","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /webhooks/endpoints","href":"/api-reference/webhook-endpoints/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /webhooks/endpoints","href":"/api-reference/webhook-endpoints/create-a-webhook-endpoint"},{"title":"Get a webhook endpoint by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /webhooks/endpoints/{id}","href":"/api-reference/webhook-endpoints/get-a-webhook-endpoint-by-id"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json delete /webhooks/endpoints/{id}","href":"/api-reference/webhook-endpoints/delete-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json patch /webhooks/endpoints/{id}","href":"/api-reference/webhook-endpoints/update-a-webhook-endpoint"},{"title":"Rotate a webhook endpoint's signing secret","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /webhooks/endpoints/{id}/rotate","href":"/api-reference/webhook-endpoints/rotate-a-webhook-endpoints-signing-secret"}]},{"group":"Webhook Deliveries","pages":[{"title":"List webhook deliveries","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /webhooks/deliveries","href":"/api-reference/webhook-deliveries/list-webhook-deliveries"},{"title":"Get a delivery by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /webhooks/deliveries/{id}","href":"/api-reference/webhook-deliveries/get-a-delivery-by-id"},{"title":"Retry a failed delivery","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /webhooks/deliveries/{id}/retry","href":"/api-reference/webhook-deliveries/retry-a-failed-delivery"}]},{"group":"Webhook Event Types","pages":[{"title":"List available webhook event types","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /webhooks/event-types","href":"/api-reference/webhook-event-types/list-available-webhook-event-types"}]},{"group":"Events","pages":[{"title":"List events","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /events","href":"/api-reference/events/list-events"},{"title":"Get an event by ID","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /events/{id}","href":"/api-reference/events/get-an-event-by-id"}]},{"group":"Features","pages":[{"title":"Submit a feature request","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /customers/{customerId}/features","href":"/api-reference/features/submit-a-feature-request"},{"title":"Discover feature requirements for a customer","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /customers/{customerId}/features/requirements","href":"/api-reference/features/discover-feature-requirements-for-a-customer"}]},{"group":"Customer Onboarding","pages":[{"title":"Submit a customer onboarding application","description":"Send the fields and documents that [Discover onboarding requirements](/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country) lists for the customer's `subjectType` and `country`: the country of `registeredAddress` for a business, or of the person's `address` for an individual. The examples show one body for a business and one for an individual. A `registeredAddress.country` that onboarding does not support returns `NOT_FOUND` with `supportedCountries`, the alpha-3 codes it supports.","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /onboarding","href":"/api-reference/customer-onboarding/submit-a-customer-onboarding-application"},{"title":"Discover onboarding requirements for a country","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /onboarding/requirements","href":"/api-reference/customer-onboarding/discover-onboarding-requirements-for-a-country"},{"title":"Discover selectable policy-subject catalog options for an axis","description":"Returns `{ key, label, description? }` entries for the requested `axis`, alphabetized by label with `OTHER` last. Only selectable, non-retired subjects are offered. `key` is the value to submit into `companyClassification.primaryIndustry` (axis=industry) or `businessActivity.regulatedOrRestrictedActivities` (axis=regulated_activity).","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /onboarding/policy-subjects","href":"/api-reference/customer-onboarding/discover-selectable-policy-subject-catalog-options-for-an-axis"}]},{"group":"Markup","pages":[{"title":"Accrued markup balances","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /markup/balances","href":"/api-reference/markup/accrued-markup-balances"},{"title":"Monthly markup statements","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /markup/statements","href":"/api-reference/markup/monthly-markup-statements"},{"title":"Markup statement lines","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json get /markup/statement-lines","href":"/api-reference/markup/markup-statement-lines"}]},{"group":"Sandbox","pages":[{"title":"Mark a sandbox customer as a house account","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json patch /sandbox/customers/{customerId}/house-account","href":"/api-reference/sandbox/mark-a-sandbox-customer-as-a-house-account"},{"title":"Reset a sandbox customer's wallet claim","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/customers/{customerId}/simulate-reset-claim","href":"/api-reference/sandbox/reset-a-sandbox-customers-wallet-claim"},{"title":"Resolve a registered address parked in screening review (sandbox only)","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/wallets/registered-addresses/{id}/simulate/compliance-decision","href":"/api-reference/sandbox/resolve-a-registered-address-parked-in-screening-review-sandbox-only"},{"title":"Simulate the compliance verdict on a sandbox application","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/applications/{id}/simulate/decision","href":"/api-reference/sandbox/simulate-the-compliance-verdict-on-a-sandbox-application"},{"title":"Simulate fiat-rail settlement for a sandbox payout","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/payouts/{id}/simulate/settled","href":"/api-reference/sandbox/simulate-fiat-rail-settlement-for-a-sandbox-payout"},{"title":"Simulate a Travel Rule counterparty webhook for a sandbox payout","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/payouts/{id}/simulate/counterparty-webhook","href":"/api-reference/sandbox/simulate-a-travel-rule-counterparty-webhook-for-a-sandbox-payout"},{"title":"Release a sandbox payout held for review","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/payouts/{id}/simulate-review-approve","href":"/api-reference/sandbox/release-a-sandbox-payout-held-for-review"},{"title":"Reject a sandbox payout held for review","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/payouts/{id}/simulate-review-reject","href":"/api-reference/sandbox/reject-a-sandbox-payout-held-for-review"},{"title":"Resolve a funding transfer held for compliance review (sandbox only)","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/orders/{orderId}/deposits/simulate/compliance-decision","href":"/api-reference/sandbox/resolve-a-funding-transfer-held-for-compliance-review-sandbox-only"},{"title":"Simulate an overall conversion failure for a sandbox order","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/orders/{id}/simulate/conversion-failed","href":"/api-reference/sandbox/simulate-an-overall-conversion-failure-for-a-sandbox-order"},{"title":"Simulate a transaction terminal outcome (sandbox only)","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/transactions/{id}/simulate/terminal","href":"/api-reference/sandbox/simulate-a-transaction-terminal-outcome-sandbox-only"},{"title":"Return a completed transaction from the bank (sandbox only)","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/transactions/{id}/simulate/return","href":"/api-reference/sandbox/return-a-completed-transaction-from-the-bank-sandbox-only"},{"title":"Resolve a transaction parked for compliance review (sandbox only)","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/transactions/{id}/simulate/compliance-decision","href":"/api-reference/sandbox/resolve-a-transaction-parked-for-compliance-review-sandbox-only"},{"title":"Simulate a fiat deposit to a sandbox virtual account","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/customers/{customerId}/virtual-accounts/{virtualAccountId}/deposits/simulate","href":"/api-reference/sandbox/simulate-a-fiat-deposit-to-a-sandbox-virtual-account"},{"title":"Simulate a Conduit compliance RFI on a sandbox customer","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/rfis/simulate","href":"/api-reference/sandbox/simulate-a-conduit-compliance-rfi-on-a-sandbox-customer"},{"title":"Simulate the resolution of a sandbox RFI","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/rfis/{id}/simulate/resolve","href":"/api-reference/sandbox/simulate-the-resolution-of-a-sandbox-rfi"},{"title":"Simulate a request for more information on a sandbox RFI","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/rfis/{id}/simulate/more-info","href":"/api-reference/sandbox/simulate-a-request-for-more-information-on-a-sandbox-rfi"},{"title":"Simulate compliance approval of a pending whitelist registration","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/whitelist-recipients/{id}/simulate-approve","href":"/api-reference/sandbox/simulate-compliance-approval-of-a-pending-whitelist-registration"},{"title":"Simulate compliance rejection of a pending whitelist registration","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/whitelist-recipients/{id}/simulate-reject","href":"/api-reference/sandbox/simulate-compliance-rejection-of-a-pending-whitelist-registration"},{"title":"Force a sandbox order's rate lock to expire immediately","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/orders/{id}/simulate/rate-lock-expired","href":"/api-reference/sandbox/force-a-sandbox-orders-rate-lock-to-expire-immediately"},{"title":"Simulate a Conduit restriction on a sandbox customer","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/customers/{customerId}/simulate/restrict","href":"/api-reference/sandbox/simulate-a-conduit-restriction-on-a-sandbox-customer"},{"title":"Simulate a lifted restriction on a sandbox customer","deprecated":null,"version":null,"openapi":"https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /sandbox/customers/{customerId}/simulate/lift-restriction","href":"/api-reference/sandbox/simulate-a-lifted-restriction-on-a-sandbox-customer"}]}]},{"tab":"KYB Reference","pages":[{"title":"KYB Reference","href":"/kyb/overview"}]}]},"basePath":"","title":"Discover onboarding requirements for a country - Conduit API","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","Page-C945cI-W.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}