Skip to main content
New Use the domain registration API when you want to buy a new domain programmatically through Bizzy. The API searches registrar availability, returns a live quote, charges your account’s default saved Stripe payment method, and starts a registration operation you can poll until it completes. Availability checks are provider-backed, with Bizzy routing through its configured availability providers before returning the same response shape shown below.

Prerequisites

Before you call the registration endpoints, make sure you have:
  • A Bizzy API key with domains:read and domains:write.
  • A default Stripe payment method saved on the Bizzy account.
  • The registrant contact details required by the domain registry.
  • A maximum price, in cents, that you are willing to pay for the registration.
The examples below use this base URL:

Step 1: Search availability

Search the exact domain you want to register.
The response is wrapped in data:
registrationPriceCents is the all-in first-year price and renewalPriceCents is the all-in per-year renewal price, both in USD cents. They can differ — premium domains in particular often renew at a different price than they register at. Both are null when the domain is unavailable. Only continue if available is true.

Step 2: Get a live quote

Request a quote for the domain and registration period. periodYears is optional and defaults to 1; it can be any integer from 1 to 10.
Use the returned amountCents as the minimum value for maxAmountCents in the registration request.
amountCents is the all-in total you’ll be charged: the first year at registrationPriceCents plus each additional year at renewalPriceCents. There are no other fees — WHOIS privacy is included at no extra cost.
Quotes are live. The registration request re-checks availability and price before charging. If the current price is higher than maxAmountCents, the API rejects the request instead of charging you.

Step 3: Register the domain

Submit the registration request with the domain, price guardrail, registration settings, and registrant contact details. Registration moves money, so it requires an Idempotency-Key header. Generate a unique value per registration attempt and send the same value if you retry that attempt.
Successful registration requests return 202 Accepted with an operation ID:
The API charges the account’s default saved Stripe payment method before the operation is queued. If no default payment method exists, the request fails with 402.

Idempotency

The Idempotency-Key header is required and makes the charge safe to retry:
  • Reuse the same key to retry a request that may already have succeeded (a timeout or dropped connection before you saw the 202). The API replays the original operation and never charges twice.
  • Use a new key for a genuinely new registration attempt — for example, after a previous attempt failed and was refunded.
If you omit the header, the request is rejected with 400. The same header is required on domain renewal (POST /v1/domains/{id}/registration/renew).

Required registration inputs

Transfer lock is enabled automatically after a domain is registered. Manage it afterwards with PATCH /v1/domains/{id}/registration. The contact object requires: These contact fields are optional: label, organizationName, jobTitle, and address2. If you provide organizationName, jobTitle is also required — the domain registry rejects a company contact without a job title. label is stored only in Bizzy; changing it later does not update the registrar contact. After registration, update registrar-backed contact fields with PATCH /v1/domains/{id}/registration/contact. Changing the registrant’s name, organization, or email resets Bizzy’s 15-day ICANN verification window and shows the registrant verification notice again. Changing only the local label does not contact the registrar or reset verification. Registered Bizzy-managed domains can be deleted with DELETE /v1/domains/{id} only after the registration has fully lapsed: the domain’s status must be expired, and its DNS zone must hold no records beyond the zone’s built-in ones (the apex NS set and SOA). Disable email for the domain first so Bizzy removes the email records it manages, and delete any remaining records with the DNS record endpoints. A renewal that is already queued or running also blocks the deletion until it finishes. A blocked deletion returns 409 with code REGISTERED_DOMAIN_NOT_EXPIRED, REGISTERED_DOMAIN_RENEWAL_IN_FLIGHT, or REGISTERED_DOMAIN_DNS_NOT_EMPTY — the last lists the blocking records in the error details. This keeps a paid, still-active registration from being hidden from Bizzy while the registrar continues to renew it.

Step 4: Poll the operation

Registration is asynchronous because it depends on payment, registrar, DNS, and email setup work. Poll the operation until it reaches succeeded or failed.
Operation statuses are: When the operation succeeds, resourceType is domain and resourceId is the new Bizzy domain ID.

Step 5: Read the domain

After the operation succeeds, fetch the new domain using resourceId.
Registered domains are managed by Bizzy, so DNS and email authentication records are configured automatically. The domain becomes usable for Bizzy-hosted email after setup completes.

Common failures

Next steps

After registration succeeds:
Last modified on August 9, 2026