Registers an end-user under the authenticated partner and stores their KYC record. The user must have kyc_level: "full" before they can quote trades or redemptions.Core KYC fields (country, full_name, kyc_provider, kyc_level, kyc_verified_at) are structured columns; provider-specific data goes in the free-form kyc_data object. If kyc_data includes id_type and id_number, GRAIL validates the id_number against the regex registered for that country/ID-type pair (advisory — absent regex means no validation is enforced).
Headers
string
required
A valid PARTNER scope key.
Request Body
string
required
Your internal identifier for this user. Unique within your partner (two users cannot share the same user_id). Stored as partner_user_id in GRAIL.
string
required
The user’s Solana wallet address. Must be a valid pubkey, and globally unique across all GRAIL users.
object
required
The user’s KYC record.
Show properties
string
required
ISO-3166-1 alpha-2 country code. Must match an active country in GRAIL’s country list (e.g., PK, AE, SA).
string
required
Full legal name. 1–255 characters.
string
required
Label identifying the KYC provider you used (e.g., "sumsub", "manual"). Free-form string — stored verbatim.
string
required
Must be "full". Partial or basic KYC is rejected.
string
required
ISO-8601 timestamp of when KYC was completed on your side.
object
Optional free-form JSON for provider-specific fields. If id_type and id_number are included, the server performs advisory validation of id_number against the country’s registered regex.
Response
string
GRAIL’s identifier for the user, prefixed gu_. Use this in all subsequent trade and redemption calls.
string
Echo of your user_id (the partner_user_id).
string
Echo of wallet_address.
string
ISO-8601 timestamp of user creation.
Errors
HTTP
error
When
400
invalid_request
Missing required fields, bad timestamp, bad full_name, kyc_data.id_number doesn’t match the regex
400
invalid_wallet
wallet_address is not a valid Solana pubkey
400
kyc_level_insufficient
kyc.kyc_level is not "full"
409
user_already_exists
wallet_address is already registered, or user_id is already registered for this partner
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"Oro Grail","colors":{"primary":"#00261c","light":"#00261c","dark":"#00261c"},"favicon":"https://mintcdn.com/oro-a5494d30/CRdlCQgjAt0bkkeb/images/oro-finance-logo.png?fit=max\u0026auto=format\u0026n=CRdlCQgjAt0bkkeb\u0026q=85\u0026s=a8a1d535fb3e82aecf71f61c154492c3","logo":{"light":"https://mintcdn.com/oro-a5494d30/CRdlCQgjAt0bkkeb/images/oro-finance-logo.png?fit=max\u0026auto=format\u0026n=CRdlCQgjAt0bkkeb\u0026q=85\u0026s=a8a1d535fb3e82aecf71f61c154492c3","dark":"https://mintcdn.com/oro-a5494d30/CRdlCQgjAt0bkkeb/images/oro-finance-logo.png?fit=max\u0026auto=format\u0026n=CRdlCQgjAt0bkkeb\u0026q=85\u0026s=a8a1d535fb3e82aecf71f61c154492c3"},"api":{"openapi":"openapi.json","mdx":{"server":"https://grail-stack-dev.onrender.com"}},"appearance":{"default":"light","strict":true},"navbar":{"links":[{"label":"Support","href":"mailto:support@oro.finance"}],"primary":{"type":"button","label":"Get Started","href":"https://grail.oro.finance"}},"footer":{"socials":{"website":"https://oro.finance","discord":"https://discord.gg/kb3buk7pgR","x":"https://x.com/orogoldapp"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"oro-a5494d30","hasAudioNarration":false,"actualSubdomain":"oro-a5494d30","customDomains":["docs.grail.oro.finance"],"gitSource":{"type":"github","owner":"oroweb3","repo":"oro-grail-docs","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae946832b3cf0697cfc9908:success","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API Reference","count":22},{"language":"default","tag":"Documentation","count":10},{"language":"default","tag":"Grail Overview","count":7},{"language":"default","tag":"Guides","count":7},{"language":"default","tag":"Trades","count":6},{"language":"default","tag":"Redemptions","count":5},{"language":"default","tag":"Integration Guides","count":5},{"language":"default","tag":"Users","count":3},{"language":"default","tag":"Authentication","count":2},{"language":"default","tag":"Partner","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":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":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/users/create-user","slug":"/api-reference/users/create-user","pageMetadata":{"title":"Create User","api":"POST /v1/users","description":"Registers an end-user under the authenticated partner. KYC is flexible JSON — core fields are required, provider-specific data lives in kyc_data.","href":"/api-reference/users/create-user"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Registers an end-user under the authenticated partner. KYC is flexible JSON — core fields are required, provider-specific data lives in kyc_data.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Expandable,Heading,ParamField,ResponseField,Table}=_components;if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Registers an end-user under the authenticated partner and stores their KYC record. The user must have `,_jsx(_components.code,{children:`kyc_level: \"full\"`}),` before they can quote trades or redemptions.`]}),`\n`,_jsxs(_components.p,{children:[`Core KYC fields (`,_jsx(_components.code,{children:`country`}),`, `,_jsx(_components.code,{children:`full_name`}),`, `,_jsx(_components.code,{children:`kyc_provider`}),`, `,_jsx(_components.code,{children:`kyc_level`}),`, `,_jsx(_components.code,{children:`kyc_verified_at`}),`) are structured columns; provider-specific data goes in the free-form `,_jsx(_components.code,{children:`kyc_data`}),` object. If `,_jsx(_components.code,{children:`kyc_data`}),` includes `,_jsx(_components.code,{children:`id_type`}),` and `,_jsx(_components.code,{children:`id_number`}),`, GRAIL validates the `,_jsx(_components.code,{children:`id_number`}),` against the regex registered for that country/ID-type pair (advisory — absent regex means no validation is enforced).`]}),`\n`,_jsx(Heading,{level:`2`,id:`headers`,children:`Headers`}),`\n`,_jsx(ParamField,{header:`x-api-key`,type:`string`,required:true,id:`param-x-api-key`,children:_jsxs(_components.p,{children:[`A valid `,_jsx(_components.code,{children:`PARTNER`}),` scope key.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`request-body`,children:`Request Body`}),`\n`,_jsx(ParamField,{body:`user_id`,type:`string`,required:true,id:`param-user-id`,children:_jsxs(_components.p,{children:[`Your internal identifier for this user. Unique within your partner (two users cannot share the same `,_jsx(_components.code,{children:`user_id`}),`). Stored as `,_jsx(_components.code,{children:`partner_user_id`}),` in GRAIL.`]})}),`\n`,_jsx(ParamField,{body:`wallet_address`,type:`string`,required:true,id:`param-wallet-address`,children:_jsx(_components.p,{children:`The user’s Solana wallet address. Must be a valid pubkey, and globally unique across all GRAIL users.`})}),`\n`,_jsxs(ParamField,{body:`kyc`,type:`object`,required:true,id:`param-kyc`,children:[_jsx(_components.p,{children:`The user’s KYC record.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(ParamField,{body:`country`,type:`string`,required:true,id:`param-country`,children:_jsxs(_components.p,{children:[`ISO-3166-1 alpha-2 country code. Must match an active country in GRAIL’s country list (e.g., `,_jsx(_components.code,{children:`PK`}),`, `,_jsx(_components.code,{children:`AE`}),`, `,_jsx(_components.code,{children:`SA`}),`).`]})}),_jsx(ParamField,{body:`full_name`,type:`string`,required:true,id:`param-full-name`,children:_jsx(_components.p,{children:`Full legal name. 1–255 characters.`})}),_jsx(ParamField,{body:`kyc_provider`,type:`string`,required:true,id:`param-kyc-provider`,children:_jsxs(_components.p,{children:[`Label identifying the KYC provider you used (e.g., `,_jsx(_components.code,{children:`\"sumsub\"`}),`, `,_jsx(_components.code,{children:`\"manual\"`}),`). Free-form string — stored verbatim.`]})}),_jsx(ParamField,{body:`kyc_level`,type:`string`,required:true,id:`param-kyc-level`,children:_jsxs(_components.p,{children:[`Must be `,_jsx(_components.code,{children:`\"full\"`}),`. Partial or basic KYC is rejected.`]})}),_jsx(ParamField,{body:`kyc_verified_at`,type:`string`,required:true,id:`param-kyc-verified-at`,children:_jsx(_components.p,{children:`ISO-8601 timestamp of when KYC was completed on your side.`})}),_jsx(ParamField,{body:`kyc_data`,type:`object`,id:`param-kyc-data`,children:_jsxs(_components.p,{children:[`Optional free-form JSON for provider-specific fields. If `,_jsx(_components.code,{children:`id_type`}),` and `,_jsx(_components.code,{children:`id_number`}),` are included, the server performs advisory validation of `,_jsx(_components.code,{children:`id_number`}),` against the country’s registered regex.`]})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsx(ResponseField,{name:`grail_user_id`,type:`string`,id:`param-grail-user-id`,children:_jsxs(_components.p,{children:[`GRAIL’s identifier for the user, prefixed `,_jsx(_components.code,{children:`gu_`}),`. Use this in all subsequent trade and redemption calls.`]})}),`\n`,_jsx(ResponseField,{name:`user_id`,type:`string`,id:`param-user-id-1`,children:_jsxs(_components.p,{children:[`Echo of your `,_jsx(_components.code,{children:`user_id`}),` (the `,_jsx(_components.code,{children:`partner_user_id`}),`).`]})}),`\n`,_jsx(ResponseField,{name:`wallet_address`,type:`string`,id:`param-wallet-address-1`,children:_jsxs(_components.p,{children:[`Echo of `,_jsx(_components.code,{children:`wallet_address`}),`.`]})}),`\n`,_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:_jsx(_components.p,{children:`ISO-8601 timestamp of user creation.`})}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`HTTP`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`error`})}),_jsx(_components.th,{children:`When`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_request`})}),_jsxs(_components.td,{children:[`Missing required fields, bad timestamp, bad `,_jsx(_components.code,{children:`full_name`}),`, `,_jsx(_components.code,{children:`kyc_data.id_number`}),` doesn’t match the regex`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_wallet`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`wallet_address`}),` is not a valid Solana pubkey`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`kyc_level_insufficient`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`kyc.kyc_level`}),` is not `,_jsx(_components.code,{children:`\"full\"`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`user_already_exists`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`wallet_address`}),` is already registered, or `,_jsx(_components.code,{children:`user_id`}),` is already registered for this partner`]})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create User","api":"POST /v1/users","description":"Registers an end-user under the authenticated partner. KYC is flexible JSON — core fields are required, provider-specific data lives in kyc_data.","href":"/api-reference/users/create-user"}}},"mdxSourceWithNoJs":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,ParamField,RequestExample,ResponseExample,ResponseField,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!RequestExample)_missingMdxReference(`RequestExample`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Registers an end-user under the authenticated partner and stores their KYC record. The user must have `,_jsx(_components.code,{children:`kyc_level: \"full\"`}),` before they can quote trades or redemptions.`]}),`\n`,_jsxs(_components.p,{children:[`Core KYC fields (`,_jsx(_components.code,{children:`country`}),`, `,_jsx(_components.code,{children:`full_name`}),`, `,_jsx(_components.code,{children:`kyc_provider`}),`, `,_jsx(_components.code,{children:`kyc_level`}),`, `,_jsx(_components.code,{children:`kyc_verified_at`}),`) are structured columns; provider-specific data goes in the free-form `,_jsx(_components.code,{children:`kyc_data`}),` object. If `,_jsx(_components.code,{children:`kyc_data`}),` includes `,_jsx(_components.code,{children:`id_type`}),` and `,_jsx(_components.code,{children:`id_number`}),`, GRAIL validates the `,_jsx(_components.code,{children:`id_number`}),` against the regex registered for that country/ID-type pair (advisory — absent regex means no validation is enforced).`]}),`\n`,_jsx(Heading,{level:`2`,id:`headers`,children:`Headers`}),`\n`,_jsx(ParamField,{header:`x-api-key`,type:`string`,required:true,id:`param-x-api-key`,children:_jsxs(_components.p,{children:[`A valid `,_jsx(_components.code,{children:`PARTNER`}),` scope key.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`request-body`,children:`Request Body`}),`\n`,_jsx(ParamField,{body:`user_id`,type:`string`,required:true,id:`param-user-id`,children:_jsxs(_components.p,{children:[`Your internal identifier for this user. Unique within your partner (two users cannot share the same `,_jsx(_components.code,{children:`user_id`}),`). Stored as `,_jsx(_components.code,{children:`partner_user_id`}),` in GRAIL.`]})}),`\n`,_jsx(ParamField,{body:`wallet_address`,type:`string`,required:true,id:`param-wallet-address`,children:_jsx(_components.p,{children:`The user’s Solana wallet address. Must be a valid pubkey, and globally unique across all GRAIL users.`})}),`\n`,_jsxs(ParamField,{body:`kyc`,type:`object`,required:true,id:`param-kyc`,children:[_jsx(_components.p,{children:`The user’s KYC record.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(ParamField,{body:`country`,type:`string`,required:true,id:`param-country`,children:_jsxs(_components.p,{children:[`ISO-3166-1 alpha-2 country code. Must match an active country in GRAIL’s country list (e.g., `,_jsx(_components.code,{children:`PK`}),`, `,_jsx(_components.code,{children:`AE`}),`, `,_jsx(_components.code,{children:`SA`}),`).`]})}),_jsx(ParamField,{body:`full_name`,type:`string`,required:true,id:`param-full-name`,children:_jsx(_components.p,{children:`Full legal name. 1–255 characters.`})}),_jsx(ParamField,{body:`kyc_provider`,type:`string`,required:true,id:`param-kyc-provider`,children:_jsxs(_components.p,{children:[`Label identifying the KYC provider you used (e.g., `,_jsx(_components.code,{children:`\"sumsub\"`}),`, `,_jsx(_components.code,{children:`\"manual\"`}),`). Free-form string — stored verbatim.`]})}),_jsx(ParamField,{body:`kyc_level`,type:`string`,required:true,id:`param-kyc-level`,children:_jsxs(_components.p,{children:[`Must be `,_jsx(_components.code,{children:`\"full\"`}),`. Partial or basic KYC is rejected.`]})}),_jsx(ParamField,{body:`kyc_verified_at`,type:`string`,required:true,id:`param-kyc-verified-at`,children:_jsx(_components.p,{children:`ISO-8601 timestamp of when KYC was completed on your side.`})}),_jsx(ParamField,{body:`kyc_data`,type:`object`,id:`param-kyc-data`,children:_jsxs(_components.p,{children:[`Optional free-form JSON for provider-specific fields. If `,_jsx(_components.code,{children:`id_type`}),` and `,_jsx(_components.code,{children:`id_number`}),` are included, the server performs advisory validation of `,_jsx(_components.code,{children:`id_number`}),` against the country’s registered regex.`]})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsx(ResponseField,{name:`grail_user_id`,type:`string`,id:`param-grail-user-id`,children:_jsxs(_components.p,{children:[`GRAIL’s identifier for the user, prefixed `,_jsx(_components.code,{children:`gu_`}),`. Use this in all subsequent trade and redemption calls.`]})}),`\n`,_jsx(ResponseField,{name:`user_id`,type:`string`,id:`param-user-id-1`,children:_jsxs(_components.p,{children:[`Echo of your `,_jsx(_components.code,{children:`user_id`}),` (the `,_jsx(_components.code,{children:`partner_user_id`}),`).`]})}),`\n`,_jsx(ResponseField,{name:`wallet_address`,type:`string`,id:`param-wallet-address-1`,children:_jsxs(_components.p,{children:[`Echo of `,_jsx(_components.code,{children:`wallet_address`}),`.`]})}),`\n`,_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:_jsx(_components.p,{children:`ISO-8601 timestamp of user creation.`})}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`HTTP`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`error`})}),_jsx(_components.th,{children:`When`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_request`})}),_jsxs(_components.td,{children:[`Missing required fields, bad timestamp, bad `,_jsx(_components.code,{children:`full_name`}),`, `,_jsx(_components.code,{children:`kyc_data.id_number`}),` doesn’t match the regex`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_wallet`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`wallet_address`}),` is not a valid Solana pubkey`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`kyc_level_insufficient`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`kyc.kyc_level`}),` is not `,_jsx(_components.code,{children:`\"full\"`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`user_already_exists`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`wallet_address`}),` is already registered, or `,_jsx(_components.code,{children:`user_id`}),` is already registered for this partner`]})]})]})]}),`\n`,_jsx(RequestExample,{children:_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`18`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`18`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://grail-stack-dev.onrender.com/v1/users`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"x-api-key: grail_partner_\u003chex>\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"user_id\": \"partner_internal_user_001\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"wallet_address\": \"2u7vVGJCTtsijCqWJNCEknVkuLjeU7Rd4PMg4dXuTZGx\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"kyc\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"country\": \"PK\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"full_name\": \"Alice Example\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"kyc_provider\": \"manual\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"kyc_level\": \"full\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"kyc_verified_at\": \"2026-04-17T00:00:00Z\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"kyc_data\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"id_type\": \"CNIC\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"id_number\": \"12345-1234567-1\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})}),`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`201 Created`,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"grail_user_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"gu_6b60956e-a8ee-4de2-8128-04c7fdf633c3\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"user_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"partner_internal_user_001\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"wallet_address\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2u7vVGJCTtsijCqWJNCEknVkuLjeU7Rd4PMg4dXuTZGx\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"created_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-04-17T10:15:30.000Z\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create User","api":"POST /v1/users","description":"Registers an end-user under the authenticated partner. KYC is flexible JSON — core fields are required, provider-specific data lives in kyc_data.","href":"/api-reference/users/create-user"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Headers","slug":"headers","depth":2,"children":[]},{"title":"Request Body","slug":"request-body","depth":2,"children":[]},{"title":"Response","slug":"response","depth":2,"children":[]},{"title":"Errors","slug":"errors","depth":2,"children":[]}],"codeExamples":{"request":{"type":"RequestExample","children":[{"filename":"cURL","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"shellscript\">\u003ccode language=\"shellscript\" numberOfLines=\"18\">\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#DCDCAA\">curl\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -X\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> POST\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> https://grail-stack-dev.onrender.com/v1/users\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"x-api-key: grail_partner_\u0026#x3C;hex>\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"Content-Type: application/json\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -d\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> '{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"user_id\": \"partner_internal_user_001\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"wallet_address\": \"2u7vVGJCTtsijCqWJNCEknVkuLjeU7Rd4PMg4dXuTZGx\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"kyc\": {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"country\": \"PK\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"full_name\": \"Alice Example\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"kyc_provider\": \"manual\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"kyc_level\": \"full\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"kyc_verified_at\": \"2026-04-17T00:00:00Z\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"kyc_data\": {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"id_type\": \"CNIC\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"id_number\": \"12345-1234567-1\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }'\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]},"response":{"type":"ResponseExample","children":[{"filename":"201 Created","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"6\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"grail_user_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"gu_6b60956e-a8ee-4de2-8128-04c7fdf633c3\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"user_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"partner_internal_user_001\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"wallet_address\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2u7vVGJCTtsijCqWJNCEknVkuLjeU7Rd4PMg4dXuTZGx\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"created_at\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-04-17T10:15:30.000Z\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}},"endpoint":{"title":"Create User","path":"/v1/users","servers":[{"url":"https://grail-stack-dev.onrender.com"}],"method":"post","request":{"security":[],"parameters":{"query":{},"header":{"x-api-key":{"schema":[{"type":"string","description":"A valid `PARTNER` scope key.","required":true}]}},"cookie":{},"path":{}},"body":{"application/json":{"schemaArray":[{"type":"object","properties":{"user_id":[{"type":"string","description":"Your internal identifier for this user. Unique within your partner (two users cannot share the same `user_id` ). Stored as `partner_user_id` in GRAIL.","required":true}],"wallet_address":[{"type":"string","description":"The user’s Solana wallet address. Must be a valid pubkey, and globally unique across all GRAIL users.","required":true}],"kyc":[{"type":"object","properties":{"country":[{"type":"string","description":"ISO-3166-1 alpha-2 country code. Must match an active country in GRAIL’s country list (e.g., `PK` , `AE` , `SA` ).","required":true}],"full_name":[{"type":"string","description":"Full legal name. 1–255 characters.","required":true}],"kyc_provider":[{"type":"string","description":"Label identifying the KYC provider you used (e.g., `\"sumsub\"` , `\"manual\"` ). Free-form string — stored verbatim.","required":true}],"kyc_level":[{"type":"string","description":"Must be `\"full\"` . Partial or basic KYC is rejected.","required":true}],"kyc_verified_at":[{"type":"string","description":"ISO-8601 timestamp of when KYC was completed on your side.","required":true}],"kyc_data":[{"type":"object","properties":{},"description":"Optional free-form JSON for provider-specific fields. If `id_type` and `id_number` are included, the server performs advisory validation of `id_number` against the country’s registered regex."}]},"description":"The user’s KYC record.","required":true}]}}],"examples":{"example":{"value":{"user_id":"\u003cstring>","wallet_address":"\u003cstring>","kyc":{"country":"\u003cstring>","full_name":"\u003cstring>","kyc_provider":"\u003cstring>","kyc_level":"\u003cstring>","kyc_verified_at":"\u003cstring>","kyc_data":{}}}}}}}},"response":{"200":{"application/json":{"schemaArray":[{"type":"object","properties":{"grail_user_id":[{"type":"string","description":"GRAIL’s identifier for the user, prefixed `gu_` . Use this in all subsequent trade and redemption calls."}],"user_id":[{"type":"string","description":"Echo of your `user_id` (the `partner_user_id` )."}],"wallet_address":[{"type":"string","description":"Echo of `wallet_address` ."}],"created_at":[{"type":"string","description":"ISO-8601 timestamp of user creation."}]}}],"examples":{"example":{"value":{"grail_user_id":"\u003cstring>","user_id":"\u003cstring>","wallet_address":"\u003cstring>","created_at":"\u003cstring>"}}}}}},"deprecated":false}},"jsLinks":[],"subdomain":"oro-a5494d30","siteName":"Oro Grail","title":"Create User - Oro Grail","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-20T10:27:39.306Z","originalFileLocation":"api-reference/users/create-user.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";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=\"light\"}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=\"Registers an end-user under the authenticated partner. KYC is flexible JSON — core fields are required, provider-specific data lives in kyc_data.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Oro Grail\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create User - Oro Grail\">\u003cmeta data-mint-head property=\"og:description\" content=\"Registers an end-user under the authenticated partner. KYC is flexible JSON — core fields are required, provider-specific data lives in kyc_data.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Oro Grail\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.grail.oro.finance/api-reference/users/create-user\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://oro-a5494d30.mintlify.site/_mintlify/api/og/v2?division=Users\u0026amp;title=Create+User\u0026amp;description=Registers+an+end-user+under+the+authenticated+partner.+KYC+is+flexible+JSON+%E2%80%94+core+fields+are+required%2C+provider-specific+data+lives+in+kyc_data.\u0026amp;theme=304c9bec0b792d02be331269\u0026amp;signature=cbd20dc2d7543bcc77963f6cf2c70705ec49e8c5740b4136071da5644e8be9cf\">\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 User - Oro Grail\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Registers an end-user under the authenticated partner. KYC is flexible JSON — core fields are required, provider-specific data lives in kyc_data.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://oro-a5494d30.mintlify.site/_mintlify/api/og/v2?division=Users\u0026amp;title=Create+User\u0026amp;description=Registers+an+end-user+under+the+authenticated+partner.+KYC+is+flexible+JSON+%E2%80%94+core+fields+are+required%2C+provider-specific+data+lives+in+kyc_data.\u0026amp;theme=304c9bec0b792d02be331269\u0026amp;signature=cbd20dc2d7543bcc77963f6cf2c70705ec49e8c5740b4136071da5644e8be9cf\">\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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Oro Grail\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00261c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.grail.oro.finance/api-reference/users/create-user\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/users/create-user.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.grail.oro.finance/#organization\",\"name\":\"Oro Grail\",\"url\":\"https://docs.grail.oro.finance\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/oro-a5494d30/CRdlCQgjAt0bkkeb/images/oro-finance-logo.png?fit=max\u0026auto=format\u0026n=CRdlCQgjAt0bkkeb\u0026q=85\u0026s=a8a1d535fb3e82aecf71f61c154492c3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.grail.oro.finance#website\",\"name\":\"Oro Grail\",\"url\":\"https://docs.grail.oro.finance\",\"publisher\":{\"@id\":\"https://docs.grail.oro.finance/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.grail.oro.finance/api-reference/users/create-user#webpage\",\"url\":\"https://docs.grail.oro.finance/api-reference/users/create-user\",\"name\":\"Create User\",\"description\":\"Registers an end-user under the authenticated partner. KYC is flexible JSON — core fields are required, provider-specific data lives in kyc_data.\",\"dateModified\":\"2026-04-20T10:27:39.306Z\",\"isPartOf\":{\"@id\":\"https://docs.grail.oro.finance#website\"},\"breadcrumb\":{\"@id\":\"https://docs.grail.oro.finance/api-reference/users/create-user#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.grail.oro.finance/api-reference/users/create-user#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Oro Grail\",\"item\":\"https://docs.grail.oro.finance\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create User\",\"item\":\"https://docs.grail.oro.finance/api-reference/users/create-user\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.grail.oro.finance/api-reference/users/create-user#apireference\",\"headline\":\"Create User\",\"name\":\"Create User\",\"description\":\"Registers an end-user under the authenticated partner. KYC is flexible JSON — core fields are required, provider-specific data lives in kyc_data.\",\"url\":\"https://docs.grail.oro.finance/api-reference/users/create-user\",\"mainEntityOfPage\":{\"@id\":\"https://docs.grail.oro.finance/api-reference/users/create-user#webpage\"},\"dateModified\":\"2026-04-20T10:27:39.306Z\",\"publisher\":{\"@id\":\"https://docs.grail.oro.finance/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.grail.oro.finance#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Oro Grail\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Oro Grail\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/users/create-user.md","siteName":"Oro Grail","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/overview"}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"API Overview","href":"/api-reference/overview"}]},{"group":"General","pages":[{"title":"Health Check","api":"GET /health","href":"/api-reference/general/health"}]},{"group":"Authentication","pages":[{"title":"Request API Key Challenge","api":"POST /v1/auth/challenge","href":"/api-reference/authentication/request-challenge"},{"title":"Create API Key","api":"POST /v1/auth/api-key","href":"/api-reference/authentication/create-api-key"}]},{"group":"Partner","pages":[{"title":"List API Keys","api":"GET /v1/partner/api-keys","href":"/api-reference/partner/list-api-keys"},{"title":"Revoke API Key","api":"POST /v1/partner/api-keys/{key_id}/revoke","description":"Permanently revokes an API key. Revocation is immediate and irreversible.","href":"/api-reference/partner/revoke-api-key"}]},{"group":"Users","pages":[{"title":"Create User","api":"POST /v1/users","href":"/api-reference/users/create-user"},{"title":"List Users","api":"GET /v1/users","description":"Lists users for the authenticated partner, with optional filters.","href":"/api-reference/users/list-users"},{"title":"Get User","api":"GET /v1/users/{grail_user_id}","href":"/api-reference/users/get-user"}]},{"group":"Denominations","pages":[{"title":"List Denominations","api":"GET /v1/denominations","href":"/api-reference/denominations/list-denominations"}]},{"group":"Trades","pages":[{"title":"Quote Buy","api":"POST /v1/buy","href":"/api-reference/trades/quote-buy"},{"title":"Submit Buy","api":"POST /v1/buy/{trade_id}/submit","href":"/api-reference/trades/submit-buy"},{"title":"Quote Sell","api":"POST /v1/sell","href":"/api-reference/trades/quote-sell"},{"title":"Submit Sell","api":"POST /v1/sell/{trade_id}/submit","href":"/api-reference/trades/submit-sell"},{"title":"Get Trade","api":"GET /v1/trades/{trade_id}","href":"/api-reference/trades/get-trade"},{"title":"List Trades","api":"GET /v1/trades","href":"/api-reference/trades/list-trades"}]},{"group":"Redemptions","pages":[{"title":"Quote Redemption","api":"POST /v1/redemptions","href":"/api-reference/redemptions/quote-redemption"},{"title":"Submit Redemption","api":"POST /v1/redemptions/{id}/submit","href":"/api-reference/redemptions/submit-redemption"},{"title":"Get Redemption","api":"GET /v1/redemptions/{id}","href":"/api-reference/redemptions/get-redemption"},{"title":"List Redemptions","api":"GET /v1/redemptions","href":"/api-reference/redemptions/list-redemptions"},{"title":"Cancel Redemption","api":"POST /v1/redemptions/{id}/cancel","href":"/api-reference/redemptions/cancel-redemption"}]}]}]},"basePath":"","title":"Create User - Oro Grail","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js"]}