POST /accounts/{account_id}/registrar-sandbox/registrations
Starts a domain registration workflow.
Prerequisites
- The account must not already be at the maximum supported domain limit. A single account may own up to 500 domains in total across registrations created through either the dashboard or this API.
- The domain must be on a supported extension for programmatic registration.
- Use
POST /domain-checkimmediately before calling this endpoint to confirm real-time availability and pricing.
Defaults
years: defaults to the extension's minimum registration period (1 year for most extensions, but varies — for example,.ai(if supported) requires a minimum of 2 years).auto_renew: defaults tofalse. Setting it totrueis an explicit opt-in authorizing Cloudflare to charge the account's default payment method up to 30 days before domain expiry to renew the registration. Renewal pricing may change over time based on registry pricing.privacy_mode: defaults toredaction.
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
- https://api.cloudflare.com/client/v4
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 The header may be combined with other preferences using standard comma-separated syntax. |
Request body fields
| Name | Type | Required | Description |
|---|---|---|---|
privacy_mode |
String | No |
Sets the WHOIS privacy mode for the registration. Defaults to
Valid values:
Default value: "redaction" |
years |
Integer | No |
Sets the registration term from 1 to 10 years. When omitted, this
field defaults to the registry's minimum registration period for the
extension. Most extensions require 1 year, while some require longer
minimum terms (e.g., Each registry may also enforce its own maximum registration term. A request above that maximum fails. When uncertain, omit this field to use the default. |
contacts |
Object | No |
Provides contact data for the registration request. The per-extension schema from
When the request omits either the entire Without either a default address book entry or a registrant contact, the registration request fails validation. |
auto_renew |
Boolean | No |
Enable or disable automatic renewal. Defaults to Default value: false |
contact_extensions |
Object | No |
Provides registry-specific contact extension values for the registrant.
Examples include |
acknowledgements |
Object | No |
Provides user acknowledgements for a specific extension or premium registration flow. The extension registration schema from the extension discovery endpoint identifies the required keys. |
domain_name |
String | Yes |
Provides a fully qualified domain name (FQDN), including the extension
(e.g., |
How to start integrating
- Add HTTP Task to your workflow definition.
- 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.
- Click Test request to test run your request to the API and see the API's response.