POST /accounts/{account_id}/registrar/registrations

Starts a domain registration workflow. This is a billable operation — successful registration charges the account's default payment method. All successful domain registrations are non-refundable — once the workflow completes with state: succeeded, the charge cannot be reversed.

Prerequisites

Supported extensions

In this API, "extension" means the full registrable suffix after the domain label. For example, in example.co.uk, the extension is co.uk.

Programmatic registration is currently supported for:

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 still be registered at https://dash.cloudflare.com/{account_id}/domains/registrations.

Express mode

The only required field is domain_name. If contacts is omitted, the system uses the account's default address book entry as the registrant. If no default exists and no contact is provided, the request fails. Set up a default address book entry and accept the required agreement at https://dash.cloudflare.com/{account_id}/domains/registrations.

Defaults

Premium domains

Premium domain registration is not currently supported by this API. If POST /domain-check returns tier: premium, do not call this endpoint for that domain.

Response behavior

By default, the server holds the connection for a bounded, server-defined amount of time while the registration completes. Most registrations finish within this window and return 201 Created with a completed workflow status.

If the registration is still processing after this synchronous wait window, the server returns 202 Accepted. Poll the URL in links.self to track progress.

To skip the wait and receive an immediate 202, send Prefer: respond-async.

Servers

Path parameters

Name Type Required Description
account_id String Yes

Cloudflare account ID. Required for all Registrar API operations.

Request headers

Name Type Required Description
Content-Type String Yes The media type of the request body.

Default value: "application/json"

Prefer String No

Set to respond-async to receive an immediate 202 Accepted without waiting for the operation to complete (RFC 7240).

The header may be combined with other preferences using standard comma-separated syntax.

Request body fields

Name Type Required Description
privacy_mode String No

WHOIS privacy mode for the registration. Defaults to redaction.

  • off: Do not request WHOIS privacy.
  • redaction: Request WHOIS redaction where supported by the extension. Some extensions do not support privacy/redaction.

Valid values:

  • "redaction"
  • "false"

Default value: "redaction"

years Integer No

Number of years to register (1–10). If omitted, defaults to the minimum registration period required by the registry for this extension. For most extensions this is 1 year, but some extensions require longer minimum terms (e.g., .ai requires a minimum of 2 years).

The registry for each extension may also enforce its own maximum registration term. If the requested value exceeds the registry's maximum, the registration will be rejected. When in doubt, use the default by omitting this field.

contacts Object No

Contact data for the registration request.

If the contacts object is omitted entirely from the request, or if contacts.registrant is not provided, the system will use the account's default address book entry as the registrant contact. This default must be pre-configured by the account owner at https://dash.cloudflare.com/{account_id}/domains/registrations, where they can create or update the address book entry and accept the required agreement. No API exists for managing address book entries at this time.

If no default address book entry exists and no registrant contact is provided, the registration request will fail with a validation error.

contacts.registrant Object No

Registrant contact data for the domain registration. This information is submitted to the domain registry and, depending on extension and privacy settings, may appear in public WHOIS records.

contacts.registrant.email String Yes

Email address for the registrant. Used for domain-related communications from the registry, including ownership verification and renewal notices.

contacts.registrant.fax String No

Fax number in E.164 format (e.g., +1.5555555555). Optional. Most registrations do not require a fax number.

contacts.registrant.postal_info Object Yes

Postal/mailing information for the registrant contact.

contacts.registrant.postal_info.name String Yes

Full legal name of the registrant (individual or authorized representative).

contacts.registrant.postal_info.organization String No

Organization or company name. Optional for individual registrants.

contacts.registrant.postal_info.address Object Yes

Physical mailing address for the registrant contact.

contacts.registrant.postal_info.address.postal_code String Yes

Postal or ZIP code.

contacts.registrant.postal_info.address.country_code String Yes

Two-letter country code per ISO 3166-1 alpha-2 (e.g., US, GB, CA, DE).

contacts.registrant.postal_info.address.state String Yes

State, province, or region. Use the standard abbreviation where applicable (e.g., TX for Texas, ON for Ontario).

contacts.registrant.postal_info.address.street String Yes

Street address including building/suite number.

contacts.registrant.postal_info.address.city String Yes

City or locality name.

contacts.registrant.phone String Yes

Phone number in E.164 format: +{country_code}.{number} with no spaces or dashes. Examples: +1.5555555555 (US), +44.2071234567 (UK), +81.312345678 (Japan).

auto_renew Boolean No

Enable or disable automatic renewal. Defaults to false if omitted. Setting this field to true is an explicit opt-in authorizing Cloudflare to charge the account's default payment method up to 30 days before domain expiry to renew the domain automatically. Renewal pricing may change over time based on registry pricing.

Default value: false

domain_name String Yes

Fully qualified domain name (FQDN) including the extension (e.g., example.com, mybrand.app). The domain name uniquely identifies a registration — the same domain cannot be registered twice, making it a natural idempotency key for registration requests.

How to start integrating

  1. Add HTTP Task to your workflow definition.
  2. Search for the API you want to integrate with and click on the name.
    • This loads the API reference documentation and prepares the Http request settings.
  3. Click Test request to test run your request to the API and see the API's response.