---
title: "Look the TXT record up now and verify the domain if it is there."
method: POST
path: "/v1/organizations/current/domains/{domainId}/verify"
tags: ["organizations"]
---

# Look the TXT record up now and verify the domain if it is there.

`POST /v1/organizations/current/domains/{domainId}/verify`

## Request

- Base URL: `https://api.50heads.com`
- URL: `https://api.50heads.com/v1/organizations/current/domains/{domainId}/verify`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.50heads.com/authorize`, token URL `https://auth.50heads.com/token`; client credentials, token URL `https://auth.50heads.com/token`, scopes: `organization:write`)

Organization admins only (403 `organization_admin_required`). Signed in, with a fresh proof in the `x-50h-reauth` header (401 `reauth_required`); with an API key, a connected app or a service account, with the scope named here and no proof, where the organization has machine identities (otherwise 403 `session_required`). The key's or app's person must be an organization admin. Every change is written to the organization's audit, with who made it (a person, a key, an app or a service account). `outcome` says what the lookup found: `verified`, `already_verified`, `record_missing`, `value_mismatch`, `lookup_failed` (try again later) or `held_elsewhere` (another organization has verified it). Only one organization can hold a domain. Verified domains are checked again daily; a missing record moves the domain to `warning` and emails the admins, and after 7 days to `failed`, when its policies stop applying.

## Path parameters

- `domainId` string, required

## Response `200`

OK

- OrganizationDomainVerifyResponse
  - `outcome` 'verified' | 'already_verified' | 'record_missing' | 'value_mismatch' | 'lookup_failed' | 'held_elsewhere', required
  - `domain` object, required
    - `id` string, required
    - `domain` string, required: Lower case, internationalised names in their ASCII (xn--) form. Subdomains are separate domains.
    - `state` 'pending' | 'verified' | 'warning' | 'failed' | 'revoked', required
    - `challenge` object, required
      - `recordName` string, required: `_50heads-challenge.<domain>`.
      - `recordType` 'TXT', required
      - `value` string, required: The whole TXT value, `50heads-domain-verification=` and the token.
    - `createdAt` string, required
    - `verifiedAt` string, nullable, required
    - `checkedAt` string, nullable, required
    - `lastError` string, nullable, required
    - `warningSince` string, nullable, required
    - `graceEndsAt` string, nullable, required

## Other responses

- `401`: No key or token, or it expired or was revoked.
- `403`: The key or token lacks the scope (`insufficient_scope`), or the action is not allowed.
- `404`: No such question, endpoint or delivery on this account.
- `429`: Too many requests; wait for Retry-After.

---

[API](https://skmtc.dev/50heads/apis/50heads-api.md) · [All operations](https://skmtc.dev/50heads/apis/50heads-api/llms.txt) · [OpenAPI document](https://skmtc.dev/50heads/apis/50heads-api/revisions/edbfecb1e360?raw)
