Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).
Your brand id (brd_...). It must be one of the brands your API key's account owns; with a publishable key it must be the one brand the key was issued for. A missing or malformed value is refused with 400, and an unknown or foreign brand with 404.
One custom-domain row as the registry holds it: the brand, the kind (login | member), the hostname, its provisioning state, who owns and who bound the host, timestamps, and the CNAME paste-row to add to your DNS. The row never carries a secret nor the provider's internal domain id. An absent row (a kind you have not registered) is the shared-domain default.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Purple Label MD","description":"Public API reference for building a patient storefront on the platform. Generated from the platform's own API contracts, and matches the newest staging release.","colors":{"primary":"#6D28D9","light":"#A78BFA","dark":"#5B21B6"},"logo":{"light":"https://mintcdn.com/purplelabelmd/1P9p4n7lsNL4z3Jc/logo/light.svg?fit=max\u0026auto=format\u0026n=1P9p4n7lsNL4z3Jc\u0026q=85\u0026s=3c0569e3f76e49e04d232187908c2e2e","dark":"https://mintcdn.com/purplelabelmd/1P9p4n7lsNL4z3Jc/logo/dark.svg?fit=max\u0026auto=format\u0026n=1P9p4n7lsNL4z3Jc\u0026q=85\u0026s=c11f42bb461c28528be896c7c1a80efa"},"favicon":"https://mintcdn.com/purplelabelmd/MUdvgTlYoCGY54e8/favicon.svg?fit=max\u0026auto=format\u0026n=MUdvgTlYoCGY54e8\u0026q=85\u0026s=3bd633ab20ff170e0ebebec0406e6972","footer":{"socials":{}},"fonts":{"heading":{"family":"Geist"},"body":{"family":"Geist"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"purplelabelmd","hasAudioNarration":false,"actualSubdomain":"purplelabelmd","customDomains":["docs.purplelabelmd.com"],"gitSource":{"type":"github","owner":"purple-label-md","repo":"purple-doc","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af545312fc9183f3253a260","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API reference","count":50},{"language":"default","tag":"Guides","count":21},{"language":"default","tag":"Offering configuration","count":18},{"language":"default","tag":"Integrate","count":16},{"language":"default","tag":"Brand configuration","count":9},{"language":"default","tag":"Webhooks","count":7},{"language":"default","tag":"Payments","count":4},{"language":"default","tag":"Intake","count":3},{"language":"default","tag":"Onboarding","count":3},{"language":"default","tag":"Sessions \u0026 authentication","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"@media (prefers-reduced-motion: no-preference){.plmd-logo{transform-origin:center;transition:transform 0.12s ease}.plmd-logo .plmd-mark path{transform-box:fill-box;transform-origin:center}.plmd-logo-link:active .plmd-logo{transform:scale(0.85)}.plmd-logo-link:hover .plmd-logo .plmd-mark path:last-child{animation:plmd-carrot-hop 0.55s ease}.plmd-logo-link:hover .plmd-logo .plmd-mark path:nth-child(-n+6){animation:plmd-carrot-twinkle 0.5s ease}.plmd-logo-link:hover .plmd-logo .plmd-mark path:nth-child(even){animation-delay:0.08s}}@keyframes plmd-carrot-hop{0%{transform:translateY(0) rotate(0)}30%{transform:translateY(-14%) rotate(-9deg)}55%{transform:translateY(0) rotate(6deg)}78%{transform:translateY(-5%) rotate(-2deg)}100%{transform:translateY(0) rotate(0)}}@keyframes plmd-carrot-twinkle{0%,100%{transform:scale(1);opacity:1}45%{transform:scale(1.6);opacity:0.7}}"}],"page":{"pagePath":"api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning","slug":"/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning","pageMetadata":{"title":"Verify a custom domain and advance provisioning","description":"Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/brands/{brand_id}/domains/{kind}/verify","href":"/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning","autogeneratedByOpenApi":true},"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: \"Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).\"\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":"Verify a custom domain and advance provisioning","description":"Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/brands/{brand_id}/domains/{kind}/verify","href":"/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/purplelabelmd/3b4d4a495cd0c48d/brand.js"],"openApiReferenceData":{"operation":{"description":"Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).","operationId":"verifyAccountBrandDomain","parameters":["32925938-b289-46e3-bbd7-a5e15d9bc7ec"],"responses":{"200":"816ea5e4-a943-40f6-ba02-fa1366b3e073","401":"a1d6e8cb-5693-4089-901e-56e7b0f55fbf","404":"c4481fce-577a-4726-8560-98eb53801bba","409":"bec1976c-ba58-4b39-a420-519657953f93","502":"ec0a3cfa-b784-4e49-b0a7-d504bb7ad3c1","503":"28e010be-f474-49b0-a29b-fb322713d20d"},"security":["c7f519bf-ed09-4b5c-b720-55863c85ca1c"],"summary":"Verify a custom domain and advance provisioning","tags":["Brand configuration"],"method":"post","type":"path","servers":["76f2c082-b62c-4aea-a087-a046f1378296"],"path":"/v1/account/brands/{brand_id}/domains/{kind}/verify","baseUrlOptions":["https://api.staging.purplelabelmd.com"],"title":"Verify a custom domain and advance provisioning","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"32925938-b289-46e3-bbd7-a5e15d9bc7ec":{"description":"Your brand id (`brd_...`). It must be one of the brands your API key's account owns; with a publishable key it must be the one brand the key was issued for. A missing or malformed value is refused with `400`, and an unknown or foreign brand with `404`.","in":"header","name":"X-Brand-Id","required":true,"schema":{"pattern":"^brd_[A-Za-z0-9][A-Za-z0-9_-]*$","type":"string","isRequired":true,"description":"Your brand id (`brd_...`). It must be one of the brands your API key's account owns; with a publishable key it must be the one brand the key was issued for. A missing or malformed value is refused with `400`, and an unknown or foreign brand with `404`.","uniqueKey":"","typeLabel":"string"}},"a3af88ff-509f-4113-a791-63ec44a0a478":{"description":"the brand whose custom domains to view or manage (must match X-Brand-Id).","in":"path","name":"brand_id","required":true,"schema":{"pattern":"^brd_[A-Za-z0-9][A-Za-z0-9_-]*$","type":"string","isRequired":true,"description":"the brand whose custom domains to view or manage (must match X-Brand-Id).","uniqueKey":"","typeLabel":"string"}},"31ea71a8-1c28-447c-b8e7-4959e9c3379b":{"description":"the custom-domain kind — login (the auth domain) or member (the member-portal domain).","in":"path","name":"kind","required":true,"schema":{"enum":["login","member"],"type":"string","isRequired":true,"description":"the custom-domain kind — login (the auth domain) or member (the member-portal domain).","uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"responses":{"816ea5e4-a943-40f6-ba02-fa1366b3e073":{"content":{"application/json":{"schema":{"properties":{"data":{"additionalProperties":false,"description":"One custom-domain row as the registry holds it: the brand, the kind (login | member), the hostname, its provisioning state, who owns and who bound the host, timestamps, and the CNAME paste-row to add to your DNS. The row never carries a secret nor the provider's internal domain id. An absent row (a kind you have not registered) is the shared-domain default.","properties":{"brand_id":{"pattern":"^brd_[A-Za-z0-9][A-Za-z0-9_-]*$","type":"string","isRequired":true,"uniqueKey":"data.brand_id","typeLabel":"string"},"created_at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time>"},"hostname":{"description":"your custom hostname (e.g. login.example.com).","type":"string","isRequired":true,"uniqueKey":"data.hostname","typeLabel":"string"},"kind":{"enum":["login","member"],"type":"string","isRequired":true,"uniqueKey":"data.kind","typeLabel":"enum\u003cstring>"},"owner":{"description":"who owns this host binding. `customer` is a domain you brought and verified; `platform-brand` is the platform-owned member host every brand receives by default; `platform-walk` is a standing platform program host. Set on the operator plane only — a brand cannot assign its own ownership — and always present on a row.","enum":["platform-walk","platform-brand","customer"],"type":"string","isRequired":true,"uniqueKey":"data.owner","typeLabel":"enum\u003cstring>"},"state":{"description":"the provisioning state. login: requested → cname_rendered → verifying → verified → cert_issued → active. member: requested → cname_rendered → verifying → verified → cert_requested → cert_issued → active (the serving tail: verify stops at cert_requested; cert_issued and active are operator-advanced — active means the hostname serves this brand at the edge). removing (member only, when the ACM + load balancer provider is switched on): a remove has started taking the hostname down and has not finished. The hostname is NOT served in this state, nothing moves it forward, and the row carries no DNS records to add; send the remove again to finish it.","enum":["requested","cname_rendered","verifying","verified","cert_issued","active","cert_requested","removing"],"type":"string","isRequired":true,"uniqueKey":"data.state","typeLabel":"enum\u003cstring>"},"updated_at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.updated_at","typeLabel":"string\u003cdate-time>"},"bound_by":{"description":"which actor bound this host, and on which plane — `operator:\u003csubject>` or `client:\u003cclient id>`. Derived from the authenticated caller at the moment of the binding; it can never be supplied in a request body. Absent on a row bound before this field was recorded (the binder of those rows is genuinely unknown, and is not guessed). The time of the binding is the row's created_at, since a live binding is never re-owned in place.","type":"string","uniqueKey":"data.bound_by","typeLabel":"string"},"cname":{"type":"object","description":"the CNAME record to add to your DNS (present from cname_rendered onward).","required":["type","name","value"],"properties":{"name":{"description":"the record NAME to set (your custom hostname).","type":"string","isRequired":true,"uniqueKey":"data.cname.name","typeLabel":"string"},"type":{"const":"CNAME","type":"string","isRequired":true,"uniqueKey":"data.cname.type","typeLabel":"string"},"value":{"description":"the record VALUE — the edge target the CNAME must point at.","type":"string","isRequired":true,"uniqueKey":"data.cname.value","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"data.cname","typeLabel":"object"},"live_checks":{"type":"object","description":"what the platform sees for a member domain it serves from its own load balancer, checked when you read the domain: whether DNS shows your records, whether the certificate is issued, whether the platform is serving the hostname, and whether member sign-in accepts it. Each answer comes from a live check at that moment, never from a saved state. Present only on a read (GET) of such a domain, and not while it is being removed.","required":["dns_seen","cert_issued","serving","login_registered"],"properties":{"cert_issued":{"type":"object","description":"the certificate for your hostname has been issued.","required":["status","checked_at"],"properties":{"checked_at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.live_checks.cert_issued.checked_at","typeLabel":"string\u003cdate-time>"},"status":{"enum":["met","not_met","unknown"],"type":"string","isRequired":true,"uniqueKey":"data.live_checks.cert_issued.status","typeLabel":"enum\u003cstring>"},"reason":{"description":"present only when status is `unknown`: not_configured (this check is not set up on the platform yet), acm_error (the certificate service could not be read), elb_error (the load balancer could not be read), cloud (a platform cloud read failed and no single service can be named), auth0_error (the sign-in provider could not be read), dns_error (DNS did not answer), no_records (the records to look for are not known yet).","enum":["not_configured","acm_error","elb_error","cloud","auth0_error","dns_error","no_records"],"type":"string","uniqueKey":"data.live_checks.cert_issued.reason","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"data.live_checks.cert_issued","typeLabel":"object"},"dns_seen":{"type":"object","description":"public DNS answers the serving record (your hostname pointing at the platform's load balancer) and, until the certificate is issued, the validation record too.","required":["status","checked_at"],"properties":{"checked_at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.live_checks.dns_seen.checked_at","typeLabel":"string\u003cdate-time>"},"status":{"enum":["met","not_met","unknown"],"type":"string","isRequired":true,"uniqueKey":"data.live_checks.dns_seen.status","typeLabel":"enum\u003cstring>"},"reason":{"description":"present only when status is `unknown`: not_configured (this check is not set up on the platform yet), acm_error (the certificate service could not be read), elb_error (the load balancer could not be read), cloud (a platform cloud read failed and no single service can be named), auth0_error (the sign-in provider could not be read), dns_error (DNS did not answer), no_records (the records to look for are not known yet).","enum":["not_configured","acm_error","elb_error","cloud","auth0_error","dns_error","no_records"],"type":"string","uniqueKey":"data.live_checks.dns_seen.reason","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"data.live_checks.dns_seen","typeLabel":"object"},"login_registered":{"type":"object","description":"member sign-in accepts your hostname.","required":["status","checked_at"],"properties":{"checked_at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.live_checks.login_registered.checked_at","typeLabel":"string\u003cdate-time>"},"status":{"enum":["met","not_met","unknown"],"type":"string","isRequired":true,"uniqueKey":"data.live_checks.login_registered.status","typeLabel":"enum\u003cstring>"},"reason":{"description":"present only when status is `unknown`: not_configured (this check is not set up on the platform yet), acm_error (the certificate service could not be read), elb_error (the load balancer could not be read), cloud (a platform cloud read failed and no single service can be named), auth0_error (the sign-in provider could not be read), dns_error (DNS did not answer), no_records (the records to look for are not known yet).","enum":["not_configured","acm_error","elb_error","cloud","auth0_error","dns_error","no_records"],"type":"string","uniqueKey":"data.live_checks.login_registered.reason","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"data.live_checks.login_registered","typeLabel":"object"},"serving":{"type":"object","description":"the platform's load balancer carries your hostname's issued certificate and its routing rule right now.","required":["status","checked_at"],"properties":{"checked_at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.live_checks.serving.checked_at","typeLabel":"string\u003cdate-time>"},"status":{"enum":["met","not_met","unknown"],"type":"string","isRequired":true,"uniqueKey":"data.live_checks.serving.status","typeLabel":"enum\u003cstring>"},"reason":{"description":"present only when status is `unknown`: not_configured (this check is not set up on the platform yet), acm_error (the certificate service could not be read), elb_error (the load balancer could not be read), cloud (a platform cloud read failed and no single service can be named), auth0_error (the sign-in provider could not be read), dns_error (DNS did not answer), no_records (the records to look for are not known yet).","enum":["not_configured","acm_error","elb_error","cloud","auth0_error","dns_error","no_records"],"type":"string","uniqueKey":"data.live_checks.serving.reason","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"data.live_checks.serving","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"data.live_checks","typeLabel":"object"},"login_live":{"type":"object","description":"for a login domain: what the identity provider says about it right now (whether it has verified your DNS record, whether its certificate is issued), and who answered. Present only on a read (GET) of a login domain.","required":["source","verification","certificate","checked_at"],"properties":{"certificate":{"enum":["none","provisioning","issued","failed","unknown"],"type":"string","isRequired":true,"uniqueKey":"data.login_live.certificate","typeLabel":"enum\u003cstring>"},"checked_at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"data.login_live.checked_at","typeLabel":"string\u003cdate-time>"},"source":{"enum":["auth0","dev_placeholder"],"type":"string","isRequired":true,"uniqueKey":"data.login_live.source","typeLabel":"enum\u003cstring>"},"verification":{"enum":["pending","ready","failed","not_found","unknown"],"type":"string","isRequired":true,"uniqueKey":"data.login_live.verification","typeLabel":"enum\u003cstring>"},"reason":{"description":"present only when a status is `unknown`: not_configured (this deployment answers login domains from the development placeholder), auth0_error (the identity provider could not be read).","enum":["not_configured","auth0_error"],"type":"string","uniqueKey":"data.login_live.reason","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"data.login_live","typeLabel":"object"},"records":{"description":"the DNS records to add for a member domain you own, when the platform serves it from its own load balancer: the certificate validation record and the serving record, always together. `cname` then carries the serving record. Absent otherwise.","items":{"additionalProperties":false,"description":"One DNS record of a member domain's paste: `validation` proves you control the hostname so its certificate can issue; `serving` points the hostname at the platform. A business hostname pair, never a secret.","properties":{"kind":{"enum":["validation","serving"],"type":"string","isRequired":true,"uniqueKey":"data.records.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"name":{"description":"the record NAME to set.","type":"string","isRequired":true,"uniqueKey":"data.records.items.[INDEX].name","typeLabel":"string"},"type":{"const":"CNAME","type":"string","isRequired":true,"uniqueKey":"data.records.items.[INDEX].type","typeLabel":"string"},"value":{"description":"the record VALUE.","type":"string","isRequired":true,"uniqueKey":"data.records.items.[INDEX].value","typeLabel":"string"}},"required":["kind","type","name","value"],"type":"object","uniqueKey":"data.records.items.[INDEX]","typeLabel":"object"},"maxItems":2,"minItems":2,"type":"array","uniqueKey":"data.records","typeLabel":"object[]"}},"required":["brand_id","kind","hostname","state","owner","created_at","updated_at"],"type":"object","isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"required":["data"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"brand_id":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","hostname":"\u003cstring>","kind":"login","owner":"platform-walk","state":"requested","updated_at":"2023-11-07T05:31:56Z","bound_by":"\u003cstring>","cname":{"name":"\u003cstring>","type":"CNAME","value":"\u003cstring>"},"live_checks":{"cert_issued":{"checked_at":"2023-11-07T05:31:56Z","status":"met","reason":"not_configured"},"dns_seen":{"checked_at":"2023-11-07T05:31:56Z","status":"met","reason":"not_configured"},"login_registered":{"checked_at":"2023-11-07T05:31:56Z","status":"met","reason":"not_configured"},"serving":{"checked_at":"2023-11-07T05:31:56Z","status":"met","reason":"not_configured"}},"login_live":{"certificate":"none","checked_at":"2023-11-07T05:31:56Z","source":"auth0","verification":"pending","reason":"not_configured"},"records":[{"kind":"validation","name":"\u003cstring>","type":"CNAME","value":"\u003cstring>"}]}}}},"exampleType":"generated"}},"description":"the advanced row (login → active; member → cert_requested)","exampleType":"generated"},"a1d6e8cb-5693-4089-901e-56e7b0f55fbf":{"content":{"application/problem+json":{"schema":{"description":"RFC 7807 problem+json error body.","properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"format":"uri-reference","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"detail":{"type":"string","uniqueKey":"detail","typeLabel":"string"}},"required":["type","title","status"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"title":"\u003cstring>","type":"\u003cstring>","detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Missing, unknown or revoked API key. The body is the same in every case.","exampleType":"generated"},"c4481fce-577a-4726-8560-98eb53801bba":{"content":{"application/problem+json":{"schema":{"description":"RFC 7807 problem+json error body.","properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"format":"uri-reference","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"detail":{"type":"string","uniqueKey":"detail","typeLabel":"string"}},"required":["type","title","status"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"title":"\u003cstring>","type":"\u003cstring>","detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Brand not found for your account. An unknown brand and another account's brand get the same `404`, never a `403`.","exampleType":"generated"},"bec1976c-ba58-4b39-a420-519657953f93":{"content":{"application/problem+json":{"schema":{"oneOf":[{"type":"object","description":"RFC 7807 problem+json error body.","required":["type","title","status"],"properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"oneOf.0.status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.title","typeLabel":"string"},"type":{"format":"uri-reference","type":"string","isRequired":true,"uniqueKey":"oneOf.0.type","typeLabel":"string\u003curi-reference>"},"detail":{"type":"string","uniqueKey":"oneOf.0.detail","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"The problem body of a refused custom-domain write: the saved custom domains changed after this server last read them, so this server refused to write over them. On a register or a verify, an earlier step of the same call may have been saved. It carries the version stored now (`current_version`, always null: a custom domain has no version of its own) and when the addressed custom domain was last saved (`saved_at`, null when none is saved), and never who saved it. Read again, then retry.","required":["current_version","saved_at","type","title","status"],"properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"oneOf.1.status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.title","typeLabel":"string"},"type":{"type":"string","format":"uri-reference","enum":["https://purple.md/problems/version-mismatch"],"isRequired":true,"uniqueKey":"oneOf.1.type","typeLabel":"enum\u003cstring>"},"current_version":{"oneOf":[{"description":"the version stored now; always null for a custom domain","type":"string","isRequired":true,"uniqueKey":"oneOf.1.current_version.oneOf.0","typeLabel":"string"},{"description":"the version stored now; always null for a custom domain","type":"null","isRequired":true,"uniqueKey":"oneOf.1.current_version.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.current_version","typeLabel":"string | null"},"saved_at":{"oneOf":[{"description":"when the addressed custom domain was last saved; null when none is saved","format":"date-time","type":"string","isRequired":true,"uniqueKey":"oneOf.1.saved_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"description":"when the addressed custom domain was last saved; null when none is saved","format":"date-time","type":"null","isRequired":true,"uniqueKey":"oneOf.1.saved_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.saved_at","typeLabel":"string\u003cdate-time> | null"},"detail":{"type":"string","uniqueKey":"oneOf.1.detail","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","description":"The problem body of a custom-domain register or verify refused because this deployment's domain provider does not provision that kind of domain: it registers login domains only, and a member domain is served through the platform's own certificate and load balancer. Nothing was written and the provider was not called.","required":["type","title","status"],"properties":{"status":{"type":"integer","enum":[409],"isRequired":true,"uniqueKey":"oneOf.2.status","typeLabel":"enum\u003cinteger>"},"title":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.title","typeLabel":"string"},"type":{"type":"string","format":"uri-reference","enum":["https://purple.md/problems/account-domain-kind-not-on-this-provider"],"isRequired":true,"uniqueKey":"oneOf.2.type","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","uniqueKey":"oneOf.2.detail","typeLabel":"string"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"title":"\u003cstring>","type":"\u003cstring>","detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"verification or the certificate is not ready yet (retryable). Also 409, under its own problem `type`, `certificate-failed`: a member domain served from the platform load balancer (only when that provider is switched on) whose certificate could not be issued (it failed, timed out, expired or was revoked); a new certificate was requested in its place, so add its new validation record (shown on the domain), then retry. Also 409, under its own problem `type`, `version-mismatch`: the saved custom domains changed after this server last read them, so this server refused to write over them. An earlier step of this call may have been saved: a retry resumes from the saved row. The body carries `current_version` (always null: a domain row has no version of its own) and `saved_at` (when this custom domain was last saved, or null when none is saved), never who saved it. Read again, then retry. Also 409, under its own problem `type`, `account-domain-kind-not-on-this-provider`: on a deployment whose domain provider registers login domains only, a member domain is refused here, because a member domain is served through the platform's own certificate and load balancer rather than the auth provider. Nothing was written and the provider was not called.","exampleType":"generated"},"ec0a3cfa-b784-4e49-b0a7-d504bb7ad3c1":{"content":{"application/problem+json":{"schema":{"description":"RFC 7807 problem+json error body.","properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"format":"uri-reference","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"detail":{"type":"string","uniqueKey":"detail","typeLabel":"string"}},"required":["type","title","status"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"title":"\u003cstring>","type":"\u003cstring>","detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"the domain provider did not complete the request. Also 502, under the problem `type` `certificate-failed`: a member domain's certificate could not be issued and a replacement could not be requested yet (retryable).","exampleType":"generated"},"28e010be-f474-49b0-a29b-fb322713d20d":{"content":{"application/problem+json":{"schema":{"description":"RFC 7807 problem+json error body.","properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"type":{"format":"uri-reference","type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi-reference>"},"detail":{"type":"string","uniqueKey":"detail","typeLabel":"string"}},"required":["type","title","status"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"title":"\u003cstring>","type":"\u003cstring>","detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"the durable domain registry is unavailable (nothing activated; retryable)","exampleType":"generated"}},"security":{"c7f519bf-ed09-4b5c-b720-55863c85ca1c":{"apiKey":{"description":"Per-client API key (M2M). Presented as `Authorization: Bearer \u003ckey>`.","scheme":"bearer","type":"http","scopes":[],"schemeName":"apiKey"}}},"servers":{"76f2c082-b62c-4aea-a087-a046f1378296":{"url":"https://api.staging.purplelabelmd.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"description":"Per-client API key (M2M). Presented as `Authorization: Bearer \u003ckey>`.","scheme":"bearer","type":"http","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Per-client API key (M2M). Presented as `Authorization: Bearer \u003ckey>`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"openapi/public-openapi.json"},"subdomain":"purplelabelmd","siteName":"Purple Label MD","title":"Verify a custom domain and advance provisioning - Purple Label MD","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T04:48:52.599Z","originalFileLocation":"api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).\">\u003cmeta data-mint-head name=\"application-name\" content=\"Purple Label MD\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Verify a custom domain and advance provisioning - Purple Label MD\">\u003cmeta data-mint-head property=\"og:description\" content=\"Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Purple Label MD\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://purplelabelmd.mintlify.site/_mintlify/api/og/v2?division=Brand+configuration\u0026amp;title=Verify+a+custom+domain+and+advance+provisioning\u0026amp;description=Verifies+the+CNAME+you+added+and+advances+the+domain+toward+serving%3A+a+login+domain+proceeds+through+certificate+issuance+to+active%3B+a+member-portal+domain+stop\u0026amp;theme=1cfc55286f6f85a93657a32a\u0026amp;signature=fd0f9e0a4c3697c08401c7d085396aee01fff76aedb9f53766c08656605730e0\">\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=\"Verify a custom domain and advance provisioning - Purple Label MD\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://purplelabelmd.mintlify.site/_mintlify/api/og/v2?division=Brand+configuration\u0026amp;title=Verify+a+custom+domain+and+advance+provisioning\u0026amp;description=Verifies+the+CNAME+you+added+and+advances+the+domain+toward+serving%3A+a+login+domain+proceeds+through+certificate+issuance+to+active%3B+a+member-portal+domain+stop\u0026amp;theme=1cfc55286f6f85a93657a32a\u0026amp;signature=fd0f9e0a4c3697c08401c7d085396aee01fff76aedb9f53766c08656605730e0\">\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/purplelabelmd/TU4Si8SnCOFGjzcC/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Purple Label MD\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6D28D9\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.purplelabelmd.com/#organization\",\"name\":\"Purple Label MD\",\"url\":\"https://docs.purplelabelmd.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/purplelabelmd/1P9p4n7lsNL4z3Jc/logo/light.svg?fit=max\u0026auto=format\u0026n=1P9p4n7lsNL4z3Jc\u0026q=85\u0026s=3c0569e3f76e49e04d232187908c2e2e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.purplelabelmd.com#website\",\"name\":\"Purple Label MD\",\"url\":\"https://docs.purplelabelmd.com\",\"publisher\":{\"@id\":\"https://docs.purplelabelmd.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning#webpage\",\"url\":\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning\",\"name\":\"Verify a custom domain and advance provisioning\",\"description\":\"Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).\",\"dateModified\":\"2026-11-12T04:48:52.599Z\",\"isPartOf\":{\"@id\":\"https://docs.purplelabelmd.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Brand configuration\",\"item\":\"https://docs.purplelabelmd.com/api-reference/brand-configuration/read-back-your-brands-platform-configuration\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Verify a custom domain and advance provisioning\",\"item\":\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning#apireference\",\"headline\":\"Verify a custom domain and advance provisioning\",\"name\":\"Verify a custom domain and advance provisioning\",\"description\":\"Verifies the CNAME you added and advances the domain toward serving: a login domain proceeds through certificate issuance to active; a member-portal domain stops at the certificate-request state — the serving activation itself (certificate attach + host routing, cert_issued → active) is performed by the platform operator once your certificate is issued, never by this call. Call this once you have added the CNAME record from the register step. If verification or the certificate is not ready yet the row stays where it is and a retryable 409 is returned. Idempotent at (or past) the state this call drives to. The brand is the one your key owns (path brand_id must match your X-Brand-Id).\",\"url\":\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning\",\"mainEntityOfPage\":{\"@id\":\"https://docs.purplelabelmd.com/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning#webpage\"},\"dateModified\":\"2026-11-12T04:48:52.599Z\",\"publisher\":{\"@id\":\"https://docs.purplelabelmd.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.purplelabelmd.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Purple Label MD\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Purple Label MD\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning.md","siteName":"Purple Label MD","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/pages/overview"}]},{"tab":"API reference","groups":[{"group":"Brand configuration","pages":[{"title":"Read back your brand's platform configuration","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/config","href":"/api-reference/brand-configuration/read-back-your-brands-platform-configuration"},{"title":"Set your brand's display identity","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/config","href":"/api-reference/brand-configuration/set-your-brands-display-identity"},{"title":"List your brand's custom domains","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/domains","href":"/api-reference/brand-configuration/list-your-brands-custom-domains"},{"title":"Read the browser origins your storefront may read this brand from","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/domains/member/browser-origins","href":"/api-reference/brand-configuration/read-the-browser-origins-your-storefront-may-read-this-brand-from"},{"title":"Replace the browser origins your storefront may read this brand from","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/domains/member/browser-origins","href":"/api-reference/brand-configuration/replace-the-browser-origins-your-storefront-may-read-this-brand-from"},{"title":"Read one custom-domain row","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/domains/{kind}","href":"/api-reference/brand-configuration/read-one-custom-domain-row"},{"title":"Choose a custom domain for a kind (client self-serve)","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/domains/{kind}","href":"/api-reference/brand-configuration/choose-a-custom-domain-for-a-kind-client-self-serve"},{"title":"Remove a custom domain (revert to the shared domain)","description":"Removes your brand's custom domain of the given kind, reverting to the shared-domain default. The brand is the one your key owns; the brand_id in the path must match your X-Brand-Id.","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json delete /v1/account/brands/{brand_id}/domains/{kind}","href":"/api-reference/brand-configuration/remove-a-custom-domain-revert-to-the-shared-domain"},{"title":"Verify a custom domain and advance provisioning","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/brands/{brand_id}/domains/{kind}/verify","href":"/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning"}]},{"group":"Offering configuration","pages":[{"title":"List your brand's enabled offerings","description":"Lists every offering enabled for YOUR brand, with what a storefront needs to show and link each one: its name, its sku_id, its therapy, its entry mode (questions-first or checkout-first), its checkout link, the price shown for it or an explicit \"no price yet\", and its readiness. Use your own API key. The brand is the one your key owns (resolved from X-Brand-Id); the brand_id in the path must match it (any mismatch, foreign, or unknown brand answers 404, never 403, exactly as enabling an offering does). A brand with no enabled offerings answers 200 with an empty list, never an error. Each field is read from the part of the platform that owns it, never recomputed here; when a part could not be read, the field is null and its name is listed in that offering's not_measured, and the offering itself is still listed. This read changes nothing and moves no money.","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/offerings","href":"/api-reference/offering-configuration/list-your-brands-enabled-offerings"},{"title":"Enable an offering for your brand","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/brands/{brand_id}/offerings","href":"/api-reference/offering-configuration/enable-an-offering-for-your-brand"},{"title":"Choose the billing cadence of an offering on your brand","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/offerings/{offering_ref}/billing-cadence","href":"/api-reference/offering-configuration/choose-the-billing-cadence-of-an-offering-on-your-brand"},{"title":"Set your brand's price for an offering","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/pricing","href":"/api-reference/offering-configuration/set-your-brands-price-for-an-offering"},{"title":"Adopt the starter merchandising pack for your brand","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/brands/{brand_id}/starter-merchandising","href":"/api-reference/offering-configuration/adopt-the-starter-merchandising-pack-for-your-brand"},{"title":"Read an offering's composed qualification questions","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/offerings/{offering_ref}/qualification","href":"/api-reference/offering-configuration/read-an-offerings-composed-qualification-questions"},{"title":"Add a library question to an offering","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/offerings/{offering_ref}/qualification","href":"/api-reference/offering-configuration/add-a-library-question-to-an-offering"},{"title":"Reorder an offering's qualification questions","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/offerings/{offering_ref}/qualification/order","href":"/api-reference/offering-configuration/reorder-an-offerings-qualification-questions"},{"title":"Publish an offering's qualification questions","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/offerings/{offering_ref}/qualification/publish","href":"/api-reference/offering-configuration/publish-an-offerings-qualification-questions"},{"title":"Remove an offering's qualification question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json delete /v1/account/offerings/{offering_ref}/qualification/questions/{question_id}","href":"/api-reference/offering-configuration/remove-an-offerings-qualification-question"},{"title":"Edit an offering's qualification question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json patch /v1/account/offerings/{offering_ref}/qualification/questions/{question_id}","href":"/api-reference/offering-configuration/edit-an-offerings-qualification-question"},{"title":"Set the display name and presentation copy for your offering","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/offerings/{ref}/merchandising","href":"/api-reference/offering-configuration/set-the-display-name-and-presentation-copy-for-your-offering"},{"title":"List the facts a qualification question may bind","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/question-library/facts","href":"/api-reference/offering-configuration/list-the-facts-a-qualification-question-may-bind"},{"title":"Create a new screening fact for your brand","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/question-library/minted-facts","href":"/api-reference/offering-configuration/create-a-new-screening-fact-for-your-brand"},{"title":"List your brand's qualification question library","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/question-library/questions","href":"/api-reference/offering-configuration/list-your-brands-qualification-question-library"},{"title":"Create a qualification library question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/question-library/questions","href":"/api-reference/offering-configuration/create-a-qualification-library-question"},{"title":"Delete a qualification library question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json delete /v1/account/question-library/questions/{question_id}","href":"/api-reference/offering-configuration/delete-a-qualification-library-question"},{"title":"Edit a qualification library question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json patch /v1/account/question-library/questions/{question_id}","href":"/api-reference/offering-configuration/edit-a-qualification-library-question"}]},{"group":"Onboarding","pages":[{"title":"Check whether your brand is ready to sell","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/readiness","href":"/api-reference/onboarding/check-whether-your-brand-is-ready-to-sell"},{"title":"Read one offering's price and whether your brand can sell it","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/storefront","href":"/api-reference/onboarding/read-one-offerings-price-and-whether-your-brand-can-sell-it"},{"title":"Read a client's onboarding progress","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/onboardings/{onboarding_id}/progress","href":"/api-reference/onboarding/read-a-clients-onboarding-progress"}]},{"group":"Payments","pages":[{"title":"List your orders across all your brands","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/orders","href":"/api-reference/payments/list-your-orders-across-all-your-brands"},{"title":"Read one of your orders by reference","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/orders/{order_ref}","href":"/api-reference/payments/read-one-of-your-orders-by-reference"},{"title":"Start a checkout session and get a token to collect payment","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/payments/checkout-sessions","href":"/api-reference/payments/start-a-checkout-session-and-get-a-token-to-collect-payment"},{"title":"Read the payment status of an order","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/payments/{order_ref}/status","href":"/api-reference/payments/read-the-payment-status-of-an-order"}]},{"group":"Sessions \u0026 authentication","pages":[{"title":"Complete login and start the patient session","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/auth/callback","href":"/api-reference/sessions-\u0026-authentication/complete-login-and-start-the-patient-session"},{"title":"Begin Universal Login and redirect to the login page","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/auth/login","href":"/api-reference/sessions-\u0026-authentication/begin-universal-login-and-redirect-to-the-login-page"},{"title":"Log out and end the patient's session","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/auth/logout","href":"/api-reference/sessions-\u0026-authentication/log-out-and-end-the-patients-session"}]},{"group":"Intake","pages":[{"title":"Record that your patient dropped off the questionnaire","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/instrument/abandon","href":"/api-reference/intake/record-that-your-patient-dropped-off-the-questionnaire"},{"title":"Submit an answer and get the next question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/instrument/next","href":"/api-reference/intake/submit-an-answer-and-get-the-next-question"},{"title":"Start an intake session and get the first question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/instrument/resolve","href":"/api-reference/intake/start-an-intake-session-and-get-the-first-question"}]},{"group":"Addresses","pages":[{"title":"Resolve a selected address suggestion to a full address","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/instrument/address/retrieve","href":"/api-reference/addresses/resolve-a-selected-address-suggestion-to-a-full-address"},{"title":"Suggest addresses as your patient types","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/instrument/address/suggest","href":"/api-reference/addresses/suggest-addresses-as-your-patient-types"}]},{"group":"Enrollment","pages":[{"title":"Read a patient's public enrollment status","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/journeys/{journey_id}/status","href":"/api-reference/enrollment/read-a-patients-public-enrollment-status"}]},{"group":"Webhooks","pages":[{"title":"List the webhook event types you can subscribe to","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/webhooks/event-types","href":"/api-reference/webhooks/list-the-webhook-event-types-you-can-subscribe-to"},{"title":"List your webhook registrations","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/webhooks/registrations","href":"/api-reference/webhooks/list-your-webhook-registrations"},{"title":"Register a webhook endpoint (signing secret shown once)","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/webhooks/registrations","href":"/api-reference/webhooks/register-a-webhook-endpoint-signing-secret-shown-once"},{"title":"Read one of your webhook registrations","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/webhooks/registrations/{registration_id}","href":"/api-reference/webhooks/read-one-of-your-webhook-registrations"},{"title":"Delete a webhook registration","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json delete /v1/webhooks/registrations/{registration_id}","href":"/api-reference/webhooks/delete-a-webhook-registration"},{"title":"Update a registration's URL, events, or enabled flag","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json patch /v1/webhooks/registrations/{registration_id}","href":"/api-reference/webhooks/update-a-registrations-url-events-or-enabled-flag"},{"title":"Send a test event to a registration","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/webhooks/registrations/{registration_id}/test","href":"/api-reference/webhooks/send-a-test-event-to-a-registration"}]}]}]},"basePath":"","title":"Verify a custom domain and advance provisioning - Purple Label MD","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}