Looks up the TXT record at _qumo-verification.<domain> now, on
public resolvers. Found, it verifies a pending domain, or restores a
lapsed or frozen one, and returns 200. Not found, or a lookup that
failed, returns 422 with the domain unchanged: a failed verify never
lapses a domain, only the periodic re-check does. 409 when another
organization verified the domain first. Verifying a pending domain
is a new claim: like adding, it needs a plan with SSO (402) and an
organization that is not suspended (403). Re-verifying a verified,
lapsed or frozen domain keeps an existing claim healthy and is never
refused on the plan or a suspension.
A personal access token (POST /v1/auth/tokens) or a machine
identity token (POST /v1/projects/{project_id}/identities/{identity_id}/tokens),
both prefixed qumo_pat_. A token's scopes cap what it can do; see
Scopes and permissions. A personal
token names no organization: on a route whose path names no project or
organization, pass ?organization_id=.
pending until the record is found. verified once it is: the
domain belongs to this organization alone. lapsed when a
re-check found the record gone: everything keeps working until
grace_ends_at, 14 days on, while Organization Admins are
alerted. frozen after that: logins are not routed by the domain
and no new users are provisioned under it, and no other
organization can claim it. Verifying again restores a lapsed or
frozen domain.
Why the last check did not find the record; absent when it did.
Example:
"TXT record not found"
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Qumo Deploy","colors":{"primary":"#2563EB","light":"#60A5FA","dark":"#1E40AF"},"favicon":"https://mintcdn.com/qumo-deploy-docs/DwablpEIA07J0vcR/favicon.png?fit=max\u0026auto=format\u0026n=DwablpEIA07J0vcR\u0026q=85\u0026s=22ec50309a24b95a278e57a7bc205224","navbar":{"links":[{"href":"https://console.qumo-deploy.com","label":"Console"}],"primary":{"type":"button","label":"Get started","href":"https://console.qumo-deploy.com/login"}},"footer":{"socials":{"discord":"https://discord.gg/u25j99S9cZ"}},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","href":"guides/overview"},{"language":"ja","href":"ja/guides/overview"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"qumo-deploy-docs","hasAudioNarration":false,"actualSubdomain":"qumo-deploy-docs","customDomains":["docs.qumo-deploy.com"],"gitSource":{"type":"github","owner":"foalk-inc","repo":"qumo-deploy","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af0f4282cec4784bb1a67df","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"en","tag":"API Reference","count":172},{"language":"en","tag":"SDK","count":22},{"language":"en","tag":"SDK Reference","count":17},{"language":"en","tag":"Account","count":15},{"language":"en","tag":"Billing","count":14},{"language":"en","tag":"Organizations","count":13},{"language":"en","tag":"Access control","count":10},{"language":"en","tag":"Identities","count":9},{"language":"en","tag":"Help \u0026 Policies","count":6},{"language":"en","tag":"Projects","count":6},{"language":"ja","tag":"CLI","count":2},{"language":"ja","tag":"CLI リファレンス","count":2},{"language":"ja","tag":"コンソール","count":2},{"language":"ja","tag":"Web コンソール","count":2},{"language":"ja","tag":"ガイド","count":2},{"language":"ja","tag":"はじめに","count":2},{"language":"ja","tag":"ヘルプ","count":1},{"language":"ja","tag":"サポート","count":1},{"language":"ja","tag":"SDK","count":1},{"language":"ja","tag":"TypeScript SDK","count":1}]},"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":"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},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/organizations/verify-a-domain","slug":"/api-reference/organizations/verify-a-domain","pageMetadata":{"title":"Verify a domain","description":"Looks up the TXT record at `_qumo-verification.\u003cdomain>` now, on\npublic resolvers. Found, it verifies a pending domain, or restores a\nlapsed or frozen one, and returns 200. Not found, or a lookup that\nfailed, returns 422 with the domain unchanged: a failed verify never\nlapses a domain, only the periodic re-check does. 409 when another\norganization verified the domain first. Verifying a pending domain\nis a new claim: like adding, it needs a plan with SSO (402) and an\norganization that is not suspended (403). Re-verifying a verified,\nlapsed or frozen domain keeps an existing claim healthy and is never\nrefused on the plan or a suspension.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/domains/{domainID}/verify","href":"/api-reference/organizations/verify-a-domain","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: [\"Looks up the TXT record at \", _jsx(_components.code, {\n children: \"_qumo-verification.\u003cdomain>\"\n }), \" now, on\\npublic resolvers. Found, it verifies a pending domain, or restores a\\nlapsed or frozen one, and returns 200. Not found, or a lookup that\\nfailed, returns 422 with the domain unchanged: a failed verify never\\nlapses a domain, only the periodic re-check does. 409 when another\\norganization verified the domain first. Verifying a pending domain\\nis a new claim: like adding, it needs a plan with SSO (402) and an\\norganization that is not suspended (403). Re-verifying a verified,\\nlapsed or frozen domain keeps an existing claim healthy and is never\\nrefused on the plan or a suspension.\"]\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 domain","description":"Looks up the TXT record at `_qumo-verification.\u003cdomain>` now, on\npublic resolvers. Found, it verifies a pending domain, or restores a\nlapsed or frozen one, and returns 200. Not found, or a lookup that\nfailed, returns 422 with the domain unchanged: a failed verify never\nlapses a domain, only the periodic re-check does. 409 when another\norganization verified the domain first. Verifying a pending domain\nis a new claim: like adding, it needs a plan with SSO (402) and an\norganization that is not suspended (403). Re-verifying a verified,\nlapsed or frozen domain keeps an existing claim healthy and is never\nrefused on the plan or a suspension.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/domains/{domainID}/verify","href":"/api-reference/organizations/verify-a-domain","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"verifyOrganizationDomain","summary":"Verify a domain","description":"Looks up the TXT record at `_qumo-verification.\u003cdomain>` now, on\npublic resolvers. Found, it verifies a pending domain, or restores a\nlapsed or frozen one, and returns 200. Not found, or a lookup that\nfailed, returns 422 with the domain unchanged: a failed verify never\nlapses a domain, only the periodic re-check does. 409 when another\norganization verified the domain first. Verifying a pending domain\nis a new claim: like adding, it needs a plan with SSO (402) and an\norganization that is not suspended (403). Re-verifying a verified,\nlapsed or frozen domain keeps an existing claim healthy and is never\nrefused on the plan or a suspension.\n","tags":["Organizations"],"x-qumo-permission":"organization.domain_verify","security":["2e4c1c4a-3e65-496f-8dc6-bb094e02125a","259c0ad3-f6c5-457c-815e-9f95d682ac5c","0aec3459-965d-45a3-a763-87429fc64e60"],"responses":{"200":"3002c8db-4a3e-46ae-8511-980b2afdd1e5","400":"3006415f-15a3-4d35-a807-fa6f07018463","401":"b86548ec-28cc-4a76-8d6c-9cfae81020b7","402":"8cf2e89b-e333-45df-bfd4-42f3345b2e25","403":"0cf298d2-d7dc-4483-b01e-6f47e398cbd6","404":"f6ed2aff-83db-47b9-954e-288a68bf888d","409":"966a503a-89e1-453e-a8fa-7c72f653f7d4","422":"f8bd5712-4d3f-4f1f-b0bd-88d1f5c8103f"},"method":"post","type":"path","servers":["1cb7fe0a-2dab-4962-ac2c-051af9b786f8"],"path":"/v1/organizations/{id}/domains/{domainID}/verify","baseUrlOptions":["https://api.qumo-deploy.com"],"title":"Verify a domain","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"9f4be816-f347-4f24-a381-f67184f25c51":{"name":"id","in":"path","required":true,"description":"The organization's id.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"The organization's id.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"example":"3f8c2a1e-7b4d-4e9a-9c61-2d5e8f0a1b7c"},"f77043a5-f884-49d1-a360-60744829c286":{"name":"domainID","in":"path","required":true,"description":"The domain's id.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"The domain's id.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"example":"6e2a8c4f-1b3d-4a5e-9f7c-2d4b6a8e0c1f"}},"responses":{"3002c8db-4a3e-46ae-8511-980b2afdd1e5":{"description":"The record was found; the domain is verified.","content":{"application/json":{"schema":{"type":"object","required":["id","organization_id","domain","status","verification","created_by","created_at","verified_at","last_checked_at","lapsed_at","grace_ends_at","frozen_at"],"properties":{"id":{"type":"string","format":"uuid","example":"6e2a8c4f-1b3d-4a5e-9f7c-2d4b6a8e0c1f","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"organization_id":{"type":"string","format":"uuid","example":"3f8c2a1e-7b4d-4e9a-9c61-2d5e8f0a1b7c","isRequired":true,"uniqueKey":"organization_id","typeLabel":"string\u003cuuid>"},"domain":{"type":"string","description":"The normalized name, lowercase ASCII with no trailing dot.","example":"acme.example","isRequired":true,"uniqueKey":"domain","typeLabel":"string"},"status":{"type":"string","enum":["pending","verified","lapsed","frozen"],"description":"`pending` until the record is found. `verified` once it is: the\ndomain belongs to this organization alone. `lapsed` when a\nre-check found the record gone: everything keeps working until\n`grace_ends_at`, 14 days on, while Organization Admins are\nalerted. `frozen` after that: logins are not routed by the domain\nand no new users are provisioned under it, and no other\norganization can claim it. Verifying again restores a lapsed or\nfrozen domain.\n","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"verification":{"type":"object","description":"The DNS record that proves control of the domain. Keep it published while the domain is claimed; every re-check looks for it.","required":["record_type","record_name","record_value"],"properties":{"record_type":{"type":"string","enum":["TXT"],"isRequired":true,"uniqueKey":"verification.record_type","typeLabel":"enum\u003cstring>"},"record_name":{"type":"string","example":"_qumo-verification.acme.example","isRequired":true,"uniqueKey":"verification.record_name","typeLabel":"string"},"record_value":{"type":"string","example":"qumo-verification=Zk3v9m8b0Q2xY7tH1pLwR4sN6cJ5aE8uD0iG3oK2fV1","isRequired":true,"uniqueKey":"verification.record_value","typeLabel":"string"}},"isRequired":true,"uniqueKey":"verification","typeLabel":"object"},"created_by":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"created_by","typeLabel":"string\u003cuuid>"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"verified_at":{"oneOf":[{"type":"string","format":"date-time","description":"The last time the record was found.","isRequired":true,"uniqueKey":"verified_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"The last time the record was found.","isRequired":true,"uniqueKey":"verified_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"verified_at","typeLabel":"string\u003cdate-time> | null"},"last_checked_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"last_checked_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"last_checked_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"last_checked_at","typeLabel":"string\u003cdate-time> | null"},"lapsed_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"lapsed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"lapsed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"lapsed_at","typeLabel":"string\u003cdate-time> | null"},"grace_ends_at":{"oneOf":[{"type":"string","format":"date-time","description":"When a lapsed domain is frozen unless the record is back.","isRequired":true,"uniqueKey":"grace_ends_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When a lapsed domain is frozen unless the record is back.","isRequired":true,"uniqueKey":"grace_ends_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"grace_ends_at","typeLabel":"string\u003cdate-time> | null"},"frozen_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"frozen_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"frozen_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"frozen_at","typeLabel":"string\u003cdate-time> | null"},"last_check_error":{"type":"string","description":"Why the last check did not find the record; absent when it did.","example":"TXT record not found","uniqueKey":"last_check_error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"6e2a8c4f-1b3d-4a5e-9f7c-2d4b6a8e0c1f","organization_id":"3f8c2a1e-7b4d-4e9a-9c61-2d5e8f0a1b7c","domain":"acme.example","status":"pending","verification":{"record_type":"TXT","record_name":"_qumo-verification.acme.example","record_value":"qumo-verification=Zk3v9m8b0Q2xY7tH1pLwR4sN6cJ5aE8uD0iG3oK2fV1"},"created_by":"3c90c3cc-0d44-4b50-8888-8dd25736052a","created_at":"2023-11-07T05:31:56Z","verified_at":"2023-11-07T05:31:56Z","last_checked_at":"2023-11-07T05:31:56Z","lapsed_at":"2023-11-07T05:31:56Z","grace_ends_at":"2023-11-07T05:31:56Z","frozen_at":"2023-11-07T05:31:56Z","last_check_error":"TXT record not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"3006415f-15a3-4d35-a807-fa6f07018463":{"description":"Malformed request or failed validation. See [Error codes](/guides/error-codes).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A human-readable message.","example":"organization_id is required","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"organization_id is required"}}},"exampleType":"generated"}},"exampleType":"generated"},"b86548ec-28cc-4a76-8d6c-9cfae81020b7":{"description":"Missing or invalid credentials. See [Error codes](/guides/error-codes).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A human-readable message.","example":"organization_id is required","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"organization_id is required"}}},"exampleType":"generated"}},"exampleType":"generated"},"8cf2e89b-e333-45df-bfd4-42f3345b2e25":{"description":"The organization's plan does not include this. See [Error codes](/guides/error-codes).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A human-readable message.","example":"organization_id is required","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"organization_id is required"}}},"exampleType":"generated"}},"exampleType":"generated"},"0cf298d2-d7dc-4483-b01e-6f47e398cbd6":{"description":"Authenticated but not allowed (permission, token scope, IP allowlist or CSRF). See [Error codes](/guides/error-codes).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A human-readable message.","example":"organization_id is required","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"organization_id is required"}}},"exampleType":"generated"}},"exampleType":"generated"},"f6ed2aff-83db-47b9-954e-288a68bf888d":{"description":"Not found, or not visible to the caller. See [Error codes](/guides/error-codes).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A human-readable message.","example":"organization_id is required","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"organization_id is required"}}},"exampleType":"generated"}},"exampleType":"generated"},"966a503a-89e1-453e-a8fa-7c72f653f7d4":{"description":"Conflicts with the current state. See [Error codes](/guides/error-codes).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A human-readable message.","example":"organization_id is required","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"organization_id is required"}}},"exampleType":"generated"}},"exampleType":"generated"},"f8bd5712-4d3f-4f1f-b0bd-88d1f5c8103f":{"description":"The record was not found, or the lookup failed.","content":{"application/json":{"schema":{"type":"object","required":["error","domain"],"properties":{"error":{"type":"string","example":"verification record not found","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"domain":{"type":"object","required":["id","organization_id","domain","status","verification","created_by","created_at","verified_at","last_checked_at","lapsed_at","grace_ends_at","frozen_at"],"properties":{"id":{"type":"string","format":"uuid","example":"6e2a8c4f-1b3d-4a5e-9f7c-2d4b6a8e0c1f","isRequired":true,"uniqueKey":"domain.id","typeLabel":"string\u003cuuid>"},"organization_id":{"type":"string","format":"uuid","example":"3f8c2a1e-7b4d-4e9a-9c61-2d5e8f0a1b7c","isRequired":true,"uniqueKey":"domain.organization_id","typeLabel":"string\u003cuuid>"},"domain":{"type":"string","description":"The normalized name, lowercase ASCII with no trailing dot.","example":"acme.example","isRequired":true,"uniqueKey":"domain.domain","typeLabel":"string"},"status":{"type":"string","enum":["pending","verified","lapsed","frozen"],"description":"`pending` until the record is found. `verified` once it is: the\ndomain belongs to this organization alone. `lapsed` when a\nre-check found the record gone: everything keeps working until\n`grace_ends_at`, 14 days on, while Organization Admins are\nalerted. `frozen` after that: logins are not routed by the domain\nand no new users are provisioned under it, and no other\norganization can claim it. Verifying again restores a lapsed or\nfrozen domain.\n","isRequired":true,"uniqueKey":"domain.status","typeLabel":"enum\u003cstring>"},"verification":{"type":"object","description":"The DNS record that proves control of the domain. Keep it published while the domain is claimed; every re-check looks for it.","required":["record_type","record_name","record_value"],"properties":{"record_type":{"type":"string","enum":["TXT"],"isRequired":true,"uniqueKey":"domain.verification.record_type","typeLabel":"enum\u003cstring>"},"record_name":{"type":"string","example":"_qumo-verification.acme.example","isRequired":true,"uniqueKey":"domain.verification.record_name","typeLabel":"string"},"record_value":{"type":"string","example":"qumo-verification=Zk3v9m8b0Q2xY7tH1pLwR4sN6cJ5aE8uD0iG3oK2fV1","isRequired":true,"uniqueKey":"domain.verification.record_value","typeLabel":"string"}},"isRequired":true,"uniqueKey":"domain.verification","typeLabel":"object"},"created_by":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"domain.created_by","typeLabel":"string\u003cuuid>"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"domain.created_at","typeLabel":"string\u003cdate-time>"},"verified_at":{"oneOf":[{"type":"string","format":"date-time","description":"The last time the record was found.","isRequired":true,"uniqueKey":"domain.verified_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"The last time the record was found.","isRequired":true,"uniqueKey":"domain.verified_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"domain.verified_at","typeLabel":"string\u003cdate-time> | null"},"last_checked_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"domain.last_checked_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"domain.last_checked_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"domain.last_checked_at","typeLabel":"string\u003cdate-time> | null"},"lapsed_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"domain.lapsed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"domain.lapsed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"domain.lapsed_at","typeLabel":"string\u003cdate-time> | null"},"grace_ends_at":{"oneOf":[{"type":"string","format":"date-time","description":"When a lapsed domain is frozen unless the record is back.","isRequired":true,"uniqueKey":"domain.grace_ends_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When a lapsed domain is frozen unless the record is back.","isRequired":true,"uniqueKey":"domain.grace_ends_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"domain.grace_ends_at","typeLabel":"string\u003cdate-time> | null"},"frozen_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"domain.frozen_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"domain.frozen_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"domain.frozen_at","typeLabel":"string\u003cdate-time> | null"},"last_check_error":{"type":"string","description":"Why the last check did not find the record; absent when it did.","example":"TXT record not found","uniqueKey":"domain.last_check_error","typeLabel":"string"}},"isRequired":true,"uniqueKey":"domain","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"verification record not found","domain":{"id":"6e2a8c4f-1b3d-4a5e-9f7c-2d4b6a8e0c1f","organization_id":"3f8c2a1e-7b4d-4e9a-9c61-2d5e8f0a1b7c","domain":"acme.example","status":"pending","verification":{"record_type":"TXT","record_name":"_qumo-verification.acme.example","record_value":"qumo-verification=Zk3v9m8b0Q2xY7tH1pLwR4sN6cJ5aE8uD0iG3oK2fV1"},"created_by":"3c90c3cc-0d44-4b50-8888-8dd25736052a","created_at":"2023-11-07T05:31:56Z","verified_at":"2023-11-07T05:31:56Z","last_checked_at":"2023-11-07T05:31:56Z","lapsed_at":"2023-11-07T05:31:56Z","grace_ends_at":"2023-11-07T05:31:56Z","frozen_at":"2023-11-07T05:31:56Z","last_check_error":"TXT record not found"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"2e4c1c4a-3e65-496f-8dc6-bb094e02125a":{"token":{"type":"http","scheme":"bearer","bearerFormat":"qumo_pat_","description":"A personal access token (`POST /v1/auth/tokens`) or a machine\nidentity token (`POST /v1/projects/{project_id}/identities/{identity_id}/tokens`),\nboth prefixed `qumo_pat_`. A token's scopes cap what it can do; see\n[Scopes and permissions](/guides/scopes-permissions). A personal\ntoken names no organization: on a route whose path names no project or\norganization, pass `?organization_id=`.\n","scopes":[],"schemeName":"token"}},"259c0ad3-f6c5-457c-815e-9f95d682ac5c":{"cliSession":{"type":"http","scheme":"bearer","description":"The session token `qumod login` obtains through the device flow\n(`POST /v1/auth/device/token`). It acts as the signed-in user, like a\nconsole session, and needs no CSRF token.\n","scopes":[],"schemeName":"cliSession"}},"0aec3459-965d-45a3-a763-87429fc64e60":{"sessionCookie":{"type":"apiKey","in":"cookie","name":"__Host-qumo_session","description":"The console's browser session. Accepted only on the console origin\n(`https://console.qumo-deploy.com`), never on `api.qumo-deploy.com`.\nA request that changes state must also send `X-CSRF-Token`.\n","scopes":[],"schemeName":"sessionCookie"},"csrfToken":{"type":"apiKey","in":"header","name":"X-CSRF-Token","description":"CSRF token paired with `sessionCookie` on POST, PUT, PATCH and DELETE.\nBearer requests do not send it.\n","scopes":[],"schemeName":"csrfToken"}}},"servers":{"1cb7fe0a-2dab-4962-ac2c-051af9b786f8":{"url":"https://api.qumo-deploy.com","description":"Public API (Bearer tokens only; cookies are ignored)"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"qumo_pat_","description":"A personal access token (`POST /v1/auth/tokens`) or a machine\nidentity token (`POST /v1/projects/{project_id}/identities/{identity_id}/tokens`),\nboth prefixed `qumo_pat_`. A token's scopes cap what it can do; see\n[Scopes and permissions](/guides/scopes-permissions). A personal\ntoken names no organization: on a route whose path names no project or\norganization, pass `?organization_id=`.\n","scopes":[],"schemeName":"token"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A personal access token (`POST /v1/auth/tokens`) or a machine\nidentity token (`POST /v1/projects/{project_id}/identities/{identity_id}/tokens`),\nboth prefixed `qumo_pat_`. A token's scopes cap what it can do; see\n[Scopes and permissions](/guides/scopes-permissions). A personal\ntoken names no organization: on a route whose path names no project or\norganization, pass `?organization_id=`.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"token","name":"Authorization"}],"title":"token"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"The session token `qumod login` obtains through the device flow\n(`POST /v1/auth/device/token`). It acts as the signed-in user, like a\nconsole session, and needs no CSRF token.\n","scopes":[],"schemeName":"cliSession"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"The session token `qumod login` obtains through the device flow\n(`POST /v1/auth/device/token`). It acts as the signed-in user, like a\nconsole session, and needs no CSRF token.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"cliSession","name":"Authorization"}],"title":"cliSession"},{"schemes":[{"scheme":{"type":"apiKey","in":"cookie","name":"__Host-qumo_session","description":"The console's browser session. Accepted only on the console origin\n(`https://console.qumo-deploy.com`), never on `api.qumo-deploy.com`.\nA request that changes state must also send `X-CSRF-Token`.\n","scopes":[],"schemeName":"sessionCookie"},"schema":{"title":"__Host-qumo_session","type":"string","description":"The console's browser session. Accepted only on the console origin\n(`https://console.qumo-deploy.com`), never on `api.qumo-deploy.com`.\nA request that changes state must also send `X-CSRF-Token`.\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"sessionCookie","name":"__Host-qumo_session"},{"scheme":{"type":"apiKey","in":"header","name":"X-CSRF-Token","description":"CSRF token paired with `sessionCookie` on POST, PUT, PATCH and DELETE.\nBearer requests do not send it.\n","scopes":[],"schemeName":"csrfToken"},"schema":{"title":"X-CSRF-Token","type":"string","description":"CSRF token paired with `sessionCookie` on POST, PUT, PATCH and DELETE.\nBearer requests do not send it.\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"csrfToken","name":"X-CSRF-Token"}],"title":"sessionCookie \u0026 csrfToken"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"qumo-deploy-docs","siteName":"Qumo Deploy","title":"Verify a domain - Qumo Deploy","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/organizations/verify-a-domain","matchLevel":0},"ja":{"href":"/ja/guides/overview","matchLevel":4}}},"lastModified":"2026-11-08T22:14:09.163Z","originalFileLocation":"api-reference/organizations/verify-a-domain.mdx","locale":"en"},"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=\"Looks up the TXT record at _qumo-verification. now, on public resolvers. Found, it verifies a pending domain, or restores a lapsed or frozen one, and returns 200. Not found, or a lookup that failed, returns 422 with the domain unchanged: a failed verify never lapses a domain, only the periodic re-check does. 409 when another organization verified the domain first. Verifying a pending domain is a new claim: like adding, it needs a plan with SSO (402) and an organization that is not suspended (403). Re-verifying a verified, lapsed or frozen domain keeps an existing claim healthy and is never refused on the plan or a suspension.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Qumo Deploy\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qumo-deploy-docs/8f91l5H7acTtpJ4W/_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/qumo-deploy-docs/8f91l5H7acTtpJ4W/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qumo-deploy-docs/8f91l5H7acTtpJ4W/_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/qumo-deploy-docs/8f91l5H7acTtpJ4W/_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/qumo-deploy-docs/8f91l5H7acTtpJ4W/_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/qumo-deploy-docs/8f91l5H7acTtpJ4W/_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/qumo-deploy-docs/8f91l5H7acTtpJ4W/_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/qumo-deploy-docs/8f91l5H7acTtpJ4W/_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/qumo-deploy-docs/8f91l5H7acTtpJ4W/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Verify a domain - Qumo Deploy\">\u003cmeta data-mint-head property=\"og:description\" content=\"Looks up the TXT record at _qumo-verification. now, on public resolvers. Found, it verifies a pending domain, or restores a lapsed or frozen one, and returns 200. Not found, or a lookup that failed, returns 422 with the domain unchanged: a failed verify never lapses a domain, only the periodic re-check does. 409 when another organization verified the domain first. Verifying a pending domain is a new claim: like adding, it needs a plan with SSO (402) and an organization that is not suspended (403). Re-verifying a verified, lapsed or frozen domain keeps an existing claim healthy and is never refused on the plan or a suspension.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Qumo Deploy\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://qumo-deploy-docs.mintlify.site/_mintlify/api/og/v2?division=Organizations\u0026amp;title=Verify+a+domain\u0026amp;description=Looks+up+the+TXT+record+at+%60_qumo-verification.%3Cdomain%3E%60+now%2C+on%0Apublic+resolvers.+Found%2C+it+verifies+a+pending+domain%2C+or+restores+a%0Alapsed+or+frozen+one%2C+and+\u0026amp;theme=f93f9f41876bb5c60e936f10\u0026amp;signature=655ed18e54cc80bfce6a0d70f75e0bc26d104dc39239ab7992b3c64c35d09908\">\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 domain - Qumo Deploy\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Looks up the TXT record at _qumo-verification. now, on public resolvers. Found, it verifies a pending domain, or restores a lapsed or frozen one, and returns 200. Not found, or a lookup that failed, returns 422 with the domain unchanged: a failed verify never lapses a domain, only the periodic re-check does. 409 when another organization verified the domain first. Verifying a pending domain is a new claim: like adding, it needs a plan with SSO (402) and an organization that is not suspended (403). Re-verifying a verified, lapsed or frozen domain keeps an existing claim healthy and is never refused on the plan or a suspension.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qumo-deploy-docs.mintlify.site/_mintlify/api/og/v2?division=Organizations\u0026amp;title=Verify+a+domain\u0026amp;description=Looks+up+the+TXT+record+at+%60_qumo-verification.%3Cdomain%3E%60+now%2C+on%0Apublic+resolvers.+Found%2C+it+verifies+a+pending+domain%2C+or+restores+a%0Alapsed+or+frozen+one%2C+and+\u0026amp;theme=f93f9f41876bb5c60e936f10\u0026amp;signature=655ed18e54cc80bfce6a0d70f75e0bc26d104dc39239ab7992b3c64c35d09908\">\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/qumo-deploy-docs/8f91l5H7acTtpJ4W/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Qumo Deploy\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2563EB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/organizations/verify-a-domain.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.qumo-deploy.com/#organization\",\"name\":\"Qumo Deploy\",\"url\":\"https://docs.qumo-deploy.com\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.qumo-deploy.com#website\",\"name\":\"Qumo Deploy\",\"url\":\"https://docs.qumo-deploy.com\",\"publisher\":{\"@id\":\"https://docs.qumo-deploy.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain#webpage\",\"url\":\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain\",\"name\":\"Verify a domain\",\"description\":\"Looks up the TXT record at _qumo-verification. now, on public resolvers. Found, it verifies a pending domain, or restores a lapsed or frozen one, and returns 200. Not found, or a lookup that failed, returns 422 with the domain unchanged: a failed verify never lapses a domain, only the periodic re-check does. 409 when another organization verified the domain first. Verifying a pending domain is a new claim: like adding, it needs a plan with SSO (402) and an organization that is not suspended (403). Re-verifying a verified, lapsed or frozen domain keeps an existing claim healthy and is never refused on the plan or a suspension.\",\"dateModified\":\"2026-11-08T22:14:09.163Z\",\"isPartOf\":{\"@id\":\"https://docs.qumo-deploy.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.qumo-deploy.com/api-reference/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Organizations\",\"item\":\"https://docs.qumo-deploy.com/api-reference/organizations/create-an-organization\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Verify a domain\",\"item\":\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain#apireference\",\"headline\":\"Verify a domain\",\"name\":\"Verify a domain\",\"description\":\"Looks up the TXT record at _qumo-verification. now, on public resolvers. Found, it verifies a pending domain, or restores a lapsed or frozen one, and returns 200. Not found, or a lookup that failed, returns 422 with the domain unchanged: a failed verify never lapses a domain, only the periodic re-check does. 409 when another organization verified the domain first. Verifying a pending domain is a new claim: like adding, it needs a plan with SSO (402) and an organization that is not suspended (403). Re-verifying a verified, lapsed or frozen domain keeps an existing claim healthy and is never refused on the plan or a suspension.\",\"url\":\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain\",\"mainEntityOfPage\":{\"@id\":\"https://docs.qumo-deploy.com/api-reference/organizations/verify-a-domain#webpage\"},\"dateModified\":\"2026-11-08T22:14:09.163Z\",\"publisher\":{\"@id\":\"https://docs.qumo-deploy.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.qumo-deploy.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Qumo Deploy\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Qumo Deploy","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/overview"}]},{"tab":"Console","pages":[{"title":"Console","href":"/console/overview"}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/cli/overview"}]},{"tab":"SDK","pages":[{"title":"SDK","href":"/sdk/overview"}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"REST API Overview","href":"/api-reference/introduction"},{"group":"Account","pages":[{"title":"List personal access tokens","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/auth/tokens","href":"/api-reference/account/list-personal-access-tokens"},{"title":"Create a personal access token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/tokens","href":"/api-reference/account/create-a-personal-access-token"},{"title":"Revoke a personal access token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/auth/tokens/{token_id}","href":"/api-reference/account/revoke-a-personal-access-token"},{"title":"Get the current session","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/auth/session","href":"/api-reference/account/get-the-current-session"},{"title":"List organization memberships","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/auth/memberships","href":"/api-reference/account/list-organization-memberships"},{"title":"List sessions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/auth/sessions","href":"/api-reference/account/list-sessions"},{"title":"Revoke a session","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/auth/sessions/{id}","href":"/api-reference/account/revoke-a-session"},{"title":"Revoke all other sessions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/sessions/revoke-others","href":"/api-reference/account/revoke-all-other-sessions"},{"title":"Export account data","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/users/me/export","href":"/api-reference/account/export-account-data"},{"title":"Delete account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/users/me","href":"/api-reference/account/delete-account"},{"title":"Complete onboarding","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/users/me/onboarding","href":"/api-reference/account/complete-onboarding"},{"title":"List sign-in providers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/auth/providers","href":"/api-reference/account/list-sign-in-providers"},{"title":"Start two-factor setup","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/totp/setup","href":"/api-reference/account/start-two-factor-setup"},{"title":"Enable two-factor authentication","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/totp/enable","href":"/api-reference/account/enable-two-factor-authentication"},{"title":"Disable two-factor authentication","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/totp/disable","href":"/api-reference/account/disable-two-factor-authentication"}]},{"group":"Organizations","pages":[{"title":"Create an organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/organizations","href":"/api-reference/organizations/create-an-organization"},{"title":"Get organization usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}/usage","href":"/api-reference/organizations/get-organization-usage"},{"title":"Get an organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}","href":"/api-reference/organizations/get-an-organization"},{"title":"Delete an organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/organizations/{id}","href":"/api-reference/organizations/delete-an-organization"},{"title":"Update an organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/organizations/{id}","href":"/api-reference/organizations/update-an-organization"},{"title":"List an organization's domains","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}/domains","href":"/api-reference/organizations/list-an-organizations-domains"},{"title":"Add a domain to an organization","description":"Adds a domain as a pending claim and returns the TXT record to\npublish at `_qumo-verification.\u003cdomain>`; then call verify. Several\norganizations may hold a pending claim on one domain, but a domain\nanother organization has verified is refused with 409. Public mail\ndomains (gmail.com, outlook.com, yahoo.*, …) can never be claimed\n(422), and IP addresses, single labels and special-use names\n(localhost, .local, .internal, …) are refused with 400. Adding a\ndomain the organization holds already returns it unchanged (200).\nAn organization holds at most 20 domains (422). Needs the\norganization's own plan to include SSO (Pay as you go or Enterprise;\n402 on Free), and the organization not to be suspended (403).\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/domains","href":"/api-reference/organizations/add-a-domain-to-an-organization"},{"title":"Verify a domain","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/domains/{domainID}/verify","href":"/api-reference/organizations/verify-a-domain"},{"title":"Release a domain","description":"Gives the domain up, in any state, so another organization may claim\nit. A domain is never released automatically: this is the only\nrelease, by an Organization Admin, or by a platform admin once the\ndomain's new owner has proved control. Release is never gated on the\nplan or a suspension, so an organization on Free can still let its\ndomains go.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/organizations/{id}/domains/{domainID}","href":"/api-reference/organizations/release-a-domain"},{"title":"List an organization's managed accounts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}/managed-accounts","href":"/api-reference/organizations/list-an-organizations-managed-accounts"},{"title":"List managed users' memberships in other organizations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}/outside-memberships","href":"/api-reference/organizations/list-managed-users-memberships-in-other-organizations"},{"title":"Deactivate a managed account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/managed-accounts/{userID}/deactivate","href":"/api-reference/organizations/deactivate-a-managed-account"},{"title":"Reactivate a managed account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/managed-accounts/{userID}/reactivate","href":"/api-reference/organizations/reactivate-a-managed-account"}]},{"group":"Device flow","pages":[{"title":"Start a device sign-in","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/device/code","href":"/api-reference/device-flow/start-a-device-sign-in"},{"title":"Poll for the device sign-in token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/device/token","href":"/api-reference/device-flow/poll-for-the-device-sign-in-token"},{"title":"Approve a device sign-in","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/device/verify","href":"/api-reference/device-flow/approve-a-device-sign-in"}]},{"group":"Access control","pages":[{"title":"Look up an invitation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/auth/verify-invitation","href":"/api-reference/access-control/look-up-an-invitation"},{"title":"List roles","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/roles","href":"/api-reference/access-control/list-roles"},{"title":"List a project's IAM bindings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{id}/iam-bindings","href":"/api-reference/access-control/list-a-projects-iam-bindings"},{"title":"Grant a role on a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects/{id}/iam-bindings","href":"/api-reference/access-control/grant-a-role-on-a-project"},{"title":"List an organization's IAM bindings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}/iam-bindings","href":"/api-reference/access-control/list-an-organizations-iam-bindings"},{"title":"Grant a role on an organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/iam-bindings","href":"/api-reference/access-control/grant-a-role-on-an-organization"},{"title":"Remove an IAM binding","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/iam-bindings/{binding_id}","href":"/api-reference/access-control/remove-an-iam-binding"},{"title":"List pending invitations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/invitations","href":"/api-reference/access-control/list-pending-invitations"},{"title":"Invite someone to the organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/invitations","href":"/api-reference/access-control/invite-someone-to-the-organization"},{"title":"Cancel an invitation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/invitations/{id}","href":"/api-reference/access-control/cancel-an-invitation"}]},{"group":"Projects","pages":[{"title":"List projects","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects","href":"/api-reference/projects/list-projects"},{"title":"Create a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects","href":"/api-reference/projects/create-a-project"},{"title":"Delete a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/projects/{id}","href":"/api-reference/projects/delete-a-project"},{"title":"Rename a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/projects/{id}","href":"/api-reference/projects/rename-a-project"},{"title":"Get project usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{id}/usage","href":"/api-reference/projects/get-project-usage"},{"title":"Get the live-broadcast quota","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{id}/broadcast-quota","href":"/api-reference/projects/get-the-live-broadcast-quota"}]},{"group":"Signing keys","pages":[{"title":"List signing keys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{id}/signing-keys","href":"/api-reference/signing-keys/list-signing-keys"},{"title":"Register a signing key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects/{id}/signing-keys","href":"/api-reference/signing-keys/register-a-signing-key"},{"title":"Revoke a signing key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects/{id}/signing-keys/{kid}/revoke","href":"/api-reference/signing-keys/revoke-a-signing-key"}]},{"group":"Relays","pages":[{"title":"Find relays for a broadcast path","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/relays","href":"/api-reference/relays/find-relays-for-a-broadcast-path"}]},{"group":"Pricing","pages":[{"title":"Get the headline price","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/pricing","href":"/api-reference/pricing/get-the-headline-price"},{"title":"List plans","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/plans","href":"/api-reference/pricing/list-plans"},{"title":"List products","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/skus","href":"/api-reference/pricing/list-products"}]},{"group":"Identities","pages":[{"title":"List machine identities","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{project_id}/identities","href":"/api-reference/identities/list-machine-identities"},{"title":"Create a machine identity","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects/{project_id}/identities","href":"/api-reference/identities/create-a-machine-identity"},{"title":"Delete a machine identity","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/projects/{project_id}/identities/{identity_id}","href":"/api-reference/identities/delete-a-machine-identity"},{"title":"List identity tokens","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{project_id}/identities/{identity_id}/tokens","href":"/api-reference/identities/list-identity-tokens"},{"title":"Create an identity token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects/{project_id}/identities/{identity_id}/tokens","href":"/api-reference/identities/create-an-identity-token"},{"title":"Revoke an identity token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/projects/{project_id}/identities/{identity_id}/tokens/{token_id}","href":"/api-reference/identities/revoke-an-identity-token"},{"title":"List an identity's IP allowlist","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{project_id}/identities/{identity_id}/ip-allowlists","href":"/api-reference/identities/list-an-identitys-ip-allowlist"},{"title":"Add an IP allowlist entry","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects/{project_id}/identities/{identity_id}/ip-allowlists","href":"/api-reference/identities/add-an-ip-allowlist-entry"},{"title":"Remove an IP allowlist entry","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/projects/{project_id}/identities/{identity_id}/ip-allowlists/{allowlist_id}","href":"/api-reference/identities/remove-an-ip-allowlist-entry"}]},{"group":"Audit","pages":[{"title":"List the organization audit log","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/audit-log","href":"/api-reference/audit/list-the-organization-audit-log"},{"title":"List a project's audit log","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{id}/audit-log","href":"/api-reference/audit/list-a-projects-audit-log"},{"title":"Get the audit webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/audit-webhooks","href":"/api-reference/audit/get-the-audit-webhook"},{"title":"Configure the audit webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /v1/audit-webhooks","href":"/api-reference/audit/configure-the-audit-webhook"}]},{"group":"Notifications","pages":[{"title":"List notification policies","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/notifications/policies","href":"/api-reference/notifications/list-notification-policies"},{"title":"Create a notification policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/notifications/policies","href":"/api-reference/notifications/create-a-notification-policy"},{"title":"Delete a notification policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/notifications/policies/{id}","href":"/api-reference/notifications/delete-a-notification-policy"},{"title":"Send a test notification","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/notifications/policies/{id}/test","href":"/api-reference/notifications/send-a-test-notification"}]},{"group":"Billing","pages":[{"title":"Start a plan checkout","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/billing/checkout-sessions","href":"/api-reference/billing/start-a-plan-checkout"},{"title":"Open the billing portal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/billing/portal-sessions","href":"/api-reference/billing/open-the-billing-portal"},{"title":"Export usage as CSV","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/billing/export","href":"/api-reference/billing/export-usage-as-csv"},{"title":"Get a project's billing summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{id}/billing/summary","href":"/api-reference/billing/get-a-projects-billing-summary"},{"title":"Get an organization's billing summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}/billing/summary","href":"/api-reference/billing/get-an-organizations-billing-summary"},{"title":"Get an organization's budget","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}/budget","href":"/api-reference/billing/get-an-organizations-budget"},{"title":"Set an organization's budget","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /v1/organizations/{id}/budget","href":"/api-reference/billing/set-an-organizations-budget"},{"title":"List an organization's invoices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}/invoices","href":"/api-reference/billing/list-an-organizations-invoices"},{"title":"List an organization's payment methods","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/organizations/{id}/payment-methods","href":"/api-reference/billing/list-an-organizations-payment-methods"},{"title":"Remove a payment method","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/organizations/{id}/payment-methods/{methodID}","href":"/api-reference/billing/remove-a-payment-method"},{"title":"Make a payment method the default","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/organizations/{id}/payment-methods/{methodID}/default","href":"/api-reference/billing/make-a-payment-method-the-default"},{"title":"Start adding a payment method","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/payment-methods/setup-intent","href":"/api-reference/billing/start-adding-a-payment-method"},{"title":"Cancel the subscription at the end of the period","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/subscription/cancel","href":"/api-reference/billing/cancel-the-subscription-at-the-end-of-the-period"},{"title":"Undo a scheduled cancellation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/organizations/{id}/subscription/resume","href":"/api-reference/billing/undo-a-scheduled-cancellation"}]}]}]},{"tab":"Releases","pages":[{"title":"Releases","href":"/releases/overview"}]},{"tab":"Help \u0026 Policies","pages":[{"title":"Help \u0026 Policies","href":"/legal/terms"}]}]},{"language":"ja","pages":[{"title":"ja","href":"/ja/guides/overview"}]}]},"basePath":"","title":"Verify a domain - Qumo Deploy","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}