Registrar
Registrar API for searching, checking, registering, and managing domains through Cloudflare Registrar.
Prerequisites
Before using this API, ensure:
- Cloudflare account — the caller must have a valid Cloudflare account.
- Billing profile — the account must have a billing profile with a valid,
current default payment method (credit card or other accepted method).
This cannot be set up via API — the account owner must configure billing
at
https://dash.cloudflare.com/{account_id}/billing/payment-infobefore callingPOST /registrations. - API authentication — use an API token or API key with the appropriate Registrar permissions for the operations you are calling.
Terminology: domain extension
Throughout this API, “extension” refers to the domain extension part of a fully
qualified domain name — the portion after the registrable label. For example,
in example.co.uk, the extension is co.uk (not just uk). This covers both
top-level domains like com and multi-level extensions like co.uk. This is
distinct from other uses of the word “extension” (e.g., EPP extensions).
Supported extensions
This API currently supports programmatic registration for the following extensions:
com, org, net, app, dev, cc, xyz, info, cloud, studio,
live, link, pro, tech, fyi, shop, online, tools, run,
games, build, systems, world, news, site, network, chat,
space, family, page, life, group, email, solutions, day,
blog, ing, icu, academy, today
Cloudflare Registrar supports 400+ extensions in the dashboard. Extensions
not listed above can be registered at https://dash.cloudflare.com/{account_id}/domains/registrations.
Typical workflow
- Search — call
GET /domain-search?q={keyword}to discover available domains. - Check — call
POST /domain-checkwith candidate domains to verify real-time availability and pricing. - Review the response — if
registrable: false, inspectreasonto understand whether the domain is unavailable, the extension is not supported by this API, the extension is not supported by Cloudflare Registrar at all, or the extension’s registry has frozen new registrations. - Handle premium domains — if
tier: premium, premium registration is not currently supported by this API. Surface the premium pricing to the user, but do not proceed toPOST /registrationsfor that domain. - Register — call
POST /registrationswith the chosen domain name for supported non-premium registrations. - Confirm completion — if the response is
201 Created, registration completed within the default timeout and no polling is needed. - Poll when needed — if the response is
202 Accepted, polllinks.selffrom the workflow response. - Stop for user action — if
state: action_required, stop polling and surfacecontext.actionto the user. The workflow will not resolve on its own. - Continue when blocked — if
state: blocked, continue polling and inform the user that a third party, such as the extension registry or losing registrar, is delaying progress. - Review failures before retrying — if
state: failed, reviewerror.codeanderror.message, then decide whether user action or a new Check call is needed.
All successful domain registrations are non-refundable. Once the registration
workflow completes with state: succeeded, the charge cannot be reversed.
Confirm pricing and domain choice with the user before calling POST /registrations.
Default behavior for mutating operations
By default, mutating operations such as create and update hold the connection for a bounded, server-defined amount of time while the operation completes. In most cases, the response contains a completed workflow status and no polling is required.
- Completed within the synchronous wait window: Returns
201(create) or200(update) with aworkflow_statuswherestate: succeededandcompleted: true. - Still processing after the synchronous wait window: Returns
202 Acceptedwith aworkflow_statuswherecompleted: false. Use thelinks.selfURL to poll for completion.
Non-blocking mode
To receive an immediate 202 Accepted response without waiting, send the
Prefer: respond-async request header (RFC 7240). The server will acknowledge
it with a Preference-Applied: respond-async response header.
Polling
When the response is 202, poll the workflow status endpoint indicated by
links.self in the response body until the workflow reaches a terminal
state or requires user action.