Skip to content
Start here

Check domain availability

POST/accounts/{account_id}/registrar/domain-check

Performs real-time, authoritative availability checks directly against domain registries. Use this endpoint to verify a domain is available before attempting registration via POST /registrations.

Important: Unlike the Search endpoint, these results are authoritative and reflect current registry status. Always check availability immediately before registration as domain status can change rapidly.

Note: This endpoint uses POST to accept a list of domains in the request body. It is a read-only operation — it does not create, modify, or reserve any domains.

Extension support

Only domains on extensions supported for programmatic registration by this API can be registered. If you check a domain on an unsupported extension, the response will include registrable: false with a reason field explaining why:

  • extension_not_supported_via_api — Cloudflare Registrar supports this extension in the dashboard, but it is not yet available for programmatic registration via this API. Register via https://dash.cloudflare.com/{account_id}/domains/registrations instead.
  • extension_not_supported — This extension is not supported by Cloudflare Registrar.
  • extension_disallows_registration — The extension’s registry has temporarily or permanently frozen new registrations. No registrar can register domains on this extension at this time.
  • domain_premium — The domain is premium priced. Premium registration is not currently supported by this API.
  • domain_unavailable — The domain is already registered, reserved, or otherwise not available for registration on a supported extension.

The reason field is only present when registrable is false.

Behavior

  • Maximum 20 domains per request
  • Pricing is only returned for domains where registrable: true
  • Results are not cached; each request queries the registry

Workflow

  1. Call this endpoint with domains the user wants to register.
  2. For each domain where registrable: true, present pricing to the user.
  3. If tier: premium, note that premium registration is not currently supported by this API and do not proceed to POST /registrations.
  4. Proceed to POST /registrations only for supported non-premium domains.
Security
API Token

The preferred authorization scheme for interacting with the Cloudflare API. Create a token.

Example:Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY
API Email + API Key

The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.

Example:X-Auth-Email: user@example.com

The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.

Example:X-Auth-Key: 144c9defac04969c7bfad8efaa8ea194
Path ParametersExpand Collapse
account_id: string

Identifier.

maxLength32
Body ParametersJSONExpand Collapse
domains: array of string

List of fully qualified domain names (FQDNs) to check for availability. Each domain must include the extension.

  • Minimum: 1 domain.
  • Maximum: 20 domains per request.
  • The response returns domains on unsupported extensions with registrable: false and a reason field.
  • The response may omit malformed domain names (e.g., names missing an extension).
ReturnsExpand Collapse
errors: array of object { code, message, source }
code: number
minimum1000
message: string
source: optional object { pointer }

Location of the invalid value that caused the error.

pointer: string

JSON Pointer to the invalid or missing request value.

messages: array of object { code, message, source }
code: number
minimum1000
message: string
source: optional object { pointer }

Location of the invalid value that caused the error.

pointer: string

JSON Pointer to the invalid or missing request value.

result: object { domains }

Contains the availability check results.

domains: array of object { name, registrable, pricing, 2 more }

Array of domain availability results. Results for unsupported extensions contain registrable: false and a reason field. The response may omit malformed domain names.

name: string

The fully qualified domain name (FQDN) in punycode format for internationalized domain names (IDNs).

registrable: boolean

Indicates programmatic registration eligibility according to a real-time registry check.

  • true: The domain is available for registration. The response includes the pricing object.
  • false: A restriction prevents registration. See the reason field for details. Some results, such as premium domains, may still include tier.
pricing: optional object { currency, registration_cost, renewal_cost }

Provides annual pricing information for a registrable domain. This object appears only when registrable is true. The API returns all per-year prices as strings to preserve decimal precision.

registration_cost and renewal_cost frequently have the same value, but may differ, especially when registries set different premium rates for initial registration and renewal. For a multi-year registration (e.g., 4 years), registration_cost applies to the first year and renewal_cost applies to each subsequent year. The values reflect the current registry rate, which may change over time. Search and Check may surface premium pricing, but this API currently supports standard registrations only.

currency: string

ISO-4217 currency code for the prices (e.g., “USD”, “EUR”, “GBP”).

registration_cost: string

The first-year cost to register this domain. For premium domains (tier: premium), the registry sets this price, which may significantly exceed standard pricing. For multi-year registrations, this cost applies to the first year only; renewal_cost applies to subsequent years.

renewal_cost: string

Per-year renewal cost for this domain. Applied to each year beyond the first year of a multi-year registration, and to each annual auto-renewal thereafter. May differ from registration_cost, especially for premium domains where initial registration often costs more than renewals.

reason: optional "extension_not_supported_via_api" or "extension_not_supported" or "extension_disallows_registration" or 2 more

Appears only when registrable is false and explains the result.

  • extension_not_supported_via_api: Cloudflare Registrar supports this extension in the dashboard but currently excludes it from programmatic registration through this API. The user can register via https://dash.cloudflare.com/{account_id}/domains/registrations.
  • extension_not_supported: Cloudflare Registrar excludes this extension entirely.
  • extension_disallows_registration: The extension’s registry temporarily or permanently freezes new registrations. Registrars currently cannot register domains on this extension.
  • domain_premium: The domain carries premium pricing. This API currently supports standard registrations only.
  • domain_unavailable: An existing registration, reservation, or other registry restriction makes the domain unavailable on a supported extension.
One of the following:
"extension_not_supported_via_api"
"extension_not_supported"
"extension_disallows_registration"
"domain_premium"
"domain_unavailable"
tier: optional "standard" or "premium"

The pricing tier for this domain. A registrable value of true always includes this field, which defaults to standard for most domains. A registrable value of false may omit it.

  • standard: Standard registry pricing.
  • premium: Premium domain with higher pricing from the registry.
One of the following:
"standard"
"premium"
success: true

Whether the API call was successful.

Check domain availability

curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/registrar/domain-check \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    -d '{
          "domains": [
            "myawesomebrand.com",
            "myawesomebrand.net",
            "myawesomebrand.org",
            "myawesomebrand.app",
            "myawesomebrand.dev"
          ]
        }'
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "xq7mz9brand.com",
        "pricing": {
          "currency": "USD",
          "registration_cost": "8.57",
          "renewal_cost": "8.57"
        },
        "registrable": true,
        "tier": "standard"
      },
      {
        "name": "xq7mz9brand.net",
        "pricing": {
          "currency": "USD",
          "registration_cost": "9.95",
          "renewal_cost": "9.95"
        },
        "registrable": true,
        "tier": "standard"
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "example.com",
        "reason": "domain_unavailable",
        "registrable": false
      },
      {
        "name": "example.net",
        "reason": "domain_unavailable",
        "registrable": false
      },
      {
        "name": "example.org",
        "reason": "domain_unavailable",
        "registrable": false
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "cloudflare.com",
        "reason": "domain_unavailable",
        "registrable": false
      },
      {
        "name": "my-unique-startup-name-2024.com",
        "pricing": {
          "currency": "USD",
          "registration_cost": "8.57",
          "renewal_cost": "8.57"
        },
        "registrable": true,
        "tier": "standard"
      },
      {
        "name": "my-unique-startup-name-2024.dev",
        "pricing": {
          "currency": "USD",
          "registration_cost": "10.11",
          "renewal_cost": "10.11"
        },
        "registrable": true,
        "tier": "standard"
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "coffee.xyz",
        "reason": "domain_premium",
        "registrable": false,
        "tier": "premium"
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "example.py",
        "reason": "extension_disallows_registration",
        "registrable": false
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "example.horse",
        "reason": "extension_not_supported",
        "registrable": false
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "mybrand.uk",
        "reason": "extension_not_supported_via_api",
        "registrable": false
      },
      {
        "name": "mybrand.com",
        "pricing": {
          "currency": "USD",
          "registration_cost": "8.57",
          "renewal_cost": "8.57"
        },
        "registrable": true,
        "tier": "standard"
      }
    ]
  },
  "success": true
}
{
  "errors": [
    {
      "code": 1006,
      "message": "domains array must contain at least one domain"
    }
  ],
  "messages": [],
  "result": null,
  "success": false
}
{
  "errors": [
    {
      "code": 1008,
      "message": "None of the provided domains are valid or have supported extensions"
    }
  ],
  "messages": [],
  "result": null,
  "success": false
}
{
  "errors": [
    {
      "code": 1007,
      "message": "domains array exceeds maximum of 20 domains"
    }
  ],
  "messages": [],
  "result": null,
  "success": false
}
Returns Examples
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "xq7mz9brand.com",
        "pricing": {
          "currency": "USD",
          "registration_cost": "8.57",
          "renewal_cost": "8.57"
        },
        "registrable": true,
        "tier": "standard"
      },
      {
        "name": "xq7mz9brand.net",
        "pricing": {
          "currency": "USD",
          "registration_cost": "9.95",
          "renewal_cost": "9.95"
        },
        "registrable": true,
        "tier": "standard"
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "example.com",
        "reason": "domain_unavailable",
        "registrable": false
      },
      {
        "name": "example.net",
        "reason": "domain_unavailable",
        "registrable": false
      },
      {
        "name": "example.org",
        "reason": "domain_unavailable",
        "registrable": false
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "cloudflare.com",
        "reason": "domain_unavailable",
        "registrable": false
      },
      {
        "name": "my-unique-startup-name-2024.com",
        "pricing": {
          "currency": "USD",
          "registration_cost": "8.57",
          "renewal_cost": "8.57"
        },
        "registrable": true,
        "tier": "standard"
      },
      {
        "name": "my-unique-startup-name-2024.dev",
        "pricing": {
          "currency": "USD",
          "registration_cost": "10.11",
          "renewal_cost": "10.11"
        },
        "registrable": true,
        "tier": "standard"
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "coffee.xyz",
        "reason": "domain_premium",
        "registrable": false,
        "tier": "premium"
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "example.py",
        "reason": "extension_disallows_registration",
        "registrable": false
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "example.horse",
        "reason": "extension_not_supported",
        "registrable": false
      }
    ]
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "domains": [
      {
        "name": "mybrand.uk",
        "reason": "extension_not_supported_via_api",
        "registrable": false
      },
      {
        "name": "mybrand.com",
        "pricing": {
          "currency": "USD",
          "registration_cost": "8.57",
          "renewal_cost": "8.57"
        },
        "registrable": true,
        "tier": "standard"
      }
    ]
  },
  "success": true
}
{
  "errors": [
    {
      "code": 1006,
      "message": "domains array must contain at least one domain"
    }
  ],
  "messages": [],
  "result": null,
  "success": false
}
{
  "errors": [
    {
      "code": 1008,
      "message": "None of the provided domains are valid or have supported extensions"
    }
  ],
  "messages": [],
  "result": null,
  "success": false
}
{
  "errors": [
    {
      "code": 1007,
      "message": "domains array exceeds maximum of 20 domains"
    }
  ],
  "messages": [],
  "result": null,
  "success": false
}