# Export KINTRA_API for your environment first; the base URL is on the introduction page.KEY="YOUR_TENANT_KEY_ID"SECRET="YOUR_SIGNING_SECRET"# The signature covers the path and query exactly as sent, so both are split# off the base URL and reused for the request line below.API_PATH="/${KINTRA_API#*://*/}"API_HOST="${KINTRA_API%"$API_PATH"}"METHOD="POST"PATH_AND_QUERY="$API_PATH/gateway/customers"# One compact line, signed and sent unchanged. The server signs a# re-serialization of the body it parsed, so reformatting this fails with a 401.BODY='{"email":"YOUR_EMAIL"}'TIMESTAMP="$(date +%s)"SIGNATURE="$(printf '%s' "$TIMESTAMP$METHOD$PATH_AND_QUERY$BODY" \ | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $NF}')"curl -sS -w '\n%{http_code}' -X "$METHOD" "$API_HOST$PATH_AND_QUERY" \ -H "X-Tenant-Key: $KEY" \ -H "X-Tenant-Timestamp: $TIMESTAMP" \ -H "X-Tenant-Signature: $SIGNATURE" \ -H "Content-Type: application/json" \ -H "X-Idempotency-Key: YOUR_IDEMPOTENCY_KEY" \ --data-binary "$BODY"
Registers a customer under your tenant. email is the only required body field. phone, first_name, last_name and date_of_birth are optional; when supplied, date_of_birth is a calendar date written YYYY-MM-DD and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 VALIDATION_INVALID_INPUT before anything is created, and error.details.fields names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. attributes and a cohort holding country_id, club_ids and metadata are optional. Call it once per person, at signup or when importing an account you already hold. The response data carries the created customer, including its id, username, phone, status and onboarding_status; keep the id, because every other customer route takes it. An email address already registered under the tenant returns 409. X-Idempotency-Key is required: a missing key returns 400 IDEMPOTENCY_KEY_REQUIRED, and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 IDEMPOTENCY_KEY_CONFLICT, and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.
POST
/
gateway
/
customers
cURL
# Export KINTRA_API for your environment first; the base URL is on the introduction page.KEY="YOUR_TENANT_KEY_ID"SECRET="YOUR_SIGNING_SECRET"# The signature covers the path and query exactly as sent, so both are split# off the base URL and reused for the request line below.API_PATH="/${KINTRA_API#*://*/}"API_HOST="${KINTRA_API%"$API_PATH"}"METHOD="POST"PATH_AND_QUERY="$API_PATH/gateway/customers"# One compact line, signed and sent unchanged. The server signs a# re-serialization of the body it parsed, so reformatting this fails with a 401.BODY='{"email":"YOUR_EMAIL"}'TIMESTAMP="$(date +%s)"SIGNATURE="$(printf '%s' "$TIMESTAMP$METHOD$PATH_AND_QUERY$BODY" \ | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $NF}')"curl -sS -w '\n%{http_code}' -X "$METHOD" "$API_HOST$PATH_AND_QUERY" \ -H "X-Tenant-Key: $KEY" \ -H "X-Tenant-Timestamp: $TIMESTAMP" \ -H "X-Tenant-Signature: $SIGNATURE" \ -H "Content-Type: application/json" \ -H "X-Idempotency-Key: YOUR_IDEMPOTENCY_KEY" \ --data-binary "$BODY"
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"KINTRA","colors":{"primary":"#35cbff","light":"#5be7ff","dark":"#0b7fa3"},"logo":{"light":"https://mintcdn.com/kintra/aV869_4X610yKJzW/logo/light.png?fit=max\u0026auto=format\u0026n=aV869_4X610yKJzW\u0026q=85\u0026s=d55bc842096a5d67e57c9ab099d58762","dark":"https://mintcdn.com/kintra/aV869_4X610yKJzW/logo/dark.png?fit=max\u0026auto=format\u0026n=aV869_4X610yKJzW\u0026q=85\u0026s=e0a69c1f9fff02d0cacd13175c0b4336"},"favicon":"https://mintcdn.com/kintra/aV869_4X610yKJzW/favicon.ico?fit=max\u0026auto=format\u0026n=aV869_4X610yKJzW\u0026q=85\u0026s=136dbc7fc4ffe42622617d330e1d8f34","api":{"playground":{"display":"interactive"},"examples":{"languages":["curl","javascript","python"],"prefill":true,"autogenerate":true}},"appearance":{"default":"dark","strict":true},"background":{"color":{"dark":"#121212"}},"fonts":{"heading":{"family":"Plus Jakarta Sans"},"body":{"family":"Plus Jakarta Sans"}},"banner":{"content":"Production environment","dismissible":false},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kintra","hasAudioNarration":false,"actualSubdomain":"kintra","customDomains":["docs.kintra.io"],"gitSource":{"type":"github","owner":"marco-pellar","repo":"kintra-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6a82feba3ea465de84fb99ea","collectionId":"93576bd7-eee2-4565-b6b0-ced101e57af4","liveDeploymentHistoryId":"6a82feba3ea465de84fb99ea","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a82feba3ea465de84fb99ea:success","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"API reference","count":94},{"language":"default","tag":"Portal API","count":59},{"language":"default","tag":"Gateway API","count":34},{"language":"default","tag":"Customers","count":24},{"language":"default","tag":"Documentation","count":13},{"language":"default","tag":"Rewards","count":11},{"language":"default","tag":"Tiers","count":11},{"language":"default","tag":"Analytics","count":10},{"language":"default","tag":"Cohorts","count":7},{"language":"default","tag":"Concepts","count":6}]},"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":true},"customCss":[{"filePath":"style.css","content":":root{--kintra-code-bg:#0e0e0e;--kintra-code-surface:rgba(255, 255, 255, 0.04);--kintra-code-stroke:rgba(255, 255, 255, 0.08)}pre{background-color:var(--kintra-code-bg);border:1px solid var(--kintra-code-stroke);border-radius:12px}pre code{background-color:transparent;border:0}:not(pre)>code{background-color:var(--kintra-code-surface);border:1px solid var(--kintra-code-stroke);border-radius:6px}"}],"page":{"pagePath":"api-reference/gateway/customers/create-a-customer","slug":"/api-reference/gateway/customers/create-a-customer","pageMetadata":{"title":"Create a customer","description":"Registers a customer under your tenant. `email` is the only required body field. `phone`, `first_name`, `last_name` and `date_of_birth` are optional; when supplied, `date_of_birth` is a calendar date written `YYYY-MM-DD` and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 `VALIDATION_INVALID_INPUT` before anything is created, and `error.details.fields` names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. `attributes` and a `cohort` holding `country_id`, `club_ids` and `metadata` are optional. Call it once per person, at signup or when importing an account you already hold. The response `data` carries the created customer, including its `id`, `username`, `phone`, `status` and `onboarding_status`; keep the `id`, because every other customer route takes it. An email address already registered under the tenant returns 409. `X-Idempotency-Key` is required: a missing key returns 400 `IDEMPOTENCY_KEY_REQUIRED`, and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 `IDEMPOTENCY_KEY_CONFLICT`, and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json post /gateway/customers","href":"/api-reference/gateway/customers/create-a-customer","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Registers a customer under your tenant. \", _jsx(_components.code, {\n children: \"email\"\n }), \" is the only required body field. \", _jsx(_components.code, {\n children: \"phone\"\n }), \", \", _jsx(_components.code, {\n children: \"first_name\"\n }), \", \", _jsx(_components.code, {\n children: \"last_name\"\n }), \" and \", _jsx(_components.code, {\n children: \"date_of_birth\"\n }), \" are optional; when supplied, \", _jsx(_components.code, {\n children: \"date_of_birth\"\n }), \" is a calendar date written \", _jsx(_components.code, {\n children: \"YYYY-MM-DD\"\n }), \" and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 \", _jsx(_components.code, {\n children: \"VALIDATION_INVALID_INPUT\"\n }), \" before anything is created, and \", _jsx(_components.code, {\n children: \"error.details.fields\"\n }), \" names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. \", _jsx(_components.code, {\n children: \"attributes\"\n }), \" and a \", _jsx(_components.code, {\n children: \"cohort\"\n }), \" holding \", _jsx(_components.code, {\n children: \"country_id\"\n }), \", \", _jsx(_components.code, {\n children: \"club_ids\"\n }), \" and \", _jsx(_components.code, {\n children: \"metadata\"\n }), \" are optional. Call it once per person, at signup or when importing an account you already hold. The response \", _jsx(_components.code, {\n children: \"data\"\n }), \" carries the created customer, including its \", _jsx(_components.code, {\n children: \"id\"\n }), \", \", _jsx(_components.code, {\n children: \"username\"\n }), \", \", _jsx(_components.code, {\n children: \"phone\"\n }), \", \", _jsx(_components.code, {\n children: \"status\"\n }), \" and \", _jsx(_components.code, {\n children: \"onboarding_status\"\n }), \"; keep the \", _jsx(_components.code, {\n children: \"id\"\n }), \", because every other customer route takes it. An email address already registered under the tenant returns 409. \", _jsx(_components.code, {\n children: \"X-Idempotency-Key\"\n }), \" is required: a missing key returns 400 \", _jsx(_components.code, {\n children: \"IDEMPOTENCY_KEY_REQUIRED\"\n }), \", and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 \", _jsx(_components.code, {\n children: \"IDEMPOTENCY_KEY_CONFLICT\"\n }), \", and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.\"]\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":"Create a customer","description":"Registers a customer under your tenant. `email` is the only required body field. `phone`, `first_name`, `last_name` and `date_of_birth` are optional; when supplied, `date_of_birth` is a calendar date written `YYYY-MM-DD` and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 `VALIDATION_INVALID_INPUT` before anything is created, and `error.details.fields` names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. `attributes` and a `cohort` holding `country_id`, `club_ids` and `metadata` are optional. Call it once per person, at signup or when importing an account you already hold. The response `data` carries the created customer, including its `id`, `username`, `phone`, `status` and `onboarding_status`; keep the `id`, because every other customer route takes it. An email address already registered under the tenant returns 409. `X-Idempotency-Key` is required: a missing key returns 400 `IDEMPOTENCY_KEY_REQUIRED`, and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 `IDEMPOTENCY_KEY_CONFLICT`, and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json post /gateway/customers","href":"/api-reference/gateway/customers/create-a-customer","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Registers a customer under your tenant. `email` is the only required body field. `phone`, `first_name`, `last_name` and `date_of_birth` are optional; when supplied, `date_of_birth` is a calendar date written `YYYY-MM-DD` and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 `VALIDATION_INVALID_INPUT` before anything is created, and `error.details.fields` names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. `attributes` and a `cohort` holding `country_id`, `club_ids` and `metadata` are optional. Call it once per person, at signup or when importing an account you already hold. The response `data` carries the created customer, including its `id`, `username`, `phone`, `status` and `onboarding_status`; keep the `id`, because every other customer route takes it. An email address already registered under the tenant returns 409. `X-Idempotency-Key` is required: a missing key returns 400 `IDEMPOTENCY_KEY_REQUIRED`, and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 `IDEMPOTENCY_KEY_CONFLICT`, and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.","operationId":"CreateCustomer","parameters":["d033afab-acec-4fa3-aa0c-7de135d0c9da","0422f416-c0bd-4796-8080-2bbac8589559","550b2f73-b9dd-4004-8f57-468154e8e291"],"requestBody":"8c7ea140-0f75-4be4-80ca-e55aa8a9ff5b","responses":{"200":"3531bdd7-1605-4002-861f-60100963372d","201":"cb4c947f-e936-415a-96f0-839f3a7a6930","401":"a853a21c-3fbe-45d4-a98b-55989f0e0a35","404":"08e4c15a-5e2b-420f-9979-beba5237ae8a","409":"a20b0781-1771-44d0-8cbf-1072102a10c9","500":"8c56d76b-385d-4551-8535-1e89181391be"},"security":["5a412001-64cd-4c89-9d76-10470fd38841"],"summary":"Create a customer","tags":["Customers"],"x-codeSamples":[{"label":"cURL","lang":"bash","source":"# Export KINTRA_API for your environment first; the base URL is on the introduction page.\nKEY=\"YOUR_TENANT_KEY_ID\"\nSECRET=\"YOUR_SIGNING_SECRET\"\n\n# The signature covers the path and query exactly as sent, so both are split\n# off the base URL and reused for the request line below.\nAPI_PATH=\"/${KINTRA_API#*://*/}\"\nAPI_HOST=\"${KINTRA_API%\"$API_PATH\"}\"\nMETHOD=\"POST\"\nPATH_AND_QUERY=\"$API_PATH/gateway/customers\"\n\n# One compact line, signed and sent unchanged. The server signs a\n# re-serialization of the body it parsed, so reformatting this fails with a 401.\nBODY='{\"email\":\"YOUR_EMAIL\"}'\n\nTIMESTAMP=\"$(date +%s)\"\nSIGNATURE=\"$(printf '%s' \"$TIMESTAMP$METHOD$PATH_AND_QUERY$BODY\" \\\n | openssl dgst -sha256 -hmac \"$SECRET\" | awk '{print $NF}')\"\n\ncurl -sS -w '\\n%{http_code}' -X \"$METHOD\" \"$API_HOST$PATH_AND_QUERY\" \\\n -H \"X-Tenant-Key: $KEY\" \\\n -H \"X-Tenant-Timestamp: $TIMESTAMP\" \\\n -H \"X-Tenant-Signature: $SIGNATURE\" \\\n -H \"Content-Type: application/json\" \\\n -H \"X-Idempotency-Key: YOUR_IDEMPOTENCY_KEY\" \\\n --data-binary \"$BODY\"\n"},{"label":"TypeScript","lang":"typescript","source":"import { createHmac } from 'node:crypto'\n\n// Export KINTRA_API for your environment first; the base URL is on the introduction page.\nconst { origin, pathname } = new URL(process.env.KINTRA_API ?? '')\nconst key = 'YOUR_TENANT_KEY_ID'\nconst secret = 'YOUR_SIGNING_SECRET'\n\nconst method = 'POST'\n// The signature covers the path and query as sent, starting at the API prefix.\nconst pathAndQuery = `${pathname}/gateway/customers`\n\n// Serialized once and used twice. The server signs a re-serialization of the\n// body it parsed, so the bytes signed and the bytes sent have to be identical.\nconst body = JSON.stringify({\n \"email\": \"YOUR_EMAIL\"\n})\n\nconst timestamp = Math.floor(Date.now() / 1000).toString()\nconst signature = createHmac('sha256', secret).update(`${timestamp}${method}${pathAndQuery}${body}`).digest('hex')\n\nconst response = await fetch(`${origin}${pathAndQuery}`, {\n method,\n headers: {\n 'X-Tenant-Key': key,\n 'X-Tenant-Timestamp': timestamp,\n 'X-Tenant-Signature': signature,\n 'Content-Type': 'application/json',\n 'X-Idempotency-Key': 'YOUR_IDEMPOTENCY_KEY'\n },\n body\n})\n\nconsole.log(response.status, await response.json())\n"}],"method":"post","type":"path","servers":["171298bf-76a0-4c10-b6b3-6b42fa4e08ed"],"path":"/gateway/customers","baseUrlOptions":["https://api.kintra.io/api/v1"],"title":"Create a customer","codeSamples":[{"label":"cURL","lang":"bash","source":"# Export KINTRA_API for your environment first; the base URL is on the introduction page.\nKEY=\"YOUR_TENANT_KEY_ID\"\nSECRET=\"YOUR_SIGNING_SECRET\"\n\n# The signature covers the path and query exactly as sent, so both are split\n# off the base URL and reused for the request line below.\nAPI_PATH=\"/${KINTRA_API#*://*/}\"\nAPI_HOST=\"${KINTRA_API%\"$API_PATH\"}\"\nMETHOD=\"POST\"\nPATH_AND_QUERY=\"$API_PATH/gateway/customers\"\n\n# One compact line, signed and sent unchanged. The server signs a\n# re-serialization of the body it parsed, so reformatting this fails with a 401.\nBODY='{\"email\":\"YOUR_EMAIL\"}'\n\nTIMESTAMP=\"$(date +%s)\"\nSIGNATURE=\"$(printf '%s' \"$TIMESTAMP$METHOD$PATH_AND_QUERY$BODY\" \\\n | openssl dgst -sha256 -hmac \"$SECRET\" | awk '{print $NF}')\"\n\ncurl -sS -w '\\n%{http_code}' -X \"$METHOD\" \"$API_HOST$PATH_AND_QUERY\" \\\n -H \"X-Tenant-Key: $KEY\" \\\n -H \"X-Tenant-Timestamp: $TIMESTAMP\" \\\n -H \"X-Tenant-Signature: $SIGNATURE\" \\\n -H \"Content-Type: application/json\" \\\n -H \"X-Idempotency-Key: YOUR_IDEMPOTENCY_KEY\" \\\n --data-binary \"$BODY\"\n"},{"label":"TypeScript","lang":"typescript","source":"import { createHmac } from 'node:crypto'\n\n// Export KINTRA_API for your environment first; the base URL is on the introduction page.\nconst { origin, pathname } = new URL(process.env.KINTRA_API ?? '')\nconst key = 'YOUR_TENANT_KEY_ID'\nconst secret = 'YOUR_SIGNING_SECRET'\n\nconst method = 'POST'\n// The signature covers the path and query as sent, starting at the API prefix.\nconst pathAndQuery = `${pathname}/gateway/customers`\n\n// Serialized once and used twice. The server signs a re-serialization of the\n// body it parsed, so the bytes signed and the bytes sent have to be identical.\nconst body = JSON.stringify({\n \"email\": \"YOUR_EMAIL\"\n})\n\nconst timestamp = Math.floor(Date.now() / 1000).toString()\nconst signature = createHmac('sha256', secret).update(`${timestamp}${method}${pathAndQuery}${body}`).digest('hex')\n\nconst response = await fetch(`${origin}${pathAndQuery}`, {\n method,\n headers: {\n 'X-Tenant-Key': key,\n 'X-Tenant-Timestamp': timestamp,\n 'X-Tenant-Signature': signature,\n 'Content-Type': 'application/json',\n 'X-Idempotency-Key': 'YOUR_IDEMPOTENCY_KEY'\n },\n body\n})\n\nconsole.log(response.status, await response.json())\n"}],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.email":"\u003cstring>","body.cohort.club_ids.items.0":"\u003cstring>","body.cohort.country_id":"\u003cstring>","body.date_of_birth.oneOf.0":"\u003cstring>","body.first_name.oneOf.0":"\u003cstring>","body.last_name.oneOf.0":"\u003cstring>","body.phone.oneOf.0":"\u003cstring>"}]},"dependencies":{"parameters":{"d033afab-acec-4fa3-aa0c-7de135d0c9da":{"description":"Hex HMAC-SHA256 of the timestamp, the uppercase method, the url as sent and the request body, keyed by the signing secret.","in":"header","name":"X-Tenant-Signature","required":true,"schema":{"type":"string","isRequired":true,"description":"Hex HMAC-SHA256 of the timestamp, the uppercase method, the url as sent and the request body, keyed by the signing secret.","uniqueKey":"","typeLabel":"string"}},"0422f416-c0bd-4796-8080-2bbac8589559":{"description":"Unix seconds. Checked before the signature.","in":"header","name":"X-Tenant-Timestamp","required":true,"schema":{"type":"string","isRequired":true,"description":"Unix seconds. Checked before the signature.","uniqueKey":"","typeLabel":"string"}},"550b2f73-b9dd-4004-8f57-468154e8e291":{"description":"Unique key for this write. A replay returns the stored response; the same key with a different body conflicts.","in":"header","name":"X-Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string","isRequired":true,"description":"Unique key for this write. A replay returns the stored response; the same key with a different body conflicts.","uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"email":{"type":"string","isRequired":true,"uniqueKey":"email","typeLabel":"string"},"attributes":{"additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"attributes.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","format":"double","uniqueKey":"attributes.additionalProperties.oneOf.1","typeLabel":"number\u003cdouble>"},{"type":"array","items":{"type":"string","uniqueKey":"attributes.additionalProperties.oneOf.2.items.[INDEX]","typeLabel":"string"},"uniqueKey":"attributes.additionalProperties.oneOf.2","typeLabel":"string[]"}],"uniqueKey":"attributes.additionalProperties","typeLabel":"string | number\u003cdouble> | string[]"},"description":"Optional initial attribute values, keyed by definition id. Mirrors the PUT attributes body.","properties":{},"type":"object","uniqueKey":"attributes","typeLabel":"object"},"cohort":{"additionalProperties":false,"properties":{"club_ids":{"items":{"type":"string","uniqueKey":"cohort.club_ids.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"cohort.club_ids","typeLabel":"string[]"},"country_id":{"type":"string","uniqueKey":"cohort.country_id","typeLabel":"string"},"metadata":{"additionalProperties":{"oneOf":[{}],"uniqueKey":"cohort.metadata.additionalProperties","typeLabel":"any"},"description":"Construct a type with a set of properties K of type T","properties":{},"type":"object","uniqueKey":"cohort.metadata","typeLabel":"object"}},"type":"object","uniqueKey":"cohort","typeLabel":"object"},"date_of_birth":{"oneOf":[{"description":"Optional date of birth as YYYY-MM-DD.","type":"string","uniqueKey":"date_of_birth.oneOf.0","typeLabel":"string"},{"description":"Optional date of birth as YYYY-MM-DD.","type":"null","uniqueKey":"date_of_birth.oneOf.1","typeLabel":"null"}],"uniqueKey":"date_of_birth","typeLabel":"string | null"},"first_name":{"oneOf":[{"description":"Optional human first name. Captured on the tenant Add User form / gateway create.","type":"string","uniqueKey":"first_name.oneOf.0","typeLabel":"string"},{"description":"Optional human first name. Captured on the tenant Add User form / gateway create.","type":"null","uniqueKey":"first_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"first_name","typeLabel":"string | null"},"last_name":{"oneOf":[{"description":"Optional human last name. Captured on the tenant Add User form / gateway create.","type":"string","uniqueKey":"last_name.oneOf.0","typeLabel":"string"},{"description":"Optional human last name. Captured on the tenant Add User form / gateway create.","type":"null","uniqueKey":"last_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"last_name","typeLabel":"string | null"},"phone":{"oneOf":[{"description":"Optional free-text phone number. Stored as entered apart from leading and trailing whitespace; no format, country or digit rule is applied.","maxLength":100,"type":"string","uniqueKey":"phone.oneOf.0","typeLabel":"string"},{"description":"Optional free-text phone number. Stored as entered apart from leading and trailing whitespace; no format, country or digit rule is applied.","maxLength":100,"type":"null","uniqueKey":"phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"phone","typeLabel":"string | null"}},"required":["email"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"email":"\u003cstring>","attributes":{},"cohort":{"club_ids":["\u003cstring>"],"country_id":"\u003cstring>","metadata":{}},"date_of_birth":"\u003cstring>","first_name":"\u003cstring>","last_name":"\u003cstring>","phone":"\u003cstring>"}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"3531bdd7-1605-4002-861f-60100963372d":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"additionalProperties":false,"properties":{"auth_provider":{"type":"string","isRequired":true,"uniqueKey":"data.auth_provider","typeLabel":"string"},"auth_provider_id":{"type":"string","isRequired":true,"uniqueKey":"data.auth_provider_id","typeLabel":"string"},"email":{"type":"string","isRequired":true,"uniqueKey":"data.email","typeLabel":"string"},"id":{"type":"string","isRequired":true,"uniqueKey":"data.id","typeLabel":"string"},"onboarding_status":{"oneOf":[{"type":"string","enum":["initial","registered","active"],"isRequired":true,"uniqueKey":"data.onboarding_status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","isRequired":true,"uniqueKey":"data.onboarding_status.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"data.onboarding_status","typeLabel":"enum\u003cstring> | string"},"status":{"type":"string","isRequired":true,"uniqueKey":"data.status","typeLabel":"string"},"username":{"type":"string","isRequired":true,"uniqueKey":"data.username","typeLabel":"string"},"created_at":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.created_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.created_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time> | null"},"date_of_birth":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.date_of_birth.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.date_of_birth.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.date_of_birth","typeLabel":"string\u003cdate-time> | null"},"first_name":{"oneOf":[{"type":"string","uniqueKey":"data.first_name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.first_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.first_name","typeLabel":"string | null"},"internal_wallets":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string","isRequired":true,"uniqueKey":"data.internal_wallets.items.[INDEX].address","typeLabel":"string"},"id":{"type":"string","isRequired":true,"uniqueKey":"data.internal_wallets.items.[INDEX].id","typeLabel":"string"},"user_id":{"type":"string","isRequired":true,"uniqueKey":"data.internal_wallets.items.[INDEX].user_id","typeLabel":"string"},"wallet_kind":{"type":"string","isRequired":true,"uniqueKey":"data.internal_wallets.items.[INDEX].wallet_kind","typeLabel":"string"},"created_at":{"format":"date-time","type":"string","uniqueKey":"data.internal_wallets.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"deleted_at":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.internal_wallets.items.[INDEX].deleted_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.internal_wallets.items.[INDEX].deleted_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.internal_wallets.items.[INDEX].deleted_at","typeLabel":"string\u003cdate-time> | null"},"label":{"oneOf":[{"type":"string","uniqueKey":"data.internal_wallets.items.[INDEX].label.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.internal_wallets.items.[INDEX].label.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.internal_wallets.items.[INDEX].label","typeLabel":"string | null"},"updated_at":{"format":"date-time","type":"string","uniqueKey":"data.internal_wallets.items.[INDEX].updated_at","typeLabel":"string\u003cdate-time>"}},"required":["id","address","wallet_kind","user_id"],"type":"object","uniqueKey":"data.internal_wallets.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"data.internal_wallets","typeLabel":"object[]"},"last_name":{"oneOf":[{"type":"string","uniqueKey":"data.last_name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.last_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.last_name","typeLabel":"string | null"},"onboarding_type":{"oneOf":[{"type":"string","enum":["admin","tenant","user"],"uniqueKey":"data.onboarding_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","uniqueKey":"data.onboarding_type.oneOf.1","typeLabel":"string"},{"type":"null","uniqueKey":"data.onboarding_type.oneOf.2","typeLabel":"null"}],"uniqueKey":"data.onboarding_type","typeLabel":"enum\u003cstring> | string | null"},"phone":{"oneOf":[{"type":"string","uniqueKey":"data.phone.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone","typeLabel":"string | null"},"updated_at":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.updated_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.updated_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.updated_at","typeLabel":"string\u003cdate-time> | null"}},"required":["id","username","email","auth_provider","auth_provider_id","status","onboarding_status"],"type":"object","uniqueKey":"data","typeLabel":"object"},"errors":{"items":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].path","typeLabel":"string"}},"required":["path","message"],"type":"object","uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"errors","typeLabel":"object[]"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"required":["success"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":{"auth_provider":"\u003cstring>","auth_provider_id":"\u003cstring>","email":"\u003cstring>","id":"\u003cstring>","onboarding_status":"initial","status":"\u003cstring>","username":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","date_of_birth":"2023-11-07T05:31:56Z","first_name":"\u003cstring>","internal_wallets":[{"address":"\u003cstring>","id":"\u003cstring>","user_id":"\u003cstring>","wallet_kind":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","deleted_at":"2023-11-07T05:31:56Z","label":"\u003cstring>","updated_at":"2023-11-07T05:31:56Z"}],"last_name":"\u003cstring>","onboarding_type":"admin","phone":"\u003cstring>","updated_at":"2023-11-07T05:31:56Z"},"errors":[{"message":"\u003cstring>","path":"\u003cstring>"}],"message":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Ok","exampleType":"generated"},"cb4c947f-e936-415a-96f0-839f3a7a6930":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"additionalProperties":false,"properties":{"auth_provider":{"type":"string","isRequired":true,"uniqueKey":"data.auth_provider","typeLabel":"string"},"auth_provider_id":{"type":"string","isRequired":true,"uniqueKey":"data.auth_provider_id","typeLabel":"string"},"email":{"type":"string","isRequired":true,"uniqueKey":"data.email","typeLabel":"string"},"id":{"type":"string","isRequired":true,"uniqueKey":"data.id","typeLabel":"string"},"onboarding_status":{"oneOf":[{"type":"string","enum":["initial","registered","active"],"isRequired":true,"uniqueKey":"data.onboarding_status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","isRequired":true,"uniqueKey":"data.onboarding_status.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"data.onboarding_status","typeLabel":"enum\u003cstring> | string"},"status":{"type":"string","isRequired":true,"uniqueKey":"data.status","typeLabel":"string"},"username":{"type":"string","isRequired":true,"uniqueKey":"data.username","typeLabel":"string"},"created_at":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.created_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.created_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time> | null"},"date_of_birth":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.date_of_birth.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.date_of_birth.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.date_of_birth","typeLabel":"string\u003cdate-time> | null"},"first_name":{"oneOf":[{"type":"string","uniqueKey":"data.first_name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.first_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.first_name","typeLabel":"string | null"},"internal_wallets":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string","isRequired":true,"uniqueKey":"data.internal_wallets.items.[INDEX].address","typeLabel":"string"},"id":{"type":"string","isRequired":true,"uniqueKey":"data.internal_wallets.items.[INDEX].id","typeLabel":"string"},"user_id":{"type":"string","isRequired":true,"uniqueKey":"data.internal_wallets.items.[INDEX].user_id","typeLabel":"string"},"wallet_kind":{"type":"string","isRequired":true,"uniqueKey":"data.internal_wallets.items.[INDEX].wallet_kind","typeLabel":"string"},"created_at":{"format":"date-time","type":"string","uniqueKey":"data.internal_wallets.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"deleted_at":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.internal_wallets.items.[INDEX].deleted_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.internal_wallets.items.[INDEX].deleted_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.internal_wallets.items.[INDEX].deleted_at","typeLabel":"string\u003cdate-time> | null"},"label":{"oneOf":[{"type":"string","uniqueKey":"data.internal_wallets.items.[INDEX].label.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.internal_wallets.items.[INDEX].label.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.internal_wallets.items.[INDEX].label","typeLabel":"string | null"},"updated_at":{"format":"date-time","type":"string","uniqueKey":"data.internal_wallets.items.[INDEX].updated_at","typeLabel":"string\u003cdate-time>"}},"required":["id","address","wallet_kind","user_id"],"type":"object","uniqueKey":"data.internal_wallets.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"data.internal_wallets","typeLabel":"object[]"},"last_name":{"oneOf":[{"type":"string","uniqueKey":"data.last_name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.last_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.last_name","typeLabel":"string | null"},"onboarding_type":{"oneOf":[{"type":"string","enum":["admin","tenant","user"],"uniqueKey":"data.onboarding_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","uniqueKey":"data.onboarding_type.oneOf.1","typeLabel":"string"},{"type":"null","uniqueKey":"data.onboarding_type.oneOf.2","typeLabel":"null"}],"uniqueKey":"data.onboarding_type","typeLabel":"enum\u003cstring> | string | null"},"phone":{"oneOf":[{"type":"string","uniqueKey":"data.phone.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone","typeLabel":"string | null"},"updated_at":{"oneOf":[{"format":"date-time","type":"string","uniqueKey":"data.updated_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"format":"date-time","type":"null","uniqueKey":"data.updated_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.updated_at","typeLabel":"string\u003cdate-time> | null"}},"required":["id","username","email","auth_provider","auth_provider_id","status","onboarding_status"],"type":"object","uniqueKey":"data","typeLabel":"object"},"errors":{"items":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].path","typeLabel":"string"}},"required":["path","message"],"type":"object","uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"errors","typeLabel":"object[]"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"required":["success"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":{"auth_provider":"\u003cstring>","auth_provider_id":"\u003cstring>","email":"\u003cstring>","id":"\u003cstring>","onboarding_status":"initial","status":"\u003cstring>","username":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","date_of_birth":"2023-11-07T05:31:56Z","first_name":"\u003cstring>","internal_wallets":[{"address":"\u003cstring>","id":"\u003cstring>","user_id":"\u003cstring>","wallet_kind":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","deleted_at":"2023-11-07T05:31:56Z","label":"\u003cstring>","updated_at":"2023-11-07T05:31:56Z"}],"last_name":"\u003cstring>","onboarding_type":"admin","phone":"\u003cstring>","updated_at":"2023-11-07T05:31:56Z"},"errors":[{"message":"\u003cstring>","path":"\u003cstring>"}],"message":"\u003cstring>"}}},"exampleType":"generated"}},"description":"","exampleType":"generated"},"a853a21c-3fbe-45d4-a98b-55989f0e0a35":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"oneOf":[{"enum":[null],"type":"number","uniqueKey":"data.oneOf.0","typeLabel":"enum\u003cnumber>"},{"enum":[null],"type":"null","uniqueKey":"data.oneOf.1","typeLabel":"null"}],"uniqueKey":"data","typeLabel":"enum\u003cnumber> | null"},"errors":{"items":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].path","typeLabel":"string"}},"required":["path","message"],"type":"object","uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"errors","typeLabel":"object[]"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"required":["success"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":null,"errors":[{"message":"\u003cstring>","path":"\u003cstring>"}],"message":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Unauthorized","exampleType":"generated"},"08e4c15a-5e2b-420f-9979-beba5237ae8a":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"oneOf":[{"enum":[null],"type":"number","uniqueKey":"data.oneOf.0","typeLabel":"enum\u003cnumber>"},{"enum":[null],"type":"null","uniqueKey":"data.oneOf.1","typeLabel":"null"}],"uniqueKey":"data","typeLabel":"enum\u003cnumber> | null"},"errors":{"items":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].path","typeLabel":"string"}},"required":["path","message"],"type":"object","uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"errors","typeLabel":"object[]"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"required":["success"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":null,"errors":[{"message":"\u003cstring>","path":"\u003cstring>"}],"message":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Tenant not found","exampleType":"generated"},"a20b0781-1771-44d0-8cbf-1072102a10c9":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"oneOf":[{"enum":[null],"type":"number","uniqueKey":"data.oneOf.0","typeLabel":"enum\u003cnumber>"},{"enum":[null],"type":"null","uniqueKey":"data.oneOf.1","typeLabel":"null"}],"uniqueKey":"data","typeLabel":"enum\u003cnumber> | null"},"errors":{"items":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].path","typeLabel":"string"}},"required":["path","message"],"type":"object","uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"errors","typeLabel":"object[]"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"required":["success"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":null,"errors":[{"message":"\u003cstring>","path":"\u003cstring>"}],"message":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Conflict","exampleType":"generated"},"8c56d76b-385d-4551-8535-1e89181391be":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"oneOf":[{"enum":[null],"type":"number","uniqueKey":"data.oneOf.0","typeLabel":"enum\u003cnumber>"},{"enum":[null],"type":"null","uniqueKey":"data.oneOf.1","typeLabel":"null"}],"uniqueKey":"data","typeLabel":"enum\u003cnumber> | null"},"errors":{"items":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].path","typeLabel":"string"}},"required":["path","message"],"type":"object","uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"errors","typeLabel":"object[]"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"required":["success"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":null,"errors":[{"message":"\u003cstring>","path":"\u003cstring>"}],"message":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Internal server error","exampleType":"generated"}},"security":{"5a412001-64cd-4c89-9d76-10470fd38841":{"tenant_api_key":{"description":"Tenant API key","in":"header","name":"x-tenant-key","type":"apiKey","scopes":[]}}},"servers":{"171298bf-76a0-4c10-b6b3-6b42fa4e08ed":{"description":"Production environment","url":"https://api.kintra.io/api/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"description":"Tenant API key","in":"header","name":"x-tenant-key","type":"apiKey","scopes":[]},"schema":{"title":"x-tenant-key","type":"string","description":"Tenant API key","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"tenant_api_key","name":"x-tenant-key"}],"title":"tenant_api_key"}]},"originalFileLocation":"openapi/kintra-gateway.json"},"subdomain":"kintra","siteName":"KINTRA","title":"Create a customer - KINTRA","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-17T12:30:03.385Z","originalFileLocation":"api-reference/gateway/customers/create-a-customer.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";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=\"dark\"}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 a customer under your tenant. email is the only required body field. phone, first_name, last_name and date_of_birth are optional; when supplied, date_of_birth is a calendar date written YYYY-MM-DD and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 VALIDATION_INVALID_INPUT before anything is created, and error.details.fields names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. attributes and a cohort holding country_id, club_ids and metadata are optional. Call it once per person, at signup or when importing an account you already hold. The response data carries the created customer, including its id, username, phone, status and onboarding_status; keep the id, because every other customer route takes it. An email address already registered under the tenant returns 409. X-Idempotency-Key is required: a missing key returns 400 IDEMPOTENCY_KEY_REQUIRED, and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 IDEMPOTENCY_KEY_CONFLICT, and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.\">\u003cmeta data-mint-head name=\"application-name\" content=\"KINTRA\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kintra/ZtFEHcUbLmdYiJ-1/_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/kintra/ZtFEHcUbLmdYiJ-1/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kintra/ZtFEHcUbLmdYiJ-1/_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/kintra/ZtFEHcUbLmdYiJ-1/_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/kintra/ZtFEHcUbLmdYiJ-1/_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/kintra/ZtFEHcUbLmdYiJ-1/_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/kintra/ZtFEHcUbLmdYiJ-1/_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/kintra/ZtFEHcUbLmdYiJ-1/_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/kintra/ZtFEHcUbLmdYiJ-1/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a customer - KINTRA\">\u003cmeta data-mint-head property=\"og:description\" content=\"Registers a customer under your tenant. email is the only required body field. phone, first_name, last_name and date_of_birth are optional; when supplied, date_of_birth is a calendar date written YYYY-MM-DD and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 VALIDATION_INVALID_INPUT before anything is created, and error.details.fields names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. attributes and a cohort holding country_id, club_ids and metadata are optional. Call it once per person, at signup or when importing an account you already hold. The response data carries the created customer, including its id, username, phone, status and onboarding_status; keep the id, because every other customer route takes it. An email address already registered under the tenant returns 409. X-Idempotency-Key is required: a missing key returns 400 IDEMPOTENCY_KEY_REQUIRED, and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 IDEMPOTENCY_KEY_CONFLICT, and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"KINTRA\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kintra.io/api-reference/gateway/customers/create-a-customer\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kintra.mintlify.app/_mintlify/api/og/v2?division=Customers\u0026amp;title=Create+a+customer\u0026amp;description=Registers+a+customer+under+your+tenant.+%60email%60+is+the+only+required+body+field.+%60phone%60%2C+%60first_name%60%2C+%60last_name%60+and+%60date_of_birth%60+are+optional%3B+when+suppl\u0026amp;theme=7168baa81e08787f570d323b\u0026amp;signature=b3dd2f39004916ca366f3a0117d25965d92c1c9cf757abe3a0f2da6f054e7a4e\">\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 a customer - KINTRA\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Registers a customer under your tenant. email is the only required body field. phone, first_name, last_name and date_of_birth are optional; when supplied, date_of_birth is a calendar date written YYYY-MM-DD and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 VALIDATION_INVALID_INPUT before anything is created, and error.details.fields names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. attributes and a cohort holding country_id, club_ids and metadata are optional. Call it once per person, at signup or when importing an account you already hold. The response data carries the created customer, including its id, username, phone, status and onboarding_status; keep the id, because every other customer route takes it. An email address already registered under the tenant returns 409. X-Idempotency-Key is required: a missing key returns 400 IDEMPOTENCY_KEY_REQUIRED, and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 IDEMPOTENCY_KEY_CONFLICT, and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kintra.mintlify.app/_mintlify/api/og/v2?division=Customers\u0026amp;title=Create+a+customer\u0026amp;description=Registers+a+customer+under+your+tenant.+%60email%60+is+the+only+required+body+field.+%60phone%60%2C+%60first_name%60%2C+%60last_name%60+and+%60date_of_birth%60+are+optional%3B+when+suppl\u0026amp;theme=7168baa81e08787f570d323b\u0026amp;signature=b3dd2f39004916ca366f3a0117d25965d92c1c9cf757abe3a0f2da6f054e7a4e\">\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/kintra/ZtFEHcUbLmdYiJ-1/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"KINTRA\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#35cbff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.kintra.io/api-reference/gateway/customers/create-a-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/gateway/customers/create-a-customer.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.kintra.io/#organization\",\"name\":\"KINTRA\",\"url\":\"https://docs.kintra.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/kintra/aV869_4X610yKJzW/logo/light.png?fit=max\u0026auto=format\u0026n=aV869_4X610yKJzW\u0026q=85\u0026s=d55bc842096a5d67e57c9ab099d58762\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.kintra.io#website\",\"name\":\"KINTRA\",\"url\":\"https://docs.kintra.io\",\"publisher\":{\"@id\":\"https://docs.kintra.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.kintra.io/api-reference/gateway/customers/create-a-customer#webpage\",\"url\":\"https://docs.kintra.io/api-reference/gateway/customers/create-a-customer\",\"name\":\"Create a customer\",\"description\":\"Registers a customer under your tenant. email is the only required body field. phone, first_name, last_name and date_of_birth are optional; when supplied, date_of_birth is a calendar date written YYYY-MM-DD and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 VALIDATION_INVALID_INPUT before anything is created, and error.details.fields names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. attributes and a cohort holding country_id, club_ids and metadata are optional. Call it once per person, at signup or when importing an account you already hold. The response data carries the created customer, including its id, username, phone, status and onboarding_status; keep the id, because every other customer route takes it. An email address already registered under the tenant returns 409. X-Idempotency-Key is required: a missing key returns 400 IDEMPOTENCY_KEY_REQUIRED, and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 IDEMPOTENCY_KEY_CONFLICT, and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.\",\"dateModified\":\"2026-08-17T12:30:03.385Z\",\"isPartOf\":{\"@id\":\"https://docs.kintra.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kintra.io/api-reference/gateway/customers/create-a-customer#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kintra.io/api-reference/gateway/customers/create-a-customer#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Gateway API\",\"item\":\"https://docs.kintra.io/api-reference/gateway/customers/list-customers\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Customers\",\"item\":\"https://docs.kintra.io/api-reference/gateway/customers/list-customers\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create a customer\",\"item\":\"https://docs.kintra.io/api-reference/gateway/customers/create-a-customer\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.kintra.io/api-reference/gateway/customers/create-a-customer#apireference\",\"headline\":\"Create a customer\",\"name\":\"Create a customer\",\"description\":\"Registers a customer under your tenant. email is the only required body field. phone, first_name, last_name and date_of_birth are optional; when supplied, date_of_birth is a calendar date written YYYY-MM-DD and is checked for that format and nothing else. A missing email or an invalid supplied value is refused with 422 VALIDATION_INVALID_INPUT before anything is created, and error.details.fields names the field. Phone is stored exactly as sent apart from leading and trailing whitespace; it is not format-validated, not unique, not searchable, not usable for lookup and not selectable in cohorts. attributes and a cohort holding country_id, club_ids and metadata are optional. Call it once per person, at signup or when importing an account you already hold. The response data carries the created customer, including its id, username, phone, status and onboarding_status; keep the id, because every other customer route takes it. An email address already registered under the tenant returns 409. X-Idempotency-Key is required: a missing key returns 400 IDEMPOTENCY_KEY_REQUIRED, and a replay returns the stored response instead of creating a second record. Reusing a key with a different request returns 422 IDEMPOTENCY_KEY_CONFLICT, and replaying a key whose first request is still in flight returns 409 with the same code. A first request that never recorded a response keeps returning 409 until the key ages out, so send a fresh key rather than retrying that one.\",\"url\":\"https://docs.kintra.io/api-reference/gateway/customers/create-a-customer\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kintra.io/api-reference/gateway/customers/create-a-customer#webpage\"},\"dateModified\":\"2026-08-17T12:30:03.385Z\",\"publisher\":{\"@id\":\"https://docs.kintra.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.kintra.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"KINTRA\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"KINTRA","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"Introduction","href":"/api-reference/overview"}]},{"group":"Portal API","pages":[{"group":"Service","pages":[{"title":"Get service information","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /info","href":"/api-reference/portal/service/get-service-information"}]},{"group":"Reference data","pages":[{"title":"Get reference data","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /system/masterdata","href":"/api-reference/portal/reference-data/get-reference-data"}]},{"group":"Analytics","pages":[{"title":"Get an internal transaction timeline","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/analytics/internal-transactions/timeline","href":"/api-reference/portal/analytics/get-an-internal-transaction-timeline"},{"title":"Get an analytics summary","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/analytics/summary","href":"/api-reference/portal/analytics/get-an-analytics-summary"},{"title":"List top clubs by membership","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/analytics/top-clubs","href":"/api-reference/portal/analytics/list-top-clubs-by-membership"},{"title":"List top countries by customer count","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/analytics/top-countries","href":"/api-reference/portal/analytics/list-top-countries-by-customer-count"},{"title":"List top rewards by redemptions","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/analytics/top-rewards","href":"/api-reference/portal/analytics/list-top-rewards-by-redemptions"}]},{"group":"API keys","pages":[{"title":"List API keys","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/api-keys","href":"/api-reference/portal/api-keys/list-api-keys"},{"title":"Create an API key","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/api-keys","href":"/api-reference/portal/api-keys/create-an-api-key"},{"title":"Revoke an API key","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json delete /tenant/{tenantId}/api-keys/{id}","href":"/api-reference/portal/api-keys/revoke-an-api-key"}]},{"group":"Attributes","pages":[{"title":"List attribute definitions","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/attributes","href":"/api-reference/portal/attributes/list-attribute-definitions"},{"title":"Create an attribute definition","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/attributes","href":"/api-reference/portal/attributes/create-an-attribute-definition"},{"title":"Delete an attribute definition","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json delete /tenant/{tenantId}/attributes/{attributeId}","href":"/api-reference/portal/attributes/delete-an-attribute-definition"},{"title":"Rename an attribute definition","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json patch /tenant/{tenantId}/attributes/{attributeId}","href":"/api-reference/portal/attributes/rename-an-attribute-definition"},{"title":"Restore a deleted attribute definition","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/attributes/{attributeId}/restore","href":"/api-reference/portal/attributes/restore-a-deleted-attribute-definition"}]},{"group":"Cohorts","pages":[{"title":"List cohorts","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/cohorts","href":"/api-reference/portal/cohorts/list-cohorts"},{"title":"Create a cohort","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/cohorts","href":"/api-reference/portal/cohorts/create-a-cohort"},{"title":"Preview a cohort rule","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/cohorts/preview","href":"/api-reference/portal/cohorts/preview-a-cohort-rule"},{"title":"Get a cohort","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/cohorts/{cohortId}","href":"/api-reference/portal/cohorts/get-a-cohort"},{"title":"Delete a cohort","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json delete /tenant/{tenantId}/cohorts/{cohortId}","href":"/api-reference/portal/cohorts/delete-a-cohort"},{"title":"Update a cohort","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json patch /tenant/{tenantId}/cohorts/{cohortId}","href":"/api-reference/portal/cohorts/update-a-cohort"},{"title":"List cohort members","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/cohorts/{cohortId}/members","href":"/api-reference/portal/cohorts/list-cohort-members"}]},{"group":"Customers","pages":[{"title":"List customers","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/customers","href":"/api-reference/portal/customers/list-customers"},{"title":"Create a customer","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/customers","href":"/api-reference/portal/customers/create-a-customer"},{"title":"Get a customer","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/customers/{customer_id}","href":"/api-reference/portal/customers/get-a-customer"},{"title":"Add a customer to a club","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/customers/{customer_id}/clubs","href":"/api-reference/portal/customers/add-a-customer-to-a-club"},{"title":"Remove a customer from a club","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json delete /tenant/{tenantId}/customers/{customer_id}/clubs/{club_id}","href":"/api-reference/portal/customers/remove-a-customer-from-a-club"},{"title":"Set a customer country","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json put /tenant/{tenantId}/customers/{customer_id}/country","href":"/api-reference/portal/customers/set-a-customer-country"},{"title":"Update a customer status","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json patch /tenant/{tenantId}/customers/{userId}","href":"/api-reference/portal/customers/update-a-customer-status"},{"title":"List customer asset balances","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/customers/{userId}/balances","href":"/api-reference/portal/customers/list-customer-asset-balances"},{"title":"Check customer tier eligibility","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/customers/{userId}/tier/{tierId}/eligibility","href":"/api-reference/portal/customers/check-customer-tier-eligibility"},{"title":"List customer transactions","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/customers/{userId}/transactions","href":"/api-reference/portal/customers/list-customer-transactions"},{"title":"Get a customer XP balance","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/customers/{userId}/xp/balance","href":"/api-reference/portal/customers/get-a-customer-xp-balance"},{"title":"Lock or unlock a customer XP balance","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json put /tenant/{tenantId}/customers/{userId}/xp/lock","href":"/api-reference/portal/customers/lock-or-unlock-a-customer-xp-balance"}]},{"group":"Customer attributes","pages":[{"title":"List attribute values for a customer","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/customers/{customer_id}/attributes","href":"/api-reference/portal/customer-attributes/list-attribute-values-for-a-customer"},{"title":"Set attribute values for a customer","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json put /tenant/{tenantId}/customers/{customer_id}/attributes","href":"/api-reference/portal/customer-attributes/set-attribute-values-for-a-customer"}]},{"group":"Internal transactions","pages":[{"title":"List internal transactions","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/internal-transactions","href":"/api-reference/portal/internal-transactions/list-internal-transactions"},{"title":"Get an internal transaction","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/internal-transactions/{internal_transaction_id}","href":"/api-reference/portal/internal-transactions/get-an-internal-transaction"}]},{"group":"Members","pages":[{"title":"List members","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/members","href":"/api-reference/portal/members/list-members"},{"title":"Add a member","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/members","href":"/api-reference/portal/members/add-a-member"},{"title":"Remove a member","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json delete /tenant/{tenantId}/members/{userId}","href":"/api-reference/portal/members/remove-a-member"}]},{"group":"Onchain assets","pages":[{"title":"List onchain assets","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/onchain-assets","href":"/api-reference/portal/onchain-assets/list-onchain-assets"}]},{"group":"Redemptions","pages":[{"title":"List redemptions","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/redemptions","href":"/api-reference/portal/redemptions/list-redemptions"},{"title":"Get a redemption","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/redemptions/{redemption_id}","href":"/api-reference/portal/redemptions/get-a-redemption"}]},{"group":"Rewards","pages":[{"title":"List rewards","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/rewards","href":"/api-reference/portal/rewards/list-rewards"},{"title":"Create a reward","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/rewards","href":"/api-reference/portal/rewards/create-a-reward"},{"title":"Create a reward image upload URL","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/rewards/image/presigned","href":"/api-reference/portal/rewards/create-a-reward-image-upload-url"},{"title":"Get a reward","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/rewards/{rewardId}","href":"/api-reference/portal/rewards/get-a-reward"},{"title":"Update a reward","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json put /tenant/{tenantId}/rewards/{rewardId}","href":"/api-reference/portal/rewards/update-a-reward"},{"title":"Delete a reward","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json delete /tenant/{tenantId}/rewards/{rewardId}","href":"/api-reference/portal/rewards/delete-a-reward"}]},{"group":"Tiers","pages":[{"title":"List tier rules","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/tiers","href":"/api-reference/portal/tiers/list-tier-rules"},{"title":"Create a tier rule","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/tiers","href":"/api-reference/portal/tiers/create-a-tier-rule"},{"title":"Get a tier rule","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/tiers/{tierId}","href":"/api-reference/portal/tiers/get-a-tier-rule"},{"title":"Update a tier rule","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json put /tenant/{tenantId}/tiers/{tierId}","href":"/api-reference/portal/tiers/update-a-tier-rule"},{"title":"Delete a tier rule","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json delete /tenant/{tenantId}/tiers/{tierId}","href":"/api-reference/portal/tiers/delete-a-tier-rule"},{"title":"Get a tier member count","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /tenant/{tenantId}/tiers/{tierId}/member-count","href":"/api-reference/portal/tiers/get-a-tier-member-count"}]},{"group":"XP","pages":[{"title":"Award XP to a customer","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/xp/earn","href":"/api-reference/portal/xp/award-xp-to-a-customer"},{"title":"Redeem a reward for a customer","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json post /tenant/{tenantId}/xp/redeem","href":"/api-reference/portal/xp/redeem-a-reward-for-a-customer"}]},{"group":"Account","pages":[{"title":"Get the signed-in account","deprecated":null,"version":null,"openapi":"/openapi/kintra-app.json get /user/me","href":"/api-reference/portal/account/get-the-signed-in-account"}]}]},{"group":"Gateway API","pages":[{"group":"Customers","pages":[{"title":"List customers","description":"Lists the customers registered under your tenant. Call it to page through your customer base, or to check whether an email address is already registered before creating a record. Filter with `email`, `xp_status` and `eligible_tier_id`, and page with `page` and `limit`. The response `data` carries `items` alongside `total_count`, `page`, `limit`, `total_pages` and `has_next_page`. Returns 404 when the tenant behind the API key cannot be found.","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers","href":"/api-reference/gateway/customers/list-customers"},{"title":"Create a customer","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json post /gateway/customers","href":"/api-reference/gateway/customers/create-a-customer"},{"title":"Get a customer","description":"Returns one customer by id, as a `user` record with the `tenant` it belongs to. Call it after a create, or whenever you need the current profile behind a customer id you already hold. `customer_id` is the path parameter. Returns 404 when no customer with that id belongs to your tenant.","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/{customer_id}","href":"/api-reference/gateway/customers/get-a-customer"},{"title":"Update a customer status","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json patch /gateway/customers/{userId}","href":"/api-reference/gateway/customers/update-a-customer-status"},{"title":"List customer asset balances","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/{userId}/balances","href":"/api-reference/gateway/customers/list-customer-asset-balances"},{"title":"Add a customer to a club","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json post /gateway/customers/{userId}/clubs","href":"/api-reference/gateway/customers/add-a-customer-to-a-club"},{"title":"Remove a customer from a club","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json delete /gateway/customers/{userId}/clubs/{club_id}","href":"/api-reference/gateway/customers/remove-a-customer-from-a-club"},{"title":"Set a customer country","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json put /gateway/customers/{userId}/country","href":"/api-reference/gateway/customers/set-a-customer-country"},{"title":"Check customer tier eligibility","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/{userId}/tier/{tierId}/eligibility","href":"/api-reference/gateway/customers/check-customer-tier-eligibility"},{"title":"List customer transactions","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/{userId}/transactions","href":"/api-reference/gateway/customers/list-customer-transactions"},{"title":"Get a customer XP balance","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/{userId}/xp/balance","href":"/api-reference/gateway/customers/get-a-customer-xp-balance"},{"title":"Lock or unlock a customer XP balance","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json put /gateway/customers/{userId}/xp/lock","href":"/api-reference/gateway/customers/lock-or-unlock-a-customer-xp-balance"}]},{"group":"Analytics","pages":[{"title":"Get an internal transaction timeline","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/analytics/internal-transactions/timeline","href":"/api-reference/gateway/analytics/get-an-internal-transaction-timeline"},{"title":"Get an analytics summary","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/analytics/summary","href":"/api-reference/gateway/analytics/get-an-analytics-summary"},{"title":"List top clubs by membership","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/analytics/top-clubs","href":"/api-reference/gateway/analytics/list-top-clubs-by-membership"},{"title":"List top countries by customer count","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/analytics/top-countries","href":"/api-reference/gateway/analytics/list-top-countries-by-customer-count"},{"title":"List top rewards by redemptions","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/customers/analytics/top-rewards","href":"/api-reference/gateway/analytics/list-top-rewards-by-redemptions"}]},{"group":"Internal transactions","pages":[{"title":"List internal transactions","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/internal-transactions","href":"/api-reference/gateway/internal-transactions/list-internal-transactions"},{"title":"Get an internal transaction","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/internal-transactions/{internal_transaction_id}","href":"/api-reference/gateway/internal-transactions/get-an-internal-transaction"}]},{"group":"Onchain assets","pages":[{"title":"List onchain assets","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/onchain-assets","href":"/api-reference/gateway/onchain-assets/list-onchain-assets"}]},{"group":"Redemptions","pages":[{"title":"List redemptions","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/redemptions","href":"/api-reference/gateway/redemptions/list-redemptions"},{"title":"Get a redemption","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/redemptions/{redemption_id}","href":"/api-reference/gateway/redemptions/get-a-redemption"}]},{"group":"Rewards","pages":[{"title":"List rewards","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/rewards","href":"/api-reference/gateway/rewards/list-rewards"},{"title":"Create a reward","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json post /gateway/rewards","href":"/api-reference/gateway/rewards/create-a-reward"},{"title":"Get a reward","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/rewards/{rewardId}","href":"/api-reference/gateway/rewards/get-a-reward"},{"title":"Update a reward","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json put /gateway/rewards/{rewardId}","href":"/api-reference/gateway/rewards/update-a-reward"},{"title":"Delete a reward","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json delete /gateway/rewards/{rewardId}","href":"/api-reference/gateway/rewards/delete-a-reward"}]},{"group":"Tiers","pages":[{"title":"List tier rules","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/tiers","href":"/api-reference/gateway/tiers/list-tier-rules"},{"title":"Create a tier rule","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json post /gateway/tiers","href":"/api-reference/gateway/tiers/create-a-tier-rule"},{"title":"Get a tier rule","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json get /gateway/tiers/{tierId}","href":"/api-reference/gateway/tiers/get-a-tier-rule"},{"title":"Update a tier rule","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json put /gateway/tiers/{tierId}","href":"/api-reference/gateway/tiers/update-a-tier-rule"},{"title":"Delete a tier rule","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json delete /gateway/tiers/{tierId}","href":"/api-reference/gateway/tiers/delete-a-tier-rule"}]},{"group":"XP","pages":[{"title":"Award XP to a customer","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json post /gateway/xp/earn","href":"/api-reference/gateway/xp/award-xp-to-a-customer"},{"title":"Redeem a reward for a customer","deprecated":null,"version":null,"openapi":"/openapi/kintra-gateway.json post /gateway/xp/redeem","href":"/api-reference/gateway/xp/redeem-a-reward-for-a-customer"}]}]}]}]},"title":"Create a customer - KINTRA","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-WRhTSUDL.js","utils-ChMov4Kr.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-_REmC2bI.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp6nVRCu.js","snippetPresets-DZadmXoU.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CY2WdoTl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DwYG-Q4l.js","shallow-BXQIGwv4.js","getApiPlaygroundDisplay-CK5nK5B9.js","CodeSnippet-TH4a2aGW.js","CodeSnippets-DwsQiOFS.js","Page-R3M_BF4L.js","getPastedJson-DD7kUzi_.js","icon-holE3QoJ.js","MethodPill-DUW0T8us.js","DuplicateIcon-CI_p4be-.js","createIcon-BdbRvavb.js","DynamicMarkdown-DN96a4Ur.js","SectionHeading-SCu36A9d.js","axios-vUo_bRtp.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}