Creates an individual (KYC) or a business (KYB), or imports either from a share token. userType is required on every non-import create — INDIVIDUAL or BUSINESS (with a company block). A missing userType fails fast with a single 400 ERRCUS_1000 rather than a flood of unrelated field errors. An import — a body carrying a shareToken — still treats userType as optional; identity comes from the token.
All field, questionnaire and custom-field errors are returned together in errors[], each with its own ERRCUS_* code, and if any is present nothing is written. Duplicate email (ERRCUS_1600), duplicate phone (ERRCUS_1601), restricted country (ERRCUS_1605) and a reused share token are checked afterwards, one at a time, and only once the fields are valid.
countryId and currencyId are ignored if sent (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO country and currency you send. Send only country (ISO 3166-1 alpha-3) and, if anything, currency (ISO 4217).
The API version this request targets. Required on every /api/v0/* call. Format YYYY-MM.<release>; 2026-09.1 is the latest. The version that served the request is echoed back on the response. Missing, malformed or unsupported values are rejected with 400.
Unique across all Endl users, not only your customers. Checked case-insensitively and stored lower-cased. A duplicate is 400 ERRCUS_1600 (A user with email '…' already exists, field email).
DD-MM-YYYY, with no leading or trailing spaces. Must be a real past date, and the customer must be at least 18. A value with surrounding spaces currently fails with a 500 instead of a 400.
The individual questionnaire. Every required item must be present and every coded value must come from the allowed list, or the whole request is rejected. Set on create only — it cannot be updated afterwards.
Contact phone in E.164 format — a leading + then 8–15 digits, e.g. +971500000000. Invalid → 400 ERRCUS_1017. Unique across all users, individual or business — a phone already used by another customer is 400 ERRCUS_1601.
Postal or ZIP code of the residential address. Required, except for countries with no postal-code system (ARE, HKG). Format-checked for USA, DEU, IND and GBR; for other countries any value is accepted. Missing → ERRCUS_1021; invalid for the country → ERRCUS_1022.
Individual imports only: identity fields that were ignored because identity came from the share token. Currently it also lists firstName, lastName and country, which are in fact stored. A business import returns no warnings.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Endl API","description":"Official API documentation for the Endl platform.","colors":{"primary":"#245FFE","light":"#5280FE","dark":"#013FE9"},"logo":{"light":"https://mintcdn.com/zaymentfinanceltd/vAyX8M6UjfgZPY1s/logo/endl-api-light-mode.svg?fit=max\u0026auto=format\u0026n=vAyX8M6UjfgZPY1s\u0026q=85\u0026s=317a3d2271242ccb4a73e8c8cc70884d","dark":"https://mintcdn.com/zaymentfinanceltd/vAyX8M6UjfgZPY1s/logo/endl-api-dark-mode.svg?fit=max\u0026auto=format\u0026n=vAyX8M6UjfgZPY1s\u0026q=85\u0026s=b136951611411c621ca45b782a881f95"},"favicon":"https://mintcdn.com/zaymentfinanceltd/vAyX8M6UjfgZPY1s/favicon.svg?fit=max\u0026auto=format\u0026n=vAyX8M6UjfgZPY1s\u0026q=85\u0026s=535b7fe6b8d30064c6319f5c6521341a","api":{"playground":{"proxy":false}},"footer":{"socials":{"website":"https://endl.io"}},"styling":{"eyebrows":"breadcrumbs","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"zaymentfinanceltd","hasAudioNarration":false,"actualSubdomain":"zaymentfinanceltd","customDomains":["docs.endl.io"],"gitSource":{"type":"github","owner":"endl-team","repo":"endl-api-documentation-repo","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adf033c8c0a1951943f3472","collectionId":"ee77d0eb-1dd7-4637-8099-0460519d2752","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adf033c8c0a1951943f3472"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6adf033c8c0a1951943f3472","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API reference","count":128},{"language":"default","tag":"Endpoints","count":123},{"language":"default","tag":"Cards","count":28},{"language":"default","tag":"POBO","count":16},{"language":"default","tag":"Webhooks","count":15},{"language":"default","tag":"Onboarding","count":14},{"language":"default","tag":"Guides","count":14},{"language":"default","tag":"Accounts","count":12},{"language":"default","tag":"Gift Cards","count":11},{"language":"default","tag":"Transactions","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#sidebar li[data-group-tag]>button{font-weight:600;background-color:rgba(100,116,139,.12);margin-bottom:2px}#sidebar li[data-group-tag]>button:hover{background-color:rgba(100,116,139,.2)}html.dark #sidebar li[data-group-tag]>button{background-color:rgba(148,163,184,.13)}html.dark #sidebar li[data-group-tag]>button:hover{background-color:rgba(148,163,184,.22)}#sidebar li[data-group-tag][data-active=true]>button{color:#013fe9;background-color:rgba(36,95,254,.16)}#sidebar li[data-group-tag][data-active=true]>button:hover{background-color:rgba(36,95,254,.22)}#sidebar li[data-group-tag][data-active=true]>button svg{color:#013fe9;opacity:1}html.dark #sidebar li[data-group-tag][data-active=true]>button{color:#5280fe;background-color:rgba(82,128,254,.22)}html.dark #sidebar li[data-group-tag][data-active=true]>button:hover{background-color:rgba(82,128,254,.3)}html.dark #sidebar li[data-group-tag][data-active=true]>button svg{color:#5280fe;opacity:1}#sidebar a[aria-current=page]{position:relative;font-weight:600;background-color:rgba(36,95,254,.16)}#sidebar a[aria-current=page]::before{content:\"\";position:absolute;left:0;top:.3rem;bottom:.3rem;width:3px;border-radius:0 2px 2px 0;background:#245ffe}html.dark #sidebar a[aria-current=page]{background-color:rgba(82,128,254,.22)}html.dark #sidebar a[aria-current=page]::before{background:#5280fe}#sidebar a[aria-current=page] span{opacity:1}body:has([role=dialog]) #search-bar-entry{visibility:hidden}body:has([role=dialog])::before{content:\"\";position:fixed;inset:0;z-index:30;background:rgba(2,6,23,.45);backdrop-filter:blur(2px);pointer-events:none}a[href*=\"utm_campaign=poweredBy\"]{display:none!important}"}],"page":{"pagePath":"api-reference/onboarding/create-customer","slug":"/api-reference/onboarding/create-customer","pageMetadata":{"title":"Create customer","openapi":"api-reference/endl-onboarding-api.json POST /api/v0/customer","description":"Creates an individual (KYC) or a business (KYB), or imports either from a share token. **`userType` is required** on every non-import create — `INDIVIDUAL` or `BUSINESS` (with a `company` block). A missing `userType` fails fast with a single `400 ERRCUS_1000` rather than a flood of unrelated field errors. An import — a body carrying a `shareToken` — still treats `userType` as optional; identity comes from the token.\n\nAll field, questionnaire and custom-field errors are returned together in `errors[]`, each with its own `ERRCUS_*` code, and if any is present nothing is written. Duplicate email (`ERRCUS_1600`), duplicate phone (`ERRCUS_1601`), restricted country (`ERRCUS_1605`) and a reused share token are checked afterwards, one at a time, and only once the fields are valid.\n\n\u003cNote>\n`countryId` and `currencyId` are **ignored if sent** (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO `country` and `currency` you send. Send only `country` (ISO 3166-1 alpha-3) and, if anything, `currency` (ISO 4217).\n\u003c/Note>","href":"/api-reference/onboarding/create-customer"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n }, {Note} = _components;\n if (!Note) _missingMdxReference(\"Note\", true);\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates an individual (KYC) or a business (KYB), or imports either from a share token. \", _jsxs(_components.strong, {\n children: [_jsx(_components.code, {\n children: \"userType\"\n }), \" is required\"]\n }), \" on every non-import create — \", _jsx(_components.code, {\n children: \"INDIVIDUAL\"\n }), \" or \", _jsx(_components.code, {\n children: \"BUSINESS\"\n }), \" (with a \", _jsx(_components.code, {\n children: \"company\"\n }), \" block). A missing \", _jsx(_components.code, {\n children: \"userType\"\n }), \" fails fast with a single \", _jsx(_components.code, {\n children: \"400 ERRCUS_1000\"\n }), \" rather than a flood of unrelated field errors. An import — a body carrying a \", _jsx(_components.code, {\n children: \"shareToken\"\n }), \" — still treats \", _jsx(_components.code, {\n children: \"userType\"\n }), \" as optional; identity comes from the token.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"All field, questionnaire and custom-field errors are returned together in \", _jsx(_components.code, {\n children: \"errors[]\"\n }), \", each with its own \", _jsx(_components.code, {\n children: \"ERRCUS_*\"\n }), \" code, and if any is present nothing is written. Duplicate email (\", _jsx(_components.code, {\n children: \"ERRCUS_1600\"\n }), \"), duplicate phone (\", _jsx(_components.code, {\n children: \"ERRCUS_1601\"\n }), \"), restricted country (\", _jsx(_components.code, {\n children: \"ERRCUS_1605\"\n }), \") and a reused share token are checked afterwards, one at a time, and only once the fields are valid.\"]\n }), \"\\n\", _jsx(Note, {\n children: _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"countryId\"\n }), \" and \", _jsx(_components.code, {\n children: \"currencyId\"\n }), \" are \", _jsx(_components.strong, {\n children: \"ignored if sent\"\n }), \" (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO \", _jsx(_components.code, {\n children: \"country\"\n }), \" and \", _jsx(_components.code, {\n children: \"currency\"\n }), \" you send. Send only \", _jsx(_components.code, {\n children: \"country\"\n }), \" (ISO 3166-1 alpha-3) and, if anything, \", _jsx(_components.code, {\n children: \"currency\"\n }), \" (ISO 4217).\"]\n })\n })]\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};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\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":"Create customer","openapi":"api-reference/endl-onboarding-api.json POST /api/v0/customer","description":"Creates an individual (KYC) or a business (KYB), or imports either from a share token. **`userType` is required** on every non-import create — `INDIVIDUAL` or `BUSINESS` (with a `company` block). A missing `userType` fails fast with a single `400 ERRCUS_1000` rather than a flood of unrelated field errors. An import — a body carrying a `shareToken` — still treats `userType` as optional; identity comes from the token.\n\nAll field, questionnaire and custom-field errors are returned together in `errors[]`, each with its own `ERRCUS_*` code, and if any is present nothing is written. Duplicate email (`ERRCUS_1600`), duplicate phone (`ERRCUS_1601`), restricted country (`ERRCUS_1605`) and a reused share token are checked afterwards, one at a time, and only once the fields are valid.\n\n\u003cNote>\n`countryId` and `currencyId` are **ignored if sent** (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO `country` and `currency` you send. Send only `country` (ISO 3166-1 alpha-3) and, if anything, `currency` (ISO 4217).\n\u003c/Note>","href":"/api-reference/onboarding/create-customer"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/zaymentfinanceltd/d373d43d77eb6813/custom.js"],"openApiReferenceData":{"operation":{"tags":["Customers"],"summary":"Create customer","description":"Creates an individual (KYC) or a business (KYB), or imports either from a share token. **`userType` is required** on every non-import create — `INDIVIDUAL` or `BUSINESS` (with a `company` block). A missing `userType` fails fast with a single `400 ERRCUS_1000` rather than a flood of unrelated field errors. An import — a body carrying a `shareToken` — still treats `userType` as optional; identity comes from the token.\n\nAll field, questionnaire and custom-field errors are returned together in `errors[]`, each with its own `ERRCUS_*` code, and if any is present nothing is written. Duplicate email (`ERRCUS_1600`), duplicate phone (`ERRCUS_1601`), restricted country (`ERRCUS_1605`) and a reused share token are checked afterwards, one at a time, and only once the fields are valid.\n\n\u003cNote>\n`countryId` and `currencyId` are **ignored if sent** (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO `country` and `currency` you send. Send only `country` (ISO 3166-1 alpha-3) and, if anything, `currency` (ISO 4217).\n\u003c/Note>","requestBody":"61157546-e1f5-4c5b-9c72-e608a72271ed","responses":{"201":"ec8a498e-cddf-4ecd-bf19-8485a8a1e911","400":"42a4092e-8cc0-4660-9f58-1eeceeef9fca","401":"69d607d8-d6c0-48ac-9aa9-f2c624d0278e","403":"53a01ada-6a88-4614-b0d0-e9d2d079f0e5","409":"d3a88019-c653-42f2-a4ce-8cb22e1d09ca","415":"d6a62f4f-2bce-4159-a561-3390efbd7296","422":"2272ebad-49d0-4fcb-a3e9-c5ed46f0be27","429":"88e7f4c4-ab1b-40ca-97ec-80af8c9145a7","500":"9fe2de91-88cb-4c5e-a241-698b11dc7e88","503":"f7494c22-2804-4401-89bf-1fc8c5e5a02a"},"parameters":["3ad5e81e-7129-41f8-a247-b62cfffd1f09"],"method":"post","type":"path","servers":["37c63d84-a005-42c0-957e-5c477f6f275a"],"security":["b7af5553-4e71-4fd9-bf44-1c601740d8f0"],"path":"/api/v0/customer","baseUrlOptions":["https://api-sandbox.endl.io"],"title":"Create customer","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","disableProxy":true},"dependencies":{"parameters":{"3ad5e81e-7129-41f8-a247-b62cfffd1f09":{"name":"Api-Version","in":"header","required":true,"description":"The API version this request targets. Required on every `/api/v0/*` call. Format `YYYY-MM.\u003crelease>`; `2026-09.1` is the latest. The version that served the request is echoed back on the response. Missing, malformed or unsupported values are rejected with `400`.","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}\\.\\d+$","default":"2026-09.1","isRequired":true,"description":"The API version this request targets. Required on every `/api/v0/*` call. Format `YYYY-MM.\u003crelease>`; `2026-09.1` is the latest. The version that served the request is echoed back on the response. Missing, malformed or unsupported values are rejected with `400`.","uniqueKey":"","typeLabel":"string"},"example":"2026-09.1"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["userType","email","firstName","lastName","dateOfBirth","country","addressLine1","city","state","questionnaire","customFields"],"properties":{"userType":{"type":"string","enum":["INDIVIDUAL"],"description":"**Required** on every non-import create. Missing → `400 ERRCUS_1000` (`userType is required`); a value other than `INDIVIDUAL` on this path → `ERRCUS_1001`.","isRequired":true,"uniqueKey":"oneOf.0.userType","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Unique across all Endl users, not only your customers. Checked case-insensitively and stored lower-cased. A duplicate is `400 ERRCUS_1600` (`A user with email '…' already exists`, field `email`).","isRequired":true,"uniqueKey":"oneOf.0.email","typeLabel":"string\u003cemail>"},"firstName":{"type":"string","maxLength":100,"description":"The customer's given name, as it appears on their identity document.","isRequired":true,"uniqueKey":"oneOf.0.firstName","typeLabel":"string"},"lastName":{"type":"string","maxLength":100,"description":"The customer's family name, as it appears on their identity document.","isRequired":true,"uniqueKey":"oneOf.0.lastName","typeLabel":"string"},"dateOfBirth":{"type":"string","description":"`DD-MM-YYYY`, with no leading or trailing spaces. Must be a real past date, and the customer must be at least 18. A value with surrounding spaces currently fails with a `500` instead of a `400`.","isRequired":true,"uniqueKey":"oneOf.0.dateOfBirth","typeLabel":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-3, e.g. `ARE`.","isRequired":true,"uniqueKey":"oneOf.0.country","typeLabel":"string"},"addressLine1":{"type":"string","description":"First line of the residential address. **Required** — the proof-of-address document is checked against it. Missing → `ERRCUS_1018`.","isRequired":true,"uniqueKey":"oneOf.0.addressLine1","typeLabel":"string"},"city":{"type":"string","description":"Town or city of residence. **Required.** Missing → `ERRCUS_1019`.","isRequired":true,"uniqueKey":"oneOf.0.city","typeLabel":"string"},"state":{"type":"string","description":"State, province or emirate of residence. **Required.** Missing → `ERRCUS_1020`.","isRequired":true,"uniqueKey":"oneOf.0.state","typeLabel":"string"},"questionnaire":{"type":"object","description":"The individual questionnaire. Every required item must be present and every coded value must come from the allowed list, or the whole request is rejected. Set on create only — it **cannot be updated** afterwards.","properties":{"sections":{"type":"object","additionalProperties":true,"description":"One key per questionnaire section, each holding an `items` object. See the questionnaire reference for every section, item and accepted code.","uniqueKey":"oneOf.0.questionnaire.sections","typeLabel":"object"}},"isRequired":true,"uniqueKey":"oneOf.0.questionnaire","typeLabel":"object"},"customFields":{"type":"object","required":["nationalIdNumber","whatsappNumber"],"properties":{"nationalIdNumber":{"type":"string","description":"The customer's national ID card number.","isRequired":true,"uniqueKey":"oneOf.0.customFields.nationalIdNumber","typeLabel":"string"},"whatsappNumber":{"type":"string","description":"Include the country code.","isRequired":true,"uniqueKey":"oneOf.0.customFields.whatsappNumber","typeLabel":"string"},"telegramId":{"type":"string","description":"Telegram handle, e.g. `@janedoe`.","uniqueKey":"oneOf.0.customFields.telegramId","typeLabel":"string"}},"description":"Partner-specific fields collected alongside the questionnaire. `nationalIdNumber` and `whatsappNumber` are required; an unrecognised key is rejected.","isRequired":true,"uniqueKey":"oneOf.0.customFields","typeLabel":"object"},"phone":{"type":"string","description":"Contact phone in **E.164 format** — a leading `+` then 8–15 digits, e.g. `+971500000000`. Invalid → `400 ERRCUS_1017`. **Unique across all users**, individual or business — a phone already used by another customer is `400 ERRCUS_1601`.","pattern":"^\\+[1-9]\\d{7,14}$","example":"+971500000000","uniqueKey":"oneOf.0.phone","typeLabel":"string"},"nationality":{"type":"string","description":"ISO alpha-3. Defaults to `country`.","uniqueKey":"oneOf.0.nationality","typeLabel":"string"},"gender":{"type":"string","enum":["M","F"],"description":"`M` or `F`. Any other value is rejected.","uniqueKey":"oneOf.0.gender","typeLabel":"enum\u003cstring>"},"tin":{"type":"string","description":"Taxpayer identification number.","uniqueKey":"oneOf.0.tin","typeLabel":"string"},"taxResidenceCountry":{"type":"string","description":"ISO alpha-3.","uniqueKey":"oneOf.0.taxResidenceCountry","typeLabel":"string"},"placeOfBirth":{"type":"string","description":"Town or city of birth.","uniqueKey":"oneOf.0.placeOfBirth","typeLabel":"string"},"addressLine2":{"type":"string","description":"Second line of the residential address. Optional.","uniqueKey":"oneOf.0.addressLine2","typeLabel":"string"},"postalCode":{"type":"string","description":"Postal or ZIP code of the residential address. **Required, except for countries with no postal-code system (`ARE`, `HKG`).** Format-checked for `USA`, `DEU`, `IND` and `GBR`; for other countries any value is accepted. Missing → `ERRCUS_1021`; invalid for the country → `ERRCUS_1022`.","uniqueKey":"oneOf.0.postalCode","typeLabel":"string"},"externalReferenceId":{"type":"string","description":"Your own reference. Accepted but neither stored nor returned. Keep your own mapping to the returned `userId`.","uniqueKey":"oneOf.0.externalReferenceId","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["userType","company","beneficiaries","questionnaire"],"properties":{"userType":{"type":"string","enum":["BUSINESS"],"description":"Must be `BUSINESS`. Its presence is what makes this a KYB creation rather than an individual.","isRequired":true,"uniqueKey":"oneOf.1.userType","typeLabel":"enum\u003cstring>"},"company":{"type":"object","required":["companyName","registrationNumber","type","country","email","phone","website","taxId","incorporatedOn","address"],"properties":{"companyName":{"type":"string","description":"Registered legal name of the company.","isRequired":true,"uniqueKey":"oneOf.1.company.companyName","typeLabel":"string"},"registrationNumber":{"type":"string","description":"Company registration number in its country of incorporation.","isRequired":true,"uniqueKey":"oneOf.1.company.registrationNumber","typeLabel":"string"},"country":{"type":"string","description":"ISO alpha-3.","isRequired":true,"uniqueKey":"oneOf.1.company.country","typeLabel":"string"},"email":{"type":"string","format":"email","description":"Company contact email. Unique — this is the account key. A duplicate is `400 ERRCUS_1600`, field `company.email`.","isRequired":true,"uniqueKey":"oneOf.1.company.email","typeLabel":"string\u003cemail>"},"type":{"type":"string","description":"**Required.** One of `LLC`, `CORPORATION`, `PARTNERSHIP`, `SOLE_PROPRIETORSHIP`, `TRUST`, `NON_PROFIT` (case-insensitive). Missing → `ERRCUS_1103`; anything else → `ERRCUS_1104`.","enum":["LLC","CORPORATION","PARTNERSHIP","SOLE_PROPRIETORSHIP","TRUST","NON_PROFIT"],"isRequired":true,"uniqueKey":"oneOf.1.company.type","typeLabel":"enum\u003cstring>"},"website":{"type":"string","description":"**Required.** An `http(s)://…` URL. Missing → `ERRCUS_1107`; invalid → `ERRCUS_1108`.","isRequired":true,"uniqueKey":"oneOf.1.company.website","typeLabel":"string"},"taxId":{"type":"string","description":"**Required.** Company tax identification number. Missing → `ERRCUS_1109`.","isRequired":true,"uniqueKey":"oneOf.1.company.taxId","typeLabel":"string"},"incorporatedOn":{"type":"string","description":"**Required.** Date of incorporation, `DD-MM-YYYY`, not in the future. Missing → `ERRCUS_1112`; bad format → `ERRCUS_1113`; in the future → `ERRCUS_1114`.","example":"14-03-2019","isRequired":true,"uniqueKey":"oneOf.1.company.incorporatedOn","typeLabel":"string"},"phone":{"type":"string","description":"**Required.** E.164 — a leading `+` then 8–15 digits, e.g. `+971500000000`. Missing → `ERRCUS_1105`; invalid → `ERRCUS_1106`. **Unique across all users**, individual or business — a phone already used by any non-deleted customer is `400 ERRCUS_1601` (`A user with phone '…' already exists`, field `company.phone`).","pattern":"^\\+[1-9]\\d{7,14}$","example":"+971500000000","isRequired":true,"uniqueKey":"oneOf.1.company.phone","typeLabel":"string"},"address":{"type":"object","properties":{"street":{"type":"string","description":"Street address, including building number.","uniqueKey":"oneOf.1.company.address.street","typeLabel":"string"},"town":{"type":"string","description":"Town or city.","uniqueKey":"oneOf.1.company.address.town","typeLabel":"string"},"state":{"type":"string","description":"State, province or emirate.","uniqueKey":"oneOf.1.company.address.state","typeLabel":"string"},"postCode":{"type":"string","description":"Postal or ZIP code.","uniqueKey":"oneOf.1.company.address.postCode","typeLabel":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-3.","uniqueKey":"oneOf.1.company.address.country","typeLabel":"string"}},"description":"**Required.** `street`, `town`, `state`, `postCode` and `country` are all required (`subStreet` is optional); `postCode` is not required for `ARE` and `HKG`. A missing address is `ERRCUS_1117` (`company.address is required`). A missing sub-field is `ERRCUS_1118`–`1121` or `1123` (`company.address.street is required`, and so on). An invalid `postCode` is `ERRCUS_1122`, and an invalid `address.country` is `ERRCUS_1124`. `postCode` is format-checked for `USA`, `DEU`, `IND` and `GBR` only.","isRequired":true,"uniqueKey":"oneOf.1.company.address","typeLabel":"object"}},"description":"The company being onboarded. Its `email` is the account key and must be unique.","isRequired":true,"uniqueKey":"oneOf.1.company","typeLabel":"object"},"beneficiaries":{"type":"array","minItems":1,"description":"Beneficial owners (UBOs). At least one is required (`ERRCUS_1200`), at least one must be a UBO (`ERRCUS_1201`), and `shareSize` must not total over 100 (`ERRCUS_1202`). **Only `ubo` is supported** — `director` is no longer accepted.","items":{"type":"object","required":["firstName","lastName","email","country","dob","address"],"properties":{"firstName":{"type":"string","description":"The owner's given name, as it appears on their identity document.","isRequired":true,"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].firstName","typeLabel":"string"},"lastName":{"type":"string","description":"The owner's family name, as it appears on their identity document.","isRequired":true,"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].lastName","typeLabel":"string"},"email":{"type":"string","format":"email","description":"The owner's contact email. Beneficiaries are matched by email (case-insensitive): entries that share an email are merged into one owner, keeping the first entry's details and returning one `applicantId`. Send each person once.","isRequired":true,"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].email","typeLabel":"string\u003cemail>"},"country":{"type":"string","description":"ISO alpha-3.","isRequired":true,"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].country","typeLabel":"string"},"dob":{"type":"string","description":"**Required.** `DD-MM-YYYY`, not in the future. Missing → `ERRCUS_1208`; bad format → `ERRCUS_1209`; in the future → `ERRCUS_1210`.","isRequired":true,"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].dob","typeLabel":"string"},"address":{"type":"object","properties":{"street":{"type":"string","description":"Street address, including building number.","uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].address.street","typeLabel":"string"},"town":{"type":"string","description":"Town or city.","uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].address.town","typeLabel":"string"},"state":{"type":"string","description":"State, province or emirate.","uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].address.state","typeLabel":"string"},"postCode":{"type":"string","description":"Postal or ZIP code.","uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].address.postCode","typeLabel":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-3.","uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].address.country","typeLabel":"string"}},"description":"**Required for every beneficiary**, with the same sub-fields as the company address. Missing is `ERRCUS_1215` (`beneficiaries[0].address is required`).","isRequired":true,"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].address","typeLabel":"object"},"shareSize":{"type":"number","minimum":0,"maximum":100,"description":"The sum across beneficiaries must not exceed 100.","uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].shareSize","typeLabel":"number"},"types":{"type":"array","items":{"type":"string","enum":["ubo"],"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].types.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"**Only `ubo` is supported.** Empty or omitted defaults to `[\"ubo\"]`. Any other value — including `director`, in any letter case — is rejected with `400 ERRCUS_1214` before anything is created: `beneficiaries[1].types must be a subset of [ubo]; 'director' is not supported`.","uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].types","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"oneOf.1.beneficiaries","typeLabel":"object[]"},"questionnaire":{"type":"object","description":"The business questionnaire. Every required item must be present and every coded value must come from the allowed list.","properties":{"sections":{"type":"object","additionalProperties":true,"description":"One key per questionnaire section, each holding an `items` object. See the questionnaire reference for every section, item and accepted code.","uniqueKey":"oneOf.1.questionnaire.sections","typeLabel":"object"}},"isRequired":true,"uniqueKey":"oneOf.1.questionnaire","typeLabel":"object"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","required":["shareToken","email"],"properties":{"shareToken":{"type":"string","description":"A single-use `_act-…` share token. Identity comes from the token. `country` is validated (`ERRCUS_1013`), checked against country restrictions (`ERRCUS_1605`) and stored; `firstName` and `lastName` are stored and returned by Get customer. All other identity fields are ignored and listed in `warnings`. Note: `warnings` currently still lists `firstName`, `lastName` and `country` as well. `warnings` is returned on individual imports only — a business import returns no `warnings`.","isRequired":true,"uniqueKey":"oneOf.2.shareToken","typeLabel":"string"},"email":{"type":"string","format":"email","description":"Contact email for the imported customer. Required even though the rest of the identity comes from the token.","isRequired":true,"uniqueKey":"oneOf.2.email","typeLabel":"string\u003cemail>"},"userType":{"type":"string","enum":["INDIVIDUAL","BUSINESS"],"description":"`BUSINESS` imports a company; omit it or send `INDIVIDUAL` for a person. Optional on import — identity comes from the token.","uniqueKey":"oneOf.2.userType","typeLabel":"enum\u003cstring>"},"firstName":{"type":"string","description":"Stored and returned by Get customer.","uniqueKey":"oneOf.2.firstName","typeLabel":"string"},"lastName":{"type":"string","description":"Stored and returned by Get customer.","uniqueKey":"oneOf.2.lastName","typeLabel":"string"},"companyName":{"type":"string","description":"Required when `userType` is `BUSINESS`. Missing → `ERRCUS_1125`.","uniqueKey":"oneOf.2.companyName","typeLabel":"string"},"country":{"type":"string","description":"ISO alpha-3. Validated (`ERRCUS_1013`), checked against country restrictions (`ERRCUS_1605`) and stored.","uniqueKey":"oneOf.2.country","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"userType":"INDIVIDUAL","email":"jane.doe@example.com","firstName":"Jane","lastName":"Doe","phone":"+971500000000","dateOfBirth":"01-01-1990","country":"ARE","nationality":"ARE","gender":"F","addressLine1":"Office 1201, Marina Plaza","city":"Dubai","state":"Dubai","externalReferenceId":"partner-ref-001","questionnaire":{"sections":{"profileDetails":{"items":{"occupation":{"value":"15-1132"},"annualSalary":{"value":"50000_100000"},"accountPurpose":{"value":"payroll"},"expectedMonthlyVolume":{"value":"0_10000"}}},"birthNationalityTaxI":{"items":{"countryOfBirth":{"value":"ARE"},"cityOfBirth":{"value":"Dubai"},"nationalities":{"values":["ARE"]},"taxRegistrationsOuts":{"value":"no"}}}}},"customFields":{"nationalIdNumber":"784-1990-1234567-1","whatsappNumber":"+971500000000","telegramId":"@janedoe"}},"examples":{"Example":{"title":"Example","value":{"userType":"INDIVIDUAL","email":"jane.doe@example.com","firstName":"Jane","lastName":"Doe","phone":"+971500000000","dateOfBirth":"01-01-1990","country":"ARE","nationality":"ARE","gender":"F","addressLine1":"Office 1201, Marina Plaza","city":"Dubai","state":"Dubai","externalReferenceId":"partner-ref-001","questionnaire":{"sections":{"profileDetails":{"items":{"occupation":{"value":"15-1132"},"annualSalary":{"value":"50000_100000"},"accountPurpose":{"value":"payroll"},"expectedMonthlyVolume":{"value":"0_10000"}}},"birthNationalityTaxI":{"items":{"countryOfBirth":{"value":"ARE"},"cityOfBirth":{"value":"Dubai"},"nationalities":{"values":["ARE"]},"taxRegistrationsOuts":{"value":"no"}}}}},"customFields":{"nationalIdNumber":"784-1990-1234567-1","whatsappNumber":"+971500000000","telegramId":"@janedoe"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"ec8a498e-cddf-4ecd-bf19-8485a8a1e911":{"description":"Customer created or imported.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"userId":{"type":"string","description":"Endl's customer **reference id** — a `cus_`-prefixed string, not a UUID. Save it: it goes in every later `/api/v0/customer/{userId}` URL.","example":"cus_PWEhqXkPKpWXiFd96jGq","uniqueKey":"oneOf.0.userId","typeLabel":"string"},"userType":{"type":"string","example":"INDIVIDUAL","description":"`INDIVIDUAL`.","uniqueKey":"oneOf.0.userType","typeLabel":"string"},"status":{"type":"string","example":"INITIATED","description":"On a direct create: `INITIATED` until documents are submitted. On an import: the copied review outcome, which is `COMPLETED`, `REJECTED` or `PENDING`.","uniqueKey":"oneOf.0.status","typeLabel":"string"},"warnings":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.warnings.items.[INDEX]","typeLabel":"string"},"description":"Individual imports only: identity fields that were ignored because identity came from the share token. Currently it also lists `firstName`, `lastName` and `country`, which are in fact stored. A business import returns no `warnings`.","uniqueKey":"oneOf.0.warnings","typeLabel":"string[]"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","properties":{"userId":{"type":"string","description":"Endl's customer **reference id** — a `cus_`-prefixed string, not a UUID. Save it: it goes in every later `/api/v0/customer/{userId}` URL. This is the id for the business.","example":"cus_PWEhqXkPKpWXiFd96jGq","uniqueKey":"oneOf.1.userId","typeLabel":"string"},"userType":{"type":"string","example":"BUSINESS","description":"`BUSINESS`.","uniqueKey":"oneOf.1.userType","typeLabel":"string"},"status":{"type":"string","example":"INITIATED","description":"On a direct create: `INITIATED` until documents are submitted. On an import: the copied review outcome, which is `COMPLETED`, `REJECTED` or `PENDING`.","uniqueKey":"oneOf.1.status","typeLabel":"string"},"companyApplicantId":{"type":"string","description":"The verification provider's applicant id for the company itself.","uniqueKey":"oneOf.1.companyApplicantId","typeLabel":"string"},"beneficiaries":{"type":"array","items":{"type":"object","properties":{"applicantId":{"type":"string","description":"The owner's `uboRef`, used for that owner's document uploads. Always present.","isRequired":true,"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].applicantId","typeLabel":"string"},"status":{"type":"string","description":"That owner's document-upload status — always `PENDING` at this point. It becomes `UPLOADED` once the owner's documents are uploaded. It is not a verification result; use the top-level `status`.","isRequired":true,"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].status","typeLabel":"string"},"email":{"type":"string","description":"The owner's contact email. Included when available, otherwise omitted.","uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].email","typeLabel":"string"},"shareSize":{"type":"number","description":"The owner's shareholding percentage. Included when available, otherwise omitted.","uniqueKey":"oneOf.1.beneficiaries.items.[INDEX].shareSize","typeLabel":"number"}},"required":["applicantId","status"],"uniqueKey":"oneOf.1.beneficiaries.items.[INDEX]","typeLabel":"object"},"description":"Beneficial owners (UBOs), each with its own `applicantId` and `status`. The same shape on a create and on a business import.","uniqueKey":"oneOf.1.beneficiaries","typeLabel":"object[]"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"userId":"cus_PWEhqXkPKpWXiFd96jGq","userType":"INDIVIDUAL","status":"INITIATED"},"examples":{"Example":{"title":"Example","value":{"userId":"cus_PWEhqXkPKpWXiFd96jGq","userType":"INDIVIDUAL","status":"INITIATED"}}},"exampleType":"examples"}},"exampleType":"examples"},"42a4092e-8cc0-4660-9f58-1eeceeef9fca":{"description":"Validation failed. Field, questionnaire and custom-field problems are returned together, each with its own `ERRCUS_*` code and the offending `field`; nothing is created. See the [onboarding error catalogue](/api-reference/onboarding/errors#onboarding-error-codes). Body problems: a missing or unparseable body is `400 ERRCORE_1001` (`Malformed or missing request body`); a body that is valid JSON but not an object (e.g. `[]`) is `ERRCUS_1500`; a field with the wrong JSON type is `ERRCUS_1501`.","content":{"application/json":{"schema":{"type":"object","description":"Every onboarding error, for every status code, uses this one envelope. `errors[]` holds one entry per problem — field, questionnaire and custom-field errors are reported together, and nothing is created when any is present. **Branch on `errors[].code`, never on the message.**","properties":{"code":{"type":"integer","description":"The HTTP status, as an integer.","example":400,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","description":"A summary of the failure.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"string","enum":["ERROR"],"description":"Always `ERROR`.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"null","description":"Always `null`.","uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","description":"One entry per problem.","items":{"type":"object","properties":{"code":{"type":"string","description":"A frozen catalogue code — `ERRCUS_*` for onboarding errors, `ERRCORE_*` / `ERRREF_*` / `ERRCOMP_*` otherwise. Codes are never renumbered, reused or removed.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"The specific reason.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"code":400,"message":"Onboarding validation failed","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1003","message":"email must be a valid email address","field":"email"},{"code":"ERRCUS_1018","message":"addressLine1 is required","field":"addressLine1"}]},"examples":{"Example":{"title":"Example","value":{"code":400,"message":"Onboarding validation failed","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1003","message":"email must be a valid email address","field":"email"},{"code":"ERRCUS_1018","message":"addressLine1 is required","field":"addressLine1"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"69d607d8-d6c0-48ac-9aa9-f2c624d0278e":{"description":"Missing or invalid `API-KEY` — `ERRCORE_1004`.","content":{"application/json":{"schema":{"type":"object","description":"Every onboarding error, for every status code, uses this one envelope. `errors[]` holds one entry per problem — field, questionnaire and custom-field errors are reported together, and nothing is created when any is present. **Branch on `errors[].code`, never on the message.**","properties":{"code":{"type":"integer","description":"The HTTP status, as an integer.","example":400,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","description":"A summary of the failure.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"string","enum":["ERROR"],"description":"Always `ERROR`.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"null","description":"Always `null`.","uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","description":"One entry per problem.","items":{"type":"object","properties":{"code":{"type":"string","description":"A frozen catalogue code — `ERRCUS_*` for onboarding errors, `ERRCORE_*` / `ERRREF_*` / `ERRCOMP_*` otherwise. Codes are never renumbered, reused or removed.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"The specific reason.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"code":401,"message":"Invalid API key","status":"ERROR","data":null,"errors":[{"code":"ERRCORE_1004","message":"Invalid API key","field":null}]},"examples":{"Example":{"title":"Example","value":{"code":401,"message":"Invalid API key","status":"ERROR","data":null,"errors":[{"code":"ERRCORE_1004","message":"Invalid API key","field":null}]}}},"exampleType":"examples"}},"exampleType":"examples"},"53a01ada-6a88-4614-b0d0-e9d2d079f0e5":{"description":"`ERRCUS_1605` — onboarding is not permitted for this country; checked after field validation and the uniqueness checks, just before anything is created. A key without the `customers` permission is `ERRCORE_1005`.","content":{"application/json":{"schema":{"type":"object","description":"Every onboarding error, for every status code, uses this one envelope. `errors[]` holds one entry per problem — field, questionnaire and custom-field errors are reported together, and nothing is created when any is present. **Branch on `errors[].code`, never on the message.**","properties":{"code":{"type":"integer","description":"The HTTP status, as an integer.","example":400,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","description":"A summary of the failure.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"string","enum":["ERROR"],"description":"Always `ERROR`.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"null","description":"Always `null`.","uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","description":"One entry per problem.","items":{"type":"object","properties":{"code":{"type":"string","description":"A frozen catalogue code — `ERRCUS_*` for onboarding errors, `ERRCORE_*` / `ERRREF_*` / `ERRCOMP_*` otherwise. Codes are never renumbered, reused or removed.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"The specific reason.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"code":403,"message":"Country not permitted","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1605","message":"Onboarding is not permitted for this country","field":null}]},"examples":{"Example":{"title":"Example","value":{"code":403,"message":"Country not permitted","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1605","message":"Onboarding is not permitted for this country","field":null}]}}},"exampleType":"examples"}},"exampleType":"examples"},"d3a88019-c653-42f2-a4ce-8cb22e1d09ca":{"description":"`ERRCUS_1602` — a concurrent create or import retry for the same email. A duplicate email on a normal create is `400 ERRCUS_1600` instead.","content":{"application/json":{"schema":{"type":"object","description":"Every onboarding error, for every status code, uses this one envelope. `errors[]` holds one entry per problem — field, questionnaire and custom-field errors are reported together, and nothing is created when any is present. **Branch on `errors[].code`, never on the message.**","properties":{"code":{"type":"integer","description":"The HTTP status, as an integer.","example":400,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","description":"A summary of the failure.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"string","enum":["ERROR"],"description":"Always `ERROR`.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"null","description":"Always `null`.","uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","description":"One entry per problem.","items":{"type":"object","properties":{"code":{"type":"string","description":"A frozen catalogue code — `ERRCUS_*` for onboarding errors, `ERRCORE_*` / `ERRREF_*` / `ERRCOMP_*` otherwise. Codes are never renumbered, reused or removed.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"The specific reason.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":400,"message":"\u003cstring>","status":"ERROR","data":null,"errors":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"d6a62f4f-2bce-4159-a561-3390efbd7296":{"description":"Unsupported media type — send `application/json`.","content":{"application/json":{"schema":{"type":"object","description":"Every onboarding error, for every status code, uses this one envelope. `errors[]` holds one entry per problem — field, questionnaire and custom-field errors are reported together, and nothing is created when any is present. **Branch on `errors[].code`, never on the message.**","properties":{"code":{"type":"integer","description":"The HTTP status, as an integer.","example":400,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","description":"A summary of the failure.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"string","enum":["ERROR"],"description":"Always `ERROR`.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"null","description":"Always `null`.","uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","description":"One entry per problem.","items":{"type":"object","properties":{"code":{"type":"string","description":"A frozen catalogue code — `ERRCUS_*` for onboarding errors, `ERRCORE_*` / `ERRREF_*` / `ERRCOMP_*` otherwise. Codes are never renumbered, reused or removed.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"The specific reason.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":400,"message":"\u003cstring>","status":"ERROR","data":null,"errors":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"2272ebad-49d0-4fcb-a3e9-c5ed46f0be27":{"description":"`ERRCUS_1609` — import only: the supplied email does not match the share token's verified identity. Applies to individual imports only. Currently disabled.","content":{"application/json":{"schema":{"type":"object","description":"Every onboarding error, for every status code, uses this one envelope. `errors[]` holds one entry per problem — field, questionnaire and custom-field errors are reported together, and nothing is created when any is present. **Branch on `errors[].code`, never on the message.**","properties":{"code":{"type":"integer","description":"The HTTP status, as an integer.","example":400,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","description":"A summary of the failure.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"string","enum":["ERROR"],"description":"Always `ERROR`.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"null","description":"Always `null`.","uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","description":"One entry per problem.","items":{"type":"object","properties":{"code":{"type":"string","description":"A frozen catalogue code — `ERRCUS_*` for onboarding errors, `ERRCORE_*` / `ERRREF_*` / `ERRCOMP_*` otherwise. Codes are never renumbered, reused or removed.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"The specific reason.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"code":422,"message":"Unprocessable Entity","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1609","message":"Unprocessable Entity","field":null}]},"examples":{"Example":{"title":"Example","value":{"code":422,"message":"Unprocessable Entity","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1609","message":"Unprocessable Entity","field":null}]}}},"exampleType":"examples"}},"exampleType":"examples"},"88e7f4c4-ab1b-40ca-97ec-80af8c9145a7":{"description":"Rate limit exceeded — `ERRCORE_1006`. Carries `X-RateLimit-Limit` and `X-RateLimit-Remaining`.","content":{"application/json":{"schema":{"type":"object","description":"Every onboarding error, for every status code, uses this one envelope. `errors[]` holds one entry per problem — field, questionnaire and custom-field errors are reported together, and nothing is created when any is present. **Branch on `errors[].code`, never on the message.**","properties":{"code":{"type":"integer","description":"The HTTP status, as an integer.","example":400,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","description":"A summary of the failure.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"string","enum":["ERROR"],"description":"Always `ERROR`.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"null","description":"Always `null`.","uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","description":"One entry per problem.","items":{"type":"object","properties":{"code":{"type":"string","description":"A frozen catalogue code — `ERRCUS_*` for onboarding errors, `ERRCORE_*` / `ERRREF_*` / `ERRCOMP_*` otherwise. Codes are never renumbered, reused or removed.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"The specific reason.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"code":429,"message":"Rate limit exceeded, please retry later","status":"ERROR","data":null,"errors":[{"code":"ERRCORE_1006","message":"Rate limit exceeded, please retry later","field":null}]},"examples":{"Example":{"title":"Example","value":{"code":429,"message":"Rate limit exceeded, please retry later","status":"ERROR","data":null,"errors":[{"code":"ERRCORE_1006","message":"Rate limit exceeded, please retry later","field":null}]}}},"exampleType":"examples"}},"exampleType":"examples"},"9fe2de91-88cb-4c5e-a241-698b11dc7e88":{"description":"`ERRCORE_1000` — an unexpected failure. The `500` message is free text and may include internal detail; don't parse it. A verification-service failure returns `Service temporarily unavailable, please try again` (`503 ERRCORE_1008` on a timeout).","content":{"application/json":{"schema":{"type":"object","description":"Every onboarding error, for every status code, uses this one envelope. `errors[]` holds one entry per problem — field, questionnaire and custom-field errors are reported together, and nothing is created when any is present. **Branch on `errors[].code`, never on the message.**","properties":{"code":{"type":"integer","description":"The HTTP status, as an integer.","example":400,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","description":"A summary of the failure.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"string","enum":["ERROR"],"description":"Always `ERROR`.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"null","description":"Always `null`.","uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","description":"One entry per problem.","items":{"type":"object","properties":{"code":{"type":"string","description":"A frozen catalogue code — `ERRCUS_*` for onboarding errors, `ERRCORE_*` / `ERRREF_*` / `ERRCOMP_*` otherwise. Codes are never renumbered, reused or removed.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"The specific reason.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":400,"message":"\u003cstring>","status":"ERROR","data":null,"errors":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"f7494c22-2804-4401-89bf-1fc8c5e5a02a":{"description":"`ERRCORE_1008` — a downstream timeout. Retryable, with the same body: Endl reconciles rather than creating a duplicate.","content":{"application/json":{"schema":{"type":"object","description":"Every onboarding error, for every status code, uses this one envelope. `errors[]` holds one entry per problem — field, questionnaire and custom-field errors are reported together, and nothing is created when any is present. **Branch on `errors[].code`, never on the message.**","properties":{"code":{"type":"integer","description":"The HTTP status, as an integer.","example":400,"uniqueKey":"code","typeLabel":"integer"},"message":{"type":"string","description":"A summary of the failure.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"string","enum":["ERROR"],"description":"Always `ERROR`.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"null","description":"Always `null`.","uniqueKey":"data","typeLabel":"null"},"errors":{"type":"array","description":"One entry per problem.","items":{"type":"object","properties":{"code":{"type":"string","description":"A frozen catalogue code — `ERRCUS_*` for onboarding errors, `ERRCORE_*` / `ERRREF_*` / `ERRCOMP_*` otherwise. Codes are never renumbered, reused or removed.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"The specific reason.","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"field":{"oneOf":[{"type":"string","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","description":"The offending input as a single token — `email`, `company.phone`, `beneficiaries[0].dob`, `customFields.whatsappNumber`. A missing block names the block (`company`, `company.address`, `beneficiaries`); a cross-beneficiary rule names `beneficiaries`. `null` only for errors with no single input, such as a malformed questionnaire structure or a restricted country.","uniqueKey":"errors.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string | null"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"code":503,"message":"Service temporarily unavailable, please try again","status":"ERROR","data":null,"errors":[{"code":"ERRCORE_1008","message":"Service temporarily unavailable, please try again","field":null}]},"examples":{"Example":{"title":"Example","value":{"code":503,"message":"Service temporarily unavailable, please try again","status":"ERROR","data":null,"errors":[{"code":"ERRCORE_1008","message":"Service temporarily unavailable, please try again","field":null}]}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"b7af5553-4e71-4fd9-bf44-1c601740d8f0":{"apiKey":{"type":"apiKey","in":"header","name":"API-KEY","description":"Your partner API key. The key must carry the `customers` permission.","scopes":[],"schemeName":"apiKey"}}},"servers":{"37c63d84-a005-42c0-957e-5c477f6f275a":{"url":"https://api-sandbox.endl.io","description":"Sandbox"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"API-KEY","description":"Your partner API key. The key must carry the `customers` permission.","scopes":[],"schemeName":"apiKey"},"schema":{"title":"API-KEY","type":"string","description":"Your partner API key. The key must carry the `customers` permission.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"API-KEY"}],"title":"apiKey"}]},"originalFileLocation":"api-reference/endl-onboarding-api.json"},"subdomain":"zaymentfinanceltd","siteName":"Endl API","title":"Create customer - Endl API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T13:28:07.830Z","originalFileLocation":"api-reference/onboarding/create-customer.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=\"Creates an individual (KYC) or a business (KYB), or imports either from a share token. userType is required on every non-import create — INDIVIDUAL or BUSINESS (with a company block). A missing userType fails fast with a single 400 ERRCUS_1000 rather than a flood of unrelated field errors. An import — a body carrying a shareToken — still treats userType as optional; identity comes from the token. All field, questionnaire and custom-field errors are returned together in errors[], each with its own ERRCUS_* code, and if any is present nothing is written. Duplicate email (ERRCUS_1600), duplicate phone (ERRCUS_1601), restricted country (ERRCUS_1605) and a reused share token are checked afterwards, one at a time, and only once the fields are valid. countryId and currencyId are ignored if sent (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO country and currency you send. Send only country (ISO 3166-1 alpha-3) and, if anything, currency (ISO 4217).\">\u003cmeta data-mint-head name=\"application-name\" content=\"Endl 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/zaymentfinanceltd/V4tezyHprXdvGDz0/_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/zaymentfinanceltd/V4tezyHprXdvGDz0/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zaymentfinanceltd/V4tezyHprXdvGDz0/_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/zaymentfinanceltd/V4tezyHprXdvGDz0/_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/zaymentfinanceltd/V4tezyHprXdvGDz0/_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/zaymentfinanceltd/V4tezyHprXdvGDz0/_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/zaymentfinanceltd/V4tezyHprXdvGDz0/_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/zaymentfinanceltd/V4tezyHprXdvGDz0/_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/zaymentfinanceltd/V4tezyHprXdvGDz0/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create customer - Endl API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates an individual (KYC) or a business (KYB), or imports either from a share token. userType is required on every non-import create — INDIVIDUAL or BUSINESS (with a company block). A missing userType fails fast with a single 400 ERRCUS_1000 rather than a flood of unrelated field errors. An import — a body carrying a shareToken — still treats userType as optional; identity comes from the token. All field, questionnaire and custom-field errors are returned together in errors[], each with its own ERRCUS_* code, and if any is present nothing is written. Duplicate email (ERRCUS_1600), duplicate phone (ERRCUS_1601), restricted country (ERRCUS_1605) and a reused share token are checked afterwards, one at a time, and only once the fields are valid. countryId and currencyId are ignored if sent (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO country and currency you send. Send only country (ISO 3166-1 alpha-3) and, if anything, currency (ISO 4217).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Endl API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.endl.io/api-reference/onboarding/create-customer\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://zaymentfinanceltd.mintlify.app/_mintlify/api/og/v2?division=Onboarding\u0026amp;title=Create+customer\u0026amp;description=Creates+an+individual+%28KYC%29+or+a+business+%28KYB%29%2C+or+imports+either+from+a+share+token.+**%60userType%60+is+required**+on+every+non-import+create+%E2%80%94+%60INDIVIDUAL%60+or+%60\u0026amp;theme=668efa5ed0467f58a90d23e2\u0026amp;signature=999ed3392d7432488c6c1b81dd96843a9b9a142f485b1fae91608f2adfe95bf2\">\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=\"Create customer - Endl API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates an individual (KYC) or a business (KYB), or imports either from a share token. userType is required on every non-import create — INDIVIDUAL or BUSINESS (with a company block). A missing userType fails fast with a single 400 ERRCUS_1000 rather than a flood of unrelated field errors. An import — a body carrying a shareToken — still treats userType as optional; identity comes from the token. All field, questionnaire and custom-field errors are returned together in errors[], each with its own ERRCUS_* code, and if any is present nothing is written. Duplicate email (ERRCUS_1600), duplicate phone (ERRCUS_1601), restricted country (ERRCUS_1605) and a reused share token are checked afterwards, one at a time, and only once the fields are valid. countryId and currencyId are ignored if sent (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO country and currency you send. Send only country (ISO 3166-1 alpha-3) and, if anything, currency (ISO 4217).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://zaymentfinanceltd.mintlify.app/_mintlify/api/og/v2?division=Onboarding\u0026amp;title=Create+customer\u0026amp;description=Creates+an+individual+%28KYC%29+or+a+business+%28KYB%29%2C+or+imports+either+from+a+share+token.+**%60userType%60+is+required**+on+every+non-import+create+%E2%80%94+%60INDIVIDUAL%60+or+%60\u0026amp;theme=668efa5ed0467f58a90d23e2\u0026amp;signature=999ed3392d7432488c6c1b81dd96843a9b9a142f485b1fae91608f2adfe95bf2\">\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/zaymentfinanceltd/V4tezyHprXdvGDz0/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Endl API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#245FFE\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.endl.io/api-reference/onboarding/create-customer\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/onboarding/create-customer.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.endl.io/#organization\",\"name\":\"Endl API\",\"url\":\"https://docs.endl.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/zaymentfinanceltd/vAyX8M6UjfgZPY1s/logo/endl-api-light-mode.svg?fit=max\u0026auto=format\u0026n=vAyX8M6UjfgZPY1s\u0026q=85\u0026s=317a3d2271242ccb4a73e8c8cc70884d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.endl.io#website\",\"name\":\"Endl API\",\"url\":\"https://docs.endl.io\",\"publisher\":{\"@id\":\"https://docs.endl.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.endl.io/api-reference/onboarding/create-customer#webpage\",\"url\":\"https://docs.endl.io/api-reference/onboarding/create-customer\",\"name\":\"Create customer\",\"description\":\"Creates an individual (KYC) or a business (KYB), or imports either from a share token. userType is required on every non-import create — INDIVIDUAL or BUSINESS (with a company block). A missing userType fails fast with a single 400 ERRCUS_1000 rather than a flood of unrelated field errors. An import — a body carrying a shareToken — still treats userType as optional; identity comes from the token. All field, questionnaire and custom-field errors are returned together in errors[], each with its own ERRCUS_* code, and if any is present nothing is written. Duplicate email (ERRCUS_1600), duplicate phone (ERRCUS_1601), restricted country (ERRCUS_1605) and a reused share token are checked afterwards, one at a time, and only once the fields are valid. countryId and currencyId are ignored if sent (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO country and currency you send. Send only country (ISO 3166-1 alpha-3) and, if anything, currency (ISO 4217).\",\"dateModified\":\"2026-10-23T13:28:07.830Z\",\"isPartOf\":{\"@id\":\"https://docs.endl.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.endl.io/api-reference/onboarding/create-customer#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.endl.io/api-reference/onboarding/create-customer#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.endl.io/api-reference/onboarding/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Onboarding\",\"item\":\"https://docs.endl.io/api-reference/onboarding/introduction\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create customer\",\"item\":\"https://docs.endl.io/api-reference/onboarding/create-customer\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.endl.io/api-reference/onboarding/create-customer#apireference\",\"headline\":\"Create customer\",\"name\":\"Create customer\",\"description\":\"Creates an individual (KYC) or a business (KYB), or imports either from a share token. userType is required on every non-import create — INDIVIDUAL or BUSINESS (with a company block). A missing userType fails fast with a single 400 ERRCUS_1000 rather than a flood of unrelated field errors. An import — a body carrying a shareToken — still treats userType as optional; identity comes from the token. All field, questionnaire and custom-field errors are returned together in errors[], each with its own ERRCUS_* code, and if any is present nothing is written. Duplicate email (ERRCUS_1600), duplicate phone (ERRCUS_1601), restricted country (ERRCUS_1605) and a reused share token are checked afterwards, one at a time, and only once the fields are valid. countryId and currencyId are ignored if sent (no error), like any unknown field, and never returned. They are internal ids, derived server-side from the ISO country and currency you send. Send only country (ISO 3166-1 alpha-3) and, if anything, currency (ISO 4217).\",\"url\":\"https://docs.endl.io/api-reference/onboarding/create-customer\",\"mainEntityOfPage\":{\"@id\":\"https://docs.endl.io/api-reference/onboarding/create-customer#webpage\"},\"dateModified\":\"2026-10-23T13:28:07.830Z\",\"publisher\":{\"@id\":\"https://docs.endl.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.endl.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Endl API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Endl API","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API reference","groups":[{"group":"Introduction","pages":[{"title":"API reference overview","href":"/api-reference/introduction"},{"title":"Authentication","href":"/api-reference/authentication"},{"title":"Versioning","href":"/api-reference/versioning"},{"title":"Errors and the response envelope","href":"/api-reference/errors"},{"title":"Error codes","href":"/api-reference/error-codes"}]},{"group":"Endpoints","pages":[{"group":"Onboarding","expanded":true,"pages":[{"title":"Onboarding overview","href":"/api-reference/onboarding/introduction"},{"title":"Errors and lifecycle","href":"/api-reference/onboarding/errors"},{"title":"Individual (KYC)","href":"/api-reference/onboarding/individual-kyc"},{"title":"Business (KYB)","description":"Onboard a company and its beneficial owners","href":"/api-reference/onboarding/business-kyb"},{"title":"Create customer","openapi":"api-reference/endl-onboarding-api.json POST /api/v0/customer","href":"/api-reference/onboarding/create-customer"},{"title":"Get customer","openapi":"api-reference/endl-onboarding-api.json GET /api/v0/customer/{userId}","description":"Returns one customer — profile, documents and questionnaire.","href":"/api-reference/onboarding/get-customer"},{"title":"Update customer","openapi":"api-reference/endl-onboarding-api.json PUT /api/v0/customer/{userId}","href":"/api-reference/onboarding/update-customer"},{"title":"List customers","openapi":"api-reference/endl-onboarding-api.json GET /api/v0/customer","href":"/api-reference/onboarding/list-customers"},{"title":"Delete customer","openapi":"api-reference/endl-onboarding-api.json DELETE /api/v0/customer/{userId}","href":"/api-reference/onboarding/delete-customer"},{"title":"Generate KYC link","openapi":"api-reference/endl-onboarding-api.json POST /api/v0/customer/{userId}/kyc-link","href":"/api-reference/onboarding/generate-kyc-link"},{"title":"Upload document","openapi":"api-reference/endl-onboarding-api.json POST /api/v0/customer/{userId}/documents","href":"/api-reference/onboarding/upload-document"},{"title":"Upload owner document","openapi":"api-reference/endl-onboarding-api.json POST /api/v0/customer/{userId}/ubo/{uboRef}/documents","href":"/api-reference/onboarding/upload-ubo-document"},{"title":"Questionnaire reference","href":"/api-reference/onboarding/questionnaires"},{"title":"Country restrictions","href":"/api-reference/onboarding/country-restrictions"}]},{"group":"Reference data","expanded":true,"pages":[{"title":"List currencies","openapi":"api-reference/endl-partner-api.json GET /api/v0/currencies","href":"/api-reference/reference/list-currencies"},{"title":"List countries","openapi":"api-reference/endl-partner-api.json GET /api/v0/countries","href":"/api-reference/reference/list-countries"},{"title":"List occupations","openapi":"api-reference/endl-partner-api.json GET /api/v0/occupations","href":"/api-reference/reference/list-occupations"},{"title":"List rails","openapi":"api-reference/endl-partner-api.json GET /api/v0/rails","href":"/api-reference/reference/list-rails"},{"title":"Get recipient fields","openapi":"api-reference/endl-partner-api.json GET /api/v0/recipient-fields","href":"/api-reference/reference/get-recipient-fields"},{"title":"Get sender fields","openapi":"api-reference/endl-partner-api.json GET /api/v0/sender-fields","href":"/api-reference/reference/get-sender-fields"}]},{"group":"Wallets","expanded":true,"pages":[{"title":"List wallets","openapi":"api-reference/endl-partner-api.json GET /api/v0/wallets/{userId}","href":"/api-reference/wallets/list-wallets"},{"title":"Create wallet","openapi":"api-reference/endl-partner-api.json POST /api/v0/wallets/{userId}","href":"/api-reference/wallets/create-wallet"},{"title":"Get wallet","openapi":"api-reference/endl-partner-api.json GET /api/v0/wallets/{userId}/{walletId}","href":"/api-reference/wallets/get-wallet"},{"title":"Get wallet balance","openapi":"api-reference/endl-partner-api.json GET /api/v0/wallets/{userId}/{walletId}/balance","href":"/api-reference/wallets/get-wallet-balance"},{"title":"Update wallet","openapi":"api-reference/endl-partner-api.json PATCH /api/v0/wallets/{userId}/{walletId}","href":"/api-reference/wallets/update-wallet"},{"title":"Delete wallet","openapi":"api-reference/endl-partner-api.json DELETE /api/v0/wallets/{userId}/{walletId}","href":"/api-reference/wallets/delete-wallet"}]},{"group":"Accounts","expanded":true,"pages":[{"title":"Accounts API","href":"/api-reference/accounts/introduction"},{"title":"Account statuses","href":"/api-reference/accounts/statuses"},{"title":"Open account","openapi":"api-reference/endl-partner-api.json POST /api/v0/accounts/{userId}","href":"/api-reference/accounts/open-account"},{"title":"List accounts","openapi":"api-reference/endl-partner-api.json GET /api/v0/accounts/{userId}","href":"/api-reference/accounts/list-accounts"},{"title":"List currencies available for opening","openapi":"api-reference/endl-partner-api.json GET /api/v0/accounts/{userId}/available-for-opening","href":"/api-reference/accounts/list-accounts-available-for-opening"},{"title":"Get account","openapi":"api-reference/endl-partner-api.json GET /api/v0/accounts/{userId}/{accountId}","href":"/api-reference/accounts/get-account"},{"title":"Get account balance","openapi":"api-reference/endl-partner-api.json GET /api/v0/accounts/{userId}/{accountId}/balance","href":"/api-reference/accounts/get-account-balance"},{"title":"Get account activity","openapi":"api-reference/endl-partner-api.json GET /api/v0/accounts/{userId}/{accountId}/activity","href":"/api-reference/accounts/get-account-activity"},{"title":"Activate account","openapi":"api-reference/endl-partner-api.json PATCH /api/v0/accounts/{userId}/{accountId}/activate","href":"/api-reference/accounts/activate-account"},{"title":"Deactivate account","openapi":"api-reference/endl-partner-api.json PATCH /api/v0/accounts/{userId}/{accountId}/deactivate","href":"/api-reference/accounts/deactivate-account"},{"title":"Response by currency","href":"/api-reference/accounts/response-by-currency"},{"title":"Accounts errors","href":"/api-reference/accounts/errors"}]},{"group":"Quotes","expanded":true,"pages":[{"title":"Generate quote","openapi":"api-reference/endl-partner-api.json POST /api/v0/quotes/{userId}/generate","href":"/api-reference/quotes/generate-quote"},{"title":"Get quote","openapi":"api-reference/endl-partner-api.json GET /api/v0/quotes/{userId}/{quoteId}","href":"/api-reference/quotes/get-quote"}]},{"group":"Recipients","expanded":true,"pages":[{"title":"Add recipient","openapi":"api-reference/endl-partner-api.json POST /api/v0/recipients/{userId}","href":"/api-reference/recipients/add-recipient"},{"title":"List recipients","openapi":"api-reference/endl-partner-api.json POST /api/v0/recipients/{userId}/all","href":"/api-reference/recipients/list-recipients"},{"title":"Get recipient","openapi":"api-reference/endl-partner-api.json GET /api/v0/recipients/{userId}/{recipientId}","href":"/api-reference/recipients/get-recipient"},{"title":"Delete recipient","openapi":"api-reference/endl-partner-api.json DELETE /api/v0/recipients/{userId}/{recipientId}","href":"/api-reference/recipients/delete-recipient"},{"title":"List supported rails","openapi":"api-reference/endl-partner-api.json GET /api/v0/recipients/{userId}/supported-rails","href":"/api-reference/recipients/list-supported-rails"},{"title":"Get counterparty checks","openapi":"api-reference/endl-partner-api.json GET /api/v0/recipients/{userId}/{recipientId}/counterparty-checks","href":"/api-reference/recipients/get-counterparty-checks"}]},{"group":"Transactions","expanded":true,"pages":[{"title":"Create pre-transaction","openapi":"api-reference/endl-partner-api.json POST /api/v0/transactions/{userId}/pre-txn","href":"/api-reference/transactions/create-pre-transaction"},{"title":"Submit transaction","openapi":"api-reference/endl-partner-api.json POST /api/v0/transactions/{userId}/submit","href":"/api-reference/transactions/submit-transaction"},{"title":"Get transaction","openapi":"api-reference/endl-partner-api.json GET /api/v0/transactions/{userId}/{txnId}","href":"/api-reference/transactions/get-transaction"},{"title":"List transactions","openapi":"api-reference/endl-partner-api.json POST /api/v0/transactions/{userId}/all","href":"/api-reference/transactions/list-transactions"},{"title":"Get transaction metadata","openapi":"api-reference/endl-partner-api.json GET /api/v0/transactions/{userId}/metadata","href":"/api-reference/transactions/get-transaction-metadata"},{"title":"List purpose codes","openapi":"api-reference/endl-partner-api.json GET /api/v0/transactions/purpose-codes","href":"/api-reference/transactions/list-purpose-codes"},{"title":"Upload invoice","openapi":"api-reference/endl-partner-api.json POST /api/v0/transactions/{userId}/invoice-upload","href":"/api-reference/transactions/upload-invoice"}]},{"group":"Cards","expanded":true,"pages":[{"title":"Cards overview","href":"/api-reference/cards/introduction"},{"title":"Enrol a customer","openapi":"api-reference/endl-cards-api.json POST /api/v0/cards/{customerId}/enrollment","href":"/api-reference/cards/enroll-customer"},{"title":"Get enrolment","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/enrollment","href":"/api-reference/cards/get-enrollment"},{"title":"Add a cardholder","openapi":"api-reference/endl-cards-api.json POST /api/v0/customer/{businessId}/card-users","href":"/api-reference/cards/create-cardholder"},{"title":"List cardholders","openapi":"api-reference/endl-cards-api.json GET /api/v0/customer/{businessId}/card-users","href":"/api-reference/cards/list-cardholders"},{"title":"Get a cardholder","openapi":"api-reference/endl-cards-api.json GET /api/v0/customer/{businessId}/card-users/{cardholderId}","href":"/api-reference/cards/get-cardholder"},{"title":"Issue a card","openapi":"api-reference/endl-cards-api.json POST /api/v0/cards/{cardholderId}","href":"/api-reference/cards/issue-card"},{"title":"Issue a single-use card","openapi":"api-reference/endl-cards-api.json POST /api/v0/cards/{cardholderId}/single-use","href":"/api-reference/cards/issue-single-use-card"},{"title":"List cards","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}","href":"/api-reference/cards/list-cards"},{"title":"Get a card","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/{cardId}","href":"/api-reference/cards/get-card"},{"title":"Update a card","openapi":"api-reference/endl-cards-api.json PATCH /api/v0/cards/{customerId}/{cardId}","href":"/api-reference/cards/update-card"},{"title":"Freeze a card","openapi":"api-reference/endl-cards-api.json POST /api/v0/cards/{customerId}/{cardId}/freeze","href":"/api-reference/cards/freeze-card"},{"title":"Unfreeze a card","openapi":"api-reference/endl-cards-api.json POST /api/v0/cards/{customerId}/{cardId}/unfreeze","href":"/api-reference/cards/unfreeze-card"},{"title":"Cancel a card","openapi":"api-reference/endl-cards-api.json POST /api/v0/cards/{customerId}/{cardId}/cancel","href":"/api-reference/cards/cancel-card"},{"title":"Get card details","openapi":"api-reference/endl-cards-api.json POST /api/v0/cards/{customerId}/{cardId}/details","href":"/api-reference/cards/get-card-details"},{"title":"Card details encryption","href":"/api-reference/cards/encryption"},{"title":"List card transactions","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/transactions","href":"/api-reference/cards/list-card-transactions"},{"title":"Get a card transaction","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/transactions/{transactionId}","href":"/api-reference/cards/get-card-transaction"},{"title":"Get card balance","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/balance","href":"/api-reference/cards/get-card-balance"},{"title":"Get deposit instructions","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/deposit-instructions","href":"/api-reference/cards/get-deposit-instructions"},{"title":"Deposit from the Endl account","openapi":"api-reference/endl-cards-api.json POST /api/v0/cards/{customerId}/deposits","href":"/api-reference/cards/create-card-deposit"},{"title":"List deposits","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/deposits","href":"/api-reference/cards/list-card-deposits"},{"title":"Get a deposit","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/deposits/{depositId}","href":"/api-reference/cards/get-card-deposit"},{"title":"Withdraw from the card balance","openapi":"api-reference/endl-cards-api.json POST /api/v0/cards/{customerId}/withdrawals","href":"/api-reference/cards/create-card-withdrawal"},{"title":"List withdrawals","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/withdrawals","href":"/api-reference/cards/list-card-withdrawals"},{"title":"Get a withdrawal","openapi":"api-reference/endl-cards-api.json GET /api/v0/cards/{customerId}/withdrawals/{withdrawalId}","href":"/api-reference/cards/get-card-withdrawal"},{"title":"Card webhook events","href":"/api-reference/cards/events"},{"title":"Card errors","href":"/api-reference/cards/errors"}]},{"group":"POBO","expanded":true,"pages":[{"title":"POBO overview","href":"/api-reference/pobo/introduction"},{"title":"Get owner","openapi":"api-reference/endl-pobo-api.json GET /api/v0/pobo/owner","href":"/api-reference/pobo/get-owner"},{"title":"Create sender","openapi":"api-reference/endl-pobo-api.json POST /api/v0/pobo/senders","href":"/api-reference/pobo/create-sender"},{"title":"List senders","openapi":"api-reference/endl-pobo-api.json GET /api/v0/pobo/senders","href":"/api-reference/pobo/list-senders"},{"title":"Get sender","openapi":"api-reference/endl-pobo-api.json GET /api/v0/pobo/senders/{senderId}","href":"/api-reference/pobo/get-sender"},{"title":"Delete sender","openapi":"api-reference/endl-pobo-api.json DELETE /api/v0/pobo/senders/{senderId}","href":"/api-reference/pobo/delete-sender"},{"title":"Create recipient","openapi":"api-reference/endl-pobo-api.json POST /api/v0/pobo/recipients","href":"/api-reference/pobo/create-recipient"},{"title":"List recipients","openapi":"api-reference/endl-pobo-api.json POST /api/v0/pobo/recipients/all","href":"/api-reference/pobo/list-recipients"},{"title":"Get recipient","openapi":"api-reference/endl-pobo-api.json GET /api/v0/pobo/recipients/{recipientId}","href":"/api-reference/pobo/get-recipient"},{"title":"Delete recipient","openapi":"api-reference/endl-pobo-api.json DELETE /api/v0/pobo/recipients/{recipientId}","href":"/api-reference/pobo/delete-recipient"},{"title":"Generate quote","openapi":"api-reference/endl-pobo-api.json POST /api/v0/pobo/quotes/generate","href":"/api-reference/pobo/generate-quote"},{"title":"Get quote","openapi":"api-reference/endl-pobo-api.json GET /api/v0/pobo/quotes/{quoteId}","href":"/api-reference/pobo/get-quote"},{"title":"Create pre-transaction","openapi":"api-reference/endl-pobo-api.json POST /api/v0/pobo/transactions/pre-txn","href":"/api-reference/pobo/create-pre-transaction"},{"title":"Submit transaction","openapi":"api-reference/endl-pobo-api.json POST /api/v0/pobo/transactions/submit","href":"/api-reference/pobo/submit-transaction"},{"title":"Get transaction","openapi":"api-reference/endl-pobo-api.json GET /api/v0/pobo/transactions/{txnId}","href":"/api-reference/pobo/get-transaction"},{"title":"List transactions","openapi":"api-reference/endl-pobo-api.json POST /api/v0/pobo/transactions/all","href":"/api-reference/pobo/list-transactions"}]},{"group":"Gift Cards","expanded":true,"pages":[{"title":"Giftcard API overview","href":"/giftcards/overview"},{"title":"Signing requests","href":"/giftcards/authentication"},{"title":"Conventions","href":"/giftcards/conventions"},{"title":"List products","openapi":"api-reference/endl-giftcard-api.json GET /catalog/products","href":"/giftcards/list-products"},{"title":"Create an order","openapi":"api-reference/endl-giftcard-api.json POST /orders","href":"/giftcards/create-order"},{"title":"Get an order","openapi":"api-reference/endl-giftcard-api.json GET /orders/{order_id}","href":"/giftcards/get-order"},{"title":"List orders","openapi":"api-reference/endl-giftcard-api.json GET /orders","href":"/giftcards/list-orders"},{"title":"Retrieve vouchers","openapi":"api-reference/endl-giftcard-api.json GET /orders/{order_id}/vouchers","href":"/giftcards/retrieve-vouchers"},{"title":"Order lifecycle","href":"/giftcards/lifecycle"},{"title":"Error codes","href":"/giftcards/errors"},{"title":"Worked flows","href":"/giftcards/flows"}]},{"group":"Webhooks","expanded":true,"pages":[{"title":"Webhooks overview","href":"/webhooks/overview"},{"title":"Verifying signatures","href":"/webhooks/signature-verification"},{"title":"Create subscription","openapi":"api-reference/endl-webhooks-api.json POST /api/v0/webhooks/subscriptions","href":"/webhooks/create-subscription"},{"title":"List subscriptions","openapi":"api-reference/endl-webhooks-api.json GET /api/v0/webhooks/subscriptions","href":"/webhooks/list-subscriptions"},{"title":"Get subscription","openapi":"api-reference/endl-webhooks-api.json GET /api/v0/webhooks/subscriptions/{id}","href":"/webhooks/get-subscription"},{"title":"Update subscription","openapi":"api-reference/endl-webhooks-api.json PATCH /api/v0/webhooks/subscriptions/{id}","href":"/webhooks/update-subscription"},{"title":"Delete subscription","openapi":"api-reference/endl-webhooks-api.json DELETE /api/v0/webhooks/subscriptions/{id}","href":"/webhooks/delete-subscription"},{"title":"Send event to subscription","openapi":"api-reference/endl-webhooks-api.json POST /api/v0/webhooks/subscriptions/{id}/send","href":"/webhooks/send-event"},{"title":"List deliveries","openapi":"api-reference/endl-webhooks-api.json GET /api/v0/webhooks/events","href":"/webhooks/list-deliveries"},{"title":"Get delivery","openapi":"api-reference/endl-webhooks-api.json GET /api/v0/webhooks/events/{id}","href":"/webhooks/get-delivery"},{"title":"Retry delivery","openapi":"api-reference/endl-webhooks-api.json POST /api/v0/webhooks/events/{id}/retry","href":"/webhooks/retry-delivery"},{"title":"Read the PULL feed","openapi":"api-reference/endl-webhooks-api.json GET /api/v0/events","href":"/webhooks/pull-events"},{"title":"Pagination","href":"/webhooks/pagination"},{"title":"Errors and response envelope","href":"/webhooks/errors"},{"title":"Reference","href":"/webhooks/reference"}]}]}]}]},"title":"Create customer - Endl API","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}