{
"code": 400,
"message": "No updatable field provided",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCUS_1502",
"message": "At least one field must be provided to update",
"field": null
}
]
}
{
"code": 404,
"message": "User with ID 'cus_PWEhqXkPKpWXiFd96jGq' not found",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRREF_1001",
"message": "User with ID 'cus_PWEhqXkPKpWXiFd96jGq' not found",
"field": "userId"
}
]
}
{
"code": 409,
"message": "Customer is locked after verification",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCUS_1604",
"message": "This customer's KYC is completed; its details can no longer be changed",
"field": null
}
]
}
Update customer
Partial update — send only what changes. Exception: the address is updated as a whole. If you send any of addressLine1, addressLine2, city, state or postalCode, you must also send addressLine1, city, state, postalCode and country (addressLine2 stays optional).
An update must carry at least one updatable field with a non-blank value (it can be the same as the stored value). null, empty and whitespace-only values are ignored, so a field can’t be cleared. An update with nothing to apply — an empty body, or {"company":{}} — is 400 ERRCUS_1502.
A questionnaire can’t be updated: a non-empty questionnaire object is 400 ERRCUS_1303. An empty or non-object questionnaire is 400 ERRCUS_1301, and null is ignored.
Once an INDIVIDUAL reaches COMPLETED it is fully locked. Any field — identity, currency or custom fields — returns 409 ERRCUS_1604 (This customer's KYC is completed; its details can no longer be changed).
Once a BUSINESS reaches COMPLETED it is fully locked too: any company field returns 409 ERRCUS_1604 (This customer's KYC is completed; verified identity fields can no longer be changed). Nothing stays editable.
customFields is a partial merge: send one field and the others are preserved.
countryId and currencyId are ignored if sent (no error), like any unknown field — both are derived server-side from country and currency.
{
"code": 400,
"message": "No updatable field provided",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCUS_1502",
"message": "At least one field must be provided to update",
"field": null
}
]
}
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.
The customer reference id returned by create — a cus_-prefixed string, not a UUID.
Response
The updated customer. For an individual, the response leaves out documents, questionnaire and customFields; call Get customer for those. The questionnaire can't be updated.
Current verification status. Beyond the original eight, it can be VERIFICATION_IN_PROGRESS, ON_HOLD, AWAITING_UBO_DETAILS, VERIFICATION_PAUSED or DELETED — see the verification lifecycle. Treat unknown values as in progress. The list status filter accepts only the original eight.
Individuals only — one entry per uploaded document. Omitted until at least one document has been uploaded. A business read has no documents array; track it through status and each beneficiaries[].status.
The customer's answers only — questionnaireId plus answers flattened to { "<sectionId>": { "<itemId>": value } }, with no items / value wrapper. A single-select answer is a scalar; a multi-select or country-multi answer is an array. questionnaireId is endlIndividualProfileQuestionnairenew for an individual and endlKybQuestionnaireBridgeTest for a business. Omitted until a questionnaire has been submitted.
Contact phone in E.164 format — a leading + then 8–15 digits, e.g. +971500000000. An invalid phone is a 400: phone must be a valid phone number in E.164 format (e.g. +971500000000).
When the customer was created. ISO-8601 UTC timestamp, e.g. 2026-10-22T09:15:30.123456Z. The number of fractional-second digits varies: .123456, .123, or none.
When the customer was last updated. ISO-8601 UTC timestamp, e.g. 2026-10-22T09:15:30.123456Z. The number of fractional-second digits varies: .123456, .123, or none.
{"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/update-customer","slug":"/api-reference/onboarding/update-customer","pageMetadata":{"title":"Update customer","openapi":"api-reference/endl-onboarding-api.json PUT /api/v0/customer/{userId}","description":"Partial update — send only what changes. **Exception:** the address is updated as a whole. If you send any of `addressLine1`, `addressLine2`, `city`, `state` or `postalCode`, you must also send `addressLine1`, `city`, `state`, `postalCode` and `country` (`addressLine2` stays optional).\n\n**An update must carry at least one updatable field with a non-blank value** (it can be the same as the stored value). `null`, empty and whitespace-only values are ignored, so a field can't be cleared. An update with nothing to apply — an empty body, or `{\"company\":{}}` — is `400 ERRCUS_1502`.\n\n**A questionnaire can't be updated:** a non-empty `questionnaire` object is `400 ERRCUS_1303`. An empty or non-object `questionnaire` is `400 ERRCUS_1301`, and `null` is ignored.\n\n**Once an INDIVIDUAL reaches `COMPLETED` it is fully locked.** Any field — identity, `currency` or custom fields — returns `409 ERRCUS_1604` (`This customer's KYC is completed; its details can no longer be changed`).\n\n**Once a BUSINESS reaches `COMPLETED` it is fully locked** too: any `company` field returns `409 ERRCUS_1604` (`This customer's KYC is completed; verified identity fields can no longer be changed`). Nothing stays editable.\n\n`customFields` is a **partial merge**: send one field and the others are preserved.\n\n`countryId` and `currencyId` are **ignored if sent** (no error), like any unknown field — both are derived server-side from `country` and `currency`.","href":"/api-reference/onboarding/update-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 };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Partial update — send only what changes. \", _jsx(_components.strong, {\n children: \"Exception:\"\n }), \" the address is updated as a whole. If you send any of \", _jsx(_components.code, {\n children: \"addressLine1\"\n }), \", \", _jsx(_components.code, {\n children: \"addressLine2\"\n }), \", \", _jsx(_components.code, {\n children: \"city\"\n }), \", \", _jsx(_components.code, {\n children: \"state\"\n }), \" or \", _jsx(_components.code, {\n children: \"postalCode\"\n }), \", you must also send \", _jsx(_components.code, {\n children: \"addressLine1\"\n }), \", \", _jsx(_components.code, {\n children: \"city\"\n }), \", \", _jsx(_components.code, {\n children: \"state\"\n }), \", \", _jsx(_components.code, {\n children: \"postalCode\"\n }), \" and \", _jsx(_components.code, {\n children: \"country\"\n }), \" (\", _jsx(_components.code, {\n children: \"addressLine2\"\n }), \" stays optional).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"An update must carry at least one updatable field with a non-blank value\"\n }), \" (it can be the same as the stored value). \", _jsx(_components.code, {\n children: \"null\"\n }), \", empty and whitespace-only values are ignored, so a field can’t be cleared. An update with nothing to apply — an empty body, or \", _jsx(_components.code, {\n children: \"{\\\"company\\\":{}}\"\n }), \" — is \", _jsx(_components.code, {\n children: \"400 ERRCUS_1502\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"A questionnaire can’t be updated:\"\n }), \" a non-empty \", _jsx(_components.code, {\n children: \"questionnaire\"\n }), \" object is \", _jsx(_components.code, {\n children: \"400 ERRCUS_1303\"\n }), \". An empty or non-object \", _jsx(_components.code, {\n children: \"questionnaire\"\n }), \" is \", _jsx(_components.code, {\n children: \"400 ERRCUS_1301\"\n }), \", and \", _jsx(_components.code, {\n children: \"null\"\n }), \" is ignored.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsxs(_components.strong, {\n children: [\"Once an INDIVIDUAL reaches \", _jsx(_components.code, {\n children: \"COMPLETED\"\n }), \" it is fully locked.\"]\n }), \" Any field — identity, \", _jsx(_components.code, {\n children: \"currency\"\n }), \" or custom fields — returns \", _jsx(_components.code, {\n children: \"409 ERRCUS_1604\"\n }), \" (\", _jsx(_components.code, {\n children: \"This customer's KYC is completed; its details can no longer be changed\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsxs(_components.strong, {\n children: [\"Once a BUSINESS reaches \", _jsx(_components.code, {\n children: \"COMPLETED\"\n }), \" it is fully locked\"]\n }), \" too: any \", _jsx(_components.code, {\n children: \"company\"\n }), \" field returns \", _jsx(_components.code, {\n children: \"409 ERRCUS_1604\"\n }), \" (\", _jsx(_components.code, {\n children: \"This customer's KYC is completed; verified identity fields can no longer be changed\"\n }), \"). Nothing stays editable.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"customFields\"\n }), \" is a \", _jsx(_components.strong, {\n children: \"partial merge\"\n }), \": send one field and the others are preserved.\"]\n }), \"\\n\", _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 — both are derived server-side from \", _jsx(_components.code, {\n children: \"country\"\n }), \" and \", _jsx(_components.code, {\n children: \"currency\"\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};\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":"Update customer","openapi":"api-reference/endl-onboarding-api.json PUT /api/v0/customer/{userId}","description":"Partial update — send only what changes. **Exception:** the address is updated as a whole. If you send any of `addressLine1`, `addressLine2`, `city`, `state` or `postalCode`, you must also send `addressLine1`, `city`, `state`, `postalCode` and `country` (`addressLine2` stays optional).\n\n**An update must carry at least one updatable field with a non-blank value** (it can be the same as the stored value). `null`, empty and whitespace-only values are ignored, so a field can't be cleared. An update with nothing to apply — an empty body, or `{\"company\":{}}` — is `400 ERRCUS_1502`.\n\n**A questionnaire can't be updated:** a non-empty `questionnaire` object is `400 ERRCUS_1303`. An empty or non-object `questionnaire` is `400 ERRCUS_1301`, and `null` is ignored.\n\n**Once an INDIVIDUAL reaches `COMPLETED` it is fully locked.** Any field — identity, `currency` or custom fields — returns `409 ERRCUS_1604` (`This customer's KYC is completed; its details can no longer be changed`).\n\n**Once a BUSINESS reaches `COMPLETED` it is fully locked** too: any `company` field returns `409 ERRCUS_1604` (`This customer's KYC is completed; verified identity fields can no longer be changed`). Nothing stays editable.\n\n`customFields` is a **partial merge**: send one field and the others are preserved.\n\n`countryId` and `currencyId` are **ignored if sent** (no error), like any unknown field — both are derived server-side from `country` and `currency`.","href":"/api-reference/onboarding/update-customer"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/zaymentfinanceltd/d373d43d77eb6813/custom.js"],"openApiReferenceData":{"operation":{"tags":["Customers"],"summary":"Update customer","description":"Partial update — send only what changes. **Exception:** the address is updated as a whole. If you send any of `addressLine1`, `addressLine2`, `city`, `state` or `postalCode`, you must also send `addressLine1`, `city`, `state`, `postalCode` and `country` (`addressLine2` stays optional).\n\n**An update must carry at least one updatable field with a non-blank value** (it can be the same as the stored value). `null`, empty and whitespace-only values are ignored, so a field can't be cleared. An update with nothing to apply — an empty body, or `{\"company\":{}}` — is `400 ERRCUS_1502`.\n\n**A questionnaire can't be updated:** a non-empty `questionnaire` object is `400 ERRCUS_1303`. An empty or non-object `questionnaire` is `400 ERRCUS_1301`, and `null` is ignored.\n\n**Once an INDIVIDUAL reaches `COMPLETED` it is fully locked.** Any field — identity, `currency` or custom fields — returns `409 ERRCUS_1604` (`This customer's KYC is completed; its details can no longer be changed`).\n\n**Once a BUSINESS reaches `COMPLETED` it is fully locked** too: any `company` field returns `409 ERRCUS_1604` (`This customer's KYC is completed; verified identity fields can no longer be changed`). Nothing stays editable.\n\n`customFields` is a **partial merge**: send one field and the others are preserved.\n\n`countryId` and `currencyId` are **ignored if sent** (no error), like any unknown field — both are derived server-side from `country` and `currency`.","requestBody":"019e15ea-45bc-4e57-9e54-650db52bb385","responses":{"200":"5fac9bc2-a489-47e1-9057-412ce4995000","400":"38b37ee7-da81-456c-9245-7b1a8ccc780a","401":"86cc5253-6be4-4564-862d-a6a0dc55104f","403":"05fc42dc-93a5-404a-b7c2-83c7f5f3b275","404":"0f922b66-61a7-4ef2-bbff-30b2dc57526a","409":"d81c429e-70ff-46bb-a236-0d894900862d"},"parameters":["9268b4ac-7045-40da-a57b-c8172d59d441"],"method":"put","type":"path","servers":["37c63d84-a005-42c0-957e-5c477f6f275a"],"security":["b7af5553-4e71-4fd9-bf44-1c601740d8f0"],"path":"/api/v0/customer/{userId}","baseUrlOptions":["https://api-sandbox.endl.io"],"title":"Update customer","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","disableProxy":true},"dependencies":{"parameters":{"9268b4ac-7045-40da-a57b-c8172d59d441":{"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"},"c9ebc486-3db9-401f-80ca-335099e80ab5":{"name":"userId","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"The customer reference id returned by create — a `cus_`-prefixed string, not a UUID.","uniqueKey":"","typeLabel":"string"},"description":"The customer reference id returned by create — a `cus_`-prefixed string, not a UUID.","example":"cus_PWEhqXkPKpWXiFd96jGq"}},"requestBody":{"required":false,"content":{"application/json":{"example":{"firstName":"Janet","phone":"+971511111111"},"examples":{"Example":{"title":"Example","value":{"firstName":"Janet","phone":"+971511111111"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"5fac9bc2-a489-47e1-9057-412ce4995000":{"description":"The updated customer. For an individual, the response leaves out `documents`, `questionnaire` and `customFields`; call Get customer for those. The questionnaire can't be updated.","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Endl's customer reference id — a `cus_`-prefixed string, **not** a UUID. This is what create returns and what goes in every `/api/v0/customer/{userId}` URL.","example":"cus_PWEhqXkPKpWXiFd96jGq","uniqueKey":"userId","typeLabel":"string"},"userType":{"type":"string","enum":["INDIVIDUAL","BUSINESS"],"description":"`INDIVIDUAL` or `BUSINESS`.","uniqueKey":"userType","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["NOT_INITIATED","INITIATED","SUBMITTED","IN_REVIEW","PENDING","COMPLETED","REJECTED","RESUBMISSION_REQUIRED","ON_HOLD","VERIFICATION_IN_PROGRESS","VERIFICATION_PAUSED","AWAITING_UBO_DETAILS","DELETED"],"description":"Current verification status. Beyond the original eight, it can be `VERIFICATION_IN_PROGRESS`, `ON_HOLD`, `AWAITING_UBO_DETAILS`, `VERIFICATION_PAUSED` or `DELETED` — see the [verification lifecycle](/api-reference/onboarding/errors#verification-lifecycle). Treat unknown values as in progress. The list `status` filter accepts only the original eight.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"email":{"type":"string","description":"Contact email. Immutable after creation.","uniqueKey":"email","typeLabel":"string"},"firstName":{"type":"string","description":"The customer's given name.","uniqueKey":"firstName","typeLabel":"string"},"lastName":{"type":"string","description":"The customer's family name.","uniqueKey":"lastName","typeLabel":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-3, returned in the case it was sent (e.g. `are`).","uniqueKey":"country","typeLabel":"string"},"dateOfBirth":{"type":"string","description":"Date of birth, returned as `YYYY-MM-DD`.","uniqueKey":"dateOfBirth","typeLabel":"string"},"documents":{"type":"array","description":"Individuals only — one entry per uploaded document. **Omitted until at least one document has been uploaded.** A business read has no `documents` array; track it through `status` and each `beneficiaries[].status`.","items":{"type":"object","properties":{"docType":{"type":"string","description":"The `idDocType` that was uploaded — `PASSPORT`, `ID_CARD`, `DRIVERS`, `RESIDENCE_PERMIT`, `SELFIE` or `UTILITY_BILL`. A `DRIVERS_LICENSE` upload is returned as `DRIVERS`.","uniqueKey":"documents.items.[INDEX].docType","typeLabel":"string"},"side":{"type":"string","description":"Exactly as sent (e.g. `front`), or `set` when omitted.","uniqueKey":"documents.items.[INDEX].side","typeLabel":"string"},"status":{"type":"string","description":"One of `PENDING`, `UPLOADED` or `FAILED`.","uniqueKey":"documents.items.[INDEX].status","typeLabel":"string"}},"uniqueKey":"documents.items.[INDEX]","typeLabel":"object"},"uniqueKey":"documents","typeLabel":"object[]"},"questionnaire":{"type":"object","description":"The customer's **answers only** — `questionnaireId` plus `answers` flattened to `{ \"\u003csectionId>\": { \"\u003citemId>\": value } }`, with no `items` / `value` wrapper. A single-select answer is a scalar; a multi-select or country-multi answer is an array. `questionnaireId` is `endlIndividualProfileQuestionnairenew` for an individual and `endlKybQuestionnaireBridgeTest` for a business. **Omitted until a questionnaire has been submitted.**","properties":{"questionnaireId":{"type":"string","uniqueKey":"questionnaire.questionnaireId","typeLabel":"string"},"answers":{"type":"object","uniqueKey":"questionnaire.answers","typeLabel":"object"}},"uniqueKey":"questionnaire","typeLabel":"object"},"phone":{"type":"string","description":"Contact phone in **E.164 format** — a leading `+` then 8–15 digits, e.g. `+971500000000`. An invalid phone is a `400`: `phone must be a valid phone number in E.164 format (e.g. +971500000000)`.","pattern":"^\\+[1-9]\\d{7,14}$","example":"+971500000000","uniqueKey":"phone","typeLabel":"string"},"addressLine1":{"type":"string","description":"Street address.","uniqueKey":"addressLine1","typeLabel":"string"},"addressLine2":{"type":"string","description":"Second address line.","uniqueKey":"addressLine2","typeLabel":"string"},"city":{"type":"string","description":"City.","uniqueKey":"city","typeLabel":"string"},"state":{"type":"string","description":"State or province.","uniqueKey":"state","typeLabel":"string"},"postalCode":{"type":"string","description":"Postal code.","uniqueKey":"postalCode","typeLabel":"string"},"currency":{"type":"string","description":"ISO 4217 code, stored and returned as sent (not validated).","uniqueKey":"currency","typeLabel":"string"},"customFields":{"type":"object","description":"Partner-facing custom fields — `nationalIdNumber`, `whatsappNumber`, `telegramId` — with their stored values. Best-effort; absent when none are set.","example":{"nationalIdNumber":"784-1988-1234567-1","whatsappNumber":"+971500000000","telegramId":"@maria"},"uniqueKey":"customFields","typeLabel":"object"},"companyName":{"type":"string","description":"Registered name. `BUSINESS` only.","uniqueKey":"companyName","typeLabel":"string"},"companyApplicantId":{"type":"string","description":"The provider's company applicant id. `BUSINESS` only.","uniqueKey":"companyApplicantId","typeLabel":"string"},"beneficiaries":{"type":"array","items":{"type":"object","required":["applicantId","status"],"properties":{"applicantId":{"type":"string","isRequired":true,"uniqueKey":"beneficiaries.items.[INDEX].applicantId","typeLabel":"string"},"status":{"type":"string","enum":["PENDING","UPLOADED","FAILED"],"isRequired":true,"uniqueKey":"beneficiaries.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"email":{"type":"string","uniqueKey":"beneficiaries.items.[INDEX].email","typeLabel":"string"}},"uniqueKey":"beneficiaries.items.[INDEX]","typeLabel":"object"},"description":"Beneficial owners (UBOs), each with its own `applicantId` and `status`.","uniqueKey":"beneficiaries","typeLabel":"object[]"},"createdOn":{"type":"string","format":"date-time","description":"When the customer was created. ISO-8601 UTC timestamp, e.g. `2026-10-22T09:15:30.123456Z`. The number of fractional-second digits varies: `.123456`, `.123`, or none.","uniqueKey":"createdOn","typeLabel":"string\u003cdate-time>"},"updatedOn":{"type":"string","format":"date-time","description":"When the customer was last updated. ISO-8601 UTC timestamp, e.g. `2026-10-22T09:15:30.123456Z`. The number of fractional-second digits varies: `.123456`, `.123`, or none.","uniqueKey":"updatedOn","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"userId":"cus_PWEhqXkPKpWXiFd96jGq","userType":"INDIVIDUAL","status":"NOT_INITIATED","email":"\u003cstring>","firstName":"\u003cstring>","lastName":"\u003cstring>","country":"\u003cstring>","dateOfBirth":"\u003cstring>","documents":[{"docType":"\u003cstring>","side":"\u003cstring>","status":"\u003cstring>"}],"questionnaire":{"questionnaireId":"\u003cstring>","answers":{}},"phone":"+971500000000","addressLine1":"\u003cstring>","addressLine2":"\u003cstring>","city":"\u003cstring>","state":"\u003cstring>","postalCode":"\u003cstring>","currency":"\u003cstring>","customFields":{"nationalIdNumber":"784-1988-1234567-1","whatsappNumber":"+971500000000","telegramId":"@maria"},"companyName":"\u003cstring>","companyApplicantId":"\u003cstring>","beneficiaries":[{"applicantId":"\u003cstring>","status":"PENDING","email":"\u003cstring>"}],"createdOn":"2023-11-07T05:31:56Z","updatedOn":"2023-11-07T05:31:56Z"}}},"exampleType":"generated"}},"exampleType":"generated"},"38b37ee7-da81-456c-9245-7b1a8ccc780a":{"description":"`ERRCUS_1502` — nothing to update, as here. A missing body, or a body that isn't an object, is treated as empty and also gets `ERRCUS_1502`; a body that isn't valid JSON is `400 ERRCORE_1001`. `ERRCUS_1303` — a non-empty questionnaire was sent; `ERRCUS_1301` — an empty or non-object one. Field validation uses the same `ERRCUS_*` codes as create, except that `company.email` is not format-checked on update (`ERRCUS_1111` is not returned).","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":"No updatable field provided","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1502","message":"At least one field must be provided to update","field":null}]},"examples":{"Example":{"title":"Example","value":{"code":400,"message":"No updatable field provided","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1502","message":"At least one field must be provided to update","field":null}]}}},"exampleType":"examples"}},"exampleType":"examples"},"86cc5253-6be4-4564-862d-a6a0dc55104f":{"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"},"05fc42dc-93a5-404a-b7c2-83c7f5f3b275":{"description":"`ERRCORE_1005` — the key lacks the `customers` permission.","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"},"0f922b66-61a7-4ef2-bbff-30b2dc57526a":{"description":"`404 ERRREF_1001`, field `userId`, for any id that doesn't resolve to a live customer of yours: unknown, malformed, an internal UUID, deleted, or another partner's.","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":404,"message":"User with ID 'cus_PWEhqXkPKpWXiFd96jGq' not found","status":"ERROR","data":null,"errors":[{"code":"ERRREF_1001","message":"User with ID 'cus_PWEhqXkPKpWXiFd96jGq' not found","field":"userId"}]},"examples":{"Example":{"title":"Example","value":{"code":404,"message":"User with ID 'cus_PWEhqXkPKpWXiFd96jGq' not found","status":"ERROR","data":null,"errors":[{"code":"ERRREF_1001","message":"User with ID 'cus_PWEhqXkPKpWXiFd96jGq' not found","field":"userId"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"d81c429e-70ff-46bb-a236-0d894900862d":{"description":"`ERRCUS_1604` — the customer is locked after verification.","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":409,"message":"Customer is locked after verification","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1604","message":"This customer's KYC is completed; its details can no longer be changed","field":null}]},"examples":{"Example":{"title":"Example","value":{"code":409,"message":"Customer is locked after verification","status":"ERROR","data":null,"errors":[{"code":"ERRCUS_1604","message":"This customer's KYC is completed; its details can no longer be changed","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":"Update customer - Endl API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T13:28:07.830Z","originalFileLocation":"api-reference/onboarding/update-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=\"Partial update — send only what changes. Exception: the address is updated as a whole. If you send any of addressLine1, addressLine2, city, state or postalCode, you must also send addressLine1, city, state, postalCode and country (addressLine2 stays optional). An update must carry at least one updatable field with a non-blank value (it can be the same as the stored value). null, empty and whitespace-only values are ignored, so a field can\u0026#x27;t be cleared. An update with nothing to apply — an empty body, or {\u0026quot;company\u0026quot;:{}} — is 400 ERRCUS_1502. A questionnaire can\u0026#x27;t be updated: a non-empty questionnaire object is 400 ERRCUS_1303. An empty or non-object questionnaire is 400 ERRCUS_1301, and null is ignored. Once an INDIVIDUAL reaches COMPLETED it is fully locked. Any field — identity, currency or custom fields — returns 409 ERRCUS_1604 (This customer\u0026#x27;s KYC is completed; its details can no longer be changed). Once a BUSINESS reaches COMPLETED it is fully locked too: any company field returns 409 ERRCUS_1604 (This customer\u0026#x27;s KYC is completed; verified identity fields can no longer be changed). Nothing stays editable. customFields is a partial merge: send one field and the others are preserved. countryId and currencyId are ignored if sent (no error), like any unknown field — both are derived server-side from country and currency.\">\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=\"Update customer - Endl API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Partial update — send only what changes. Exception: the address is updated as a whole. If you send any of addressLine1, addressLine2, city, state or postalCode, you must also send addressLine1, city, state, postalCode and country (addressLine2 stays optional). An update must carry at least one updatable field with a non-blank value (it can be the same as the stored value). null, empty and whitespace-only values are ignored, so a field can\u0026#x27;t be cleared. An update with nothing to apply — an empty body, or {\u0026quot;company\u0026quot;:{}} — is 400 ERRCUS_1502. A questionnaire can\u0026#x27;t be updated: a non-empty questionnaire object is 400 ERRCUS_1303. An empty or non-object questionnaire is 400 ERRCUS_1301, and null is ignored. Once an INDIVIDUAL reaches COMPLETED it is fully locked. Any field — identity, currency or custom fields — returns 409 ERRCUS_1604 (This customer\u0026#x27;s KYC is completed; its details can no longer be changed). Once a BUSINESS reaches COMPLETED it is fully locked too: any company field returns 409 ERRCUS_1604 (This customer\u0026#x27;s KYC is completed; verified identity fields can no longer be changed). Nothing stays editable. customFields is a partial merge: send one field and the others are preserved. countryId and currencyId are ignored if sent (no error), like any unknown field — both are derived server-side from country and currency.\">\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/update-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=Update+customer\u0026amp;description=Partial+update+%E2%80%94+send+only+what+changes.+**Exception%3A**+the+address+is+updated+as+a+whole.+If+you+send+any+of+%60addressLine1%60%2C+%60addressLine2%60%2C+%60city%60%2C+%60state%60+or\u0026amp;theme=668efa5ed0467f58a90d23e2\u0026amp;signature=432080cc31239c8f97a9ca7cf0b13a1519340991780b90175d878cd1ab077a8e\">\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=\"Update customer - Endl API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Partial update — send only what changes. Exception: the address is updated as a whole. If you send any of addressLine1, addressLine2, city, state or postalCode, you must also send addressLine1, city, state, postalCode and country (addressLine2 stays optional). An update must carry at least one updatable field with a non-blank value (it can be the same as the stored value). null, empty and whitespace-only values are ignored, so a field can\u0026#x27;t be cleared. An update with nothing to apply — an empty body, or {\u0026quot;company\u0026quot;:{}} — is 400 ERRCUS_1502. A questionnaire can\u0026#x27;t be updated: a non-empty questionnaire object is 400 ERRCUS_1303. An empty or non-object questionnaire is 400 ERRCUS_1301, and null is ignored. Once an INDIVIDUAL reaches COMPLETED it is fully locked. Any field — identity, currency or custom fields — returns 409 ERRCUS_1604 (This customer\u0026#x27;s KYC is completed; its details can no longer be changed). Once a BUSINESS reaches COMPLETED it is fully locked too: any company field returns 409 ERRCUS_1604 (This customer\u0026#x27;s KYC is completed; verified identity fields can no longer be changed). Nothing stays editable. customFields is a partial merge: send one field and the others are preserved. countryId and currencyId are ignored if sent (no error), like any unknown field — both are derived server-side from country and currency.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://zaymentfinanceltd.mintlify.app/_mintlify/api/og/v2?division=Onboarding\u0026amp;title=Update+customer\u0026amp;description=Partial+update+%E2%80%94+send+only+what+changes.+**Exception%3A**+the+address+is+updated+as+a+whole.+If+you+send+any+of+%60addressLine1%60%2C+%60addressLine2%60%2C+%60city%60%2C+%60state%60+or\u0026amp;theme=668efa5ed0467f58a90d23e2\u0026amp;signature=432080cc31239c8f97a9ca7cf0b13a1519340991780b90175d878cd1ab077a8e\">\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/update-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/update-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/update-customer#webpage\",\"url\":\"https://docs.endl.io/api-reference/onboarding/update-customer\",\"name\":\"Update customer\",\"description\":\"Partial update — send only what changes. Exception: the address is updated as a whole. If you send any of addressLine1, addressLine2, city, state or postalCode, you must also send addressLine1, city, state, postalCode and country (addressLine2 stays optional). An update must carry at least one updatable field with a non-blank value (it can be the same as the stored value). null, empty and whitespace-only values are ignored, so a field can't be cleared. An update with nothing to apply — an empty body, or {\\\"company\\\":{}} — is 400 ERRCUS_1502. A questionnaire can't be updated: a non-empty questionnaire object is 400 ERRCUS_1303. An empty or non-object questionnaire is 400 ERRCUS_1301, and null is ignored. Once an INDIVIDUAL reaches COMPLETED it is fully locked. Any field — identity, currency or custom fields — returns 409 ERRCUS_1604 (This customer's KYC is completed; its details can no longer be changed). Once a BUSINESS reaches COMPLETED it is fully locked too: any company field returns 409 ERRCUS_1604 (This customer's KYC is completed; verified identity fields can no longer be changed). Nothing stays editable. customFields is a partial merge: send one field and the others are preserved. countryId and currencyId are ignored if sent (no error), like any unknown field — both are derived server-side from country and currency.\",\"dateModified\":\"2026-10-23T13:28:07.830Z\",\"isPartOf\":{\"@id\":\"https://docs.endl.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.endl.io/api-reference/onboarding/update-customer#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.endl.io/api-reference/onboarding/update-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\":\"Update customer\",\"item\":\"https://docs.endl.io/api-reference/onboarding/update-customer\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.endl.io/api-reference/onboarding/update-customer#apireference\",\"headline\":\"Update customer\",\"name\":\"Update customer\",\"description\":\"Partial update — send only what changes. Exception: the address is updated as a whole. If you send any of addressLine1, addressLine2, city, state or postalCode, you must also send addressLine1, city, state, postalCode and country (addressLine2 stays optional). An update must carry at least one updatable field with a non-blank value (it can be the same as the stored value). null, empty and whitespace-only values are ignored, so a field can't be cleared. An update with nothing to apply — an empty body, or {\\\"company\\\":{}} — is 400 ERRCUS_1502. A questionnaire can't be updated: a non-empty questionnaire object is 400 ERRCUS_1303. An empty or non-object questionnaire is 400 ERRCUS_1301, and null is ignored. Once an INDIVIDUAL reaches COMPLETED it is fully locked. Any field — identity, currency or custom fields — returns 409 ERRCUS_1604 (This customer's KYC is completed; its details can no longer be changed). Once a BUSINESS reaches COMPLETED it is fully locked too: any company field returns 409 ERRCUS_1604 (This customer's KYC is completed; verified identity fields can no longer be changed). Nothing stays editable. customFields is a partial merge: send one field and the others are preserved. countryId and currencyId are ignored if sent (no error), like any unknown field — both are derived server-side from country and currency.\",\"url\":\"https://docs.endl.io/api-reference/onboarding/update-customer\",\"mainEntityOfPage\":{\"@id\":\"https://docs.endl.io/api-reference/onboarding/update-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)","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","description":"Returns this partner's customers, newest first. Deleted customers are excluded.","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":"Update 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"]}