Domain Contacts on this page are the registrant, admin, and tech contacts
attached to a domain registration (WHOIS data). They are distinct from CRM
Contacts (people in your address book) — see Contact
Tools for those.
Domains
Tools for managing domain records used for DNS and email.searchDomainAvailability
Check whether one or more domains are available to register, with pricing. Provide a fully-qualifieddomain, or a query label paired with one or more
tlds. This is read-only — it does not register a domain or charge anything.
Permission: domains:read
Parameters:
*Provide
domain, or query (with optional tlds).
A single call checks at most 25 names (query × tlds counts one name per
TLD); larger fan-outs are rejected.
Returns: An array of results, one per requested name. Each entry has a
status:
ok— the name was checked. Includesavailable,premium, and prices (integer cents USD with the standard markup applied, ornullwhen no price is available).availablemeans the name can be registered right now, not merely that it is unclaimed: while premium registrations are not offered, an unclaimed but premium-priced name is reported asavailable: falsewithpremium: trueand no prices, because registration would be refused. Anavailablename is one registration will accept.rate_limited— the name could not be checked right now because the registrar rate limit was hit. The name was neither confirmed available nor taken — retry it shortly (retryAfterMs, when present, hints how long to wait) and do not treat it as registered. The rest of the batch is still returned, so retry only the affected names.unsupported_tld— that ending is not offered for registration through Bizzy, so the name was not checked and cannot be registered here regardless of its availability elsewhere. Suggest a name on an offered ending instead (.com,.co,.io, and the other endings domain search returns).
registerDomain
Purchase and register a domain for the organization. This is the real registration action — the same flow asPOST /v1/domain-registrations in the
REST API: it fetches a live quote, confirms availability with the registrar,
charges the account default payment method off-session, and queues domain
provisioning.
Permission: domain-registrations.purchase:write (default level Ask —
approval-gated in agent chat; over MCP, callable only at Allow)
Parameters:
Returns: The queued provisioning operation:
DOMAIN_AGREEMENTS_REQUIRED (a business owner or admin
hasn’t accepted the current domain agreements; nothing is charged, and the
error’s acceptanceUrl is the page in Bizzy where they complete that — the
tool can’t accept on their behalf), DOMAIN_UNAVAILABLE,
PREMIUM_DOMAIN_NOT_SUPPORTED (premium-priced names can’t currently be
registered), PRICE_EXCEEDS_MAXIMUM, REGISTRATION_PERIOD_UNSUPPORTED,
CONTACT_ORGANIZATION_REQUIRED, PAYMENT_METHOD_REQUIRED, and
PAYMENT_FAILED. If provisioning cannot be queued after a successful charge,
the charge is automatically refunded (DOMAIN_REGISTRATION_ENQUEUE_FAILED) —
retry with a new idempotencyKey.
verifyDomain
Start or check TXT ownership verification for an externally owned domain — the same flow asPOST /v1/domains/{id}/verification and
POST /v1/domains/{id}/verification/check in the REST API. If verification has
not started (or previously failed or expired), a new verification token is
issued, hourly background checking begins, and the TXT record to publish is
returned. If verification is already pending, one live DNS check runs
immediately instead. The tool is idempotent: a pending, unexpired token is never
rotated and no duplicate background checking is started, so it is safe to call
repeatedly to poll status.
Permission: domains:write (default level Ask — approval-gated in agent
chat; over MCP, callable only when the agent’s domains write permission
resolves to Allow)
Parameters:
Returns: The verification state plus the TXT record to publish:
status is verified, pending, or failed; initiated is true only when
this call issued a fresh token (publish recordName/expectedValue as a DNS
TXT record at the domain’s DNS host). Verification expires after 7 days —
calling the tool again after expiry issues a new token.
getDomainRenewalPrice
Preview the live renewal price for a registered domain, without charging anything — the same quote asGET /v1/domains/{id}/registration/renewal-price
in the REST API, and the exact amount renewDomain will enforce its
maxAmountCents ceiling against. This is read-only.
Permission: domains:read
Parameters:
Returns: The live renewal quote in integer USD cents (standard markup
applied):
DOMAIN_NOT_REGISTERED for verified-only domains,
MANUAL_RENEWAL_NOT_SUPPORTED for domains that renew only automatically
(they extend one year at a time while auto-renew is on, with no manual
renewal), and DOMAIN_PRICE_UNAVAILABLE when the registrar cannot return a
live price.
renewDomain
Renew a registered domain for the organization. This is the real renewal action — the same flow asPOST /v1/domains/{id}/registration/renew in the REST API:
it checks the live price against your ceiling, queues a renewal operation, and
the renewal workflow charges the account default payment method off-session,
renews the domain at the registrar, and extends the expiration date.
Permission: domain-registrations.renewal:write (default level Ask —
approval-gated in agent chat; over MCP, callable only at Allow)
Parameters:
Returns: The queued renewal operation, with the pre-flight quote
(
amountCents is null when the call replayed an existing operation):
DOMAIN_NOT_REGISTERED, MANUAL_RENEWAL_NOT_SUPPORTED
(the domain renews only automatically — one year at a time while auto-renew is
on — and cannot be renewed manually; nothing is charged),
DOMAIN_AGREEMENTS_REQUIRED (a business owner or admin must accept the current
domain agreements first; nothing is enqueued, and the error’s acceptanceUrl
is where they do it), PRICE_EXCEEDS_MAXIMUM,
REGISTERED_DOMAIN_TRANSFER_IN_FLIGHT (a transfer to another registrar is
under way; nothing is charged), and DOMAIN_RENEWAL_ENQUEUE_FAILED (nothing was
charged — retry with a new idempotencyKey).
createDomain
Create a new domain record for DNS and email management. Permission:domains:write
Parameters:
The domain starts as
pending. Verification, email setup, and registration
details are set as the domain goes through verifyDomain and
email setup — you can’t pass them here.
A name is always created as an apex domain, whatever its label count. A name
under a domain you already have is refused: DOMAIN_PARENT_EXISTS when it sits
one label under that domain (add it with createSubdomain
instead), DOMAIN_NESTING_UNSUPPORTED otherwise. A name you already have
returns DOMAIN_ALREADY_EXISTS.
Returns: The created domain object.
getDomain
Get a specific domain by ID. Permission:domains:read
Parameters:
Returns: Domain object, or
null if not found.
listDomains
List your apex domains with pagination. Subdomains aren’t included; list them withlistSubdomains.
Permission: domains:read
Parameters:
Returns:
updateDomain
Update an existing domain record. Permission:domains:write
Parameters:
The name is the only field you can change. Status, verification, email setup,
and registration details change only through their own tools and flows.
Returns: The updated domain object.
deleteDomain
Delete a domain. Remove its subdomains first; aDOMAIN_SUBDOMAINS_EXIST
refusal names the subdomains to remove. Verified domains without subdomains
can be deleted at any time. Their DNS records at the external DNS host remain.
A domain moved to another registrar keeps its DNS zone in Bizzy and can be
deleted once that zone holds only its built-in apex NS and SOA records;
otherwise the refusal is REGISTERED_DOMAIN_DNS_NOT_EMPTY.
For registered domains, wait until the registration expires, then remove the
remaining DNS records, email records included. Only the zone’s built-in apex NS
and SOA records can remain. A queued or running renewal, or a transfer already
under way, also blocks deletion. These refusals return
REGISTERED_DOMAIN_NOT_EXPIRED, REGISTERED_DOMAIN_RENEWAL_IN_FLIGHT,
REGISTERED_DOMAIN_TRANSFER_IN_FLIGHT, or REGISTERED_DOMAIN_DNS_NOT_EMPTY;
the last names the blocking records.
Deleting an email-enabled domain also removes its sending configuration. If
that cleanup fails, deletion still succeeds.
Permission: domains:delete
Parameters:
Returns: The deleted domain object.
createSubdomain
Add a sending subdomain, such asmail.example.com, under a verified domain.
The subdomain shares its parent’s verification, so there’s no TXT record to
publish and it’s active at once. Creating it doesn’t enable email.
Permission: domains:write
Parameters:
Refusals return
NOT_FOUND (no such parent), DOMAIN_NOT_APEX (the parent is
itself a subdomain), DOMAIN_NOT_VERIFIED (verify the parent first),
REGISTERED_DOMAIN_TRANSFER_IN_FLIGHT (the parent is being transferred away),
SUBDOMAIN_NOT_UNDER_PARENT (the name isn’t exactly one label under the
parent), or DOMAIN_ALREADY_EXISTS.
Returns: The created subdomain, with kind: "subdomain" and
parentDomainId set.
listSubdomains
List a domain’s sending subdomains with pagination. Permission:domains:read
Parameters:
Returns:
deleteSubdomain
Delete a sending subdomain. Deleting an email-enabled subdomain also removes its sending configuration. If that cleanup fails, deletion still succeeds. Permission:domains:delete
Parameters:
Returns: The deleted subdomain object.
Domain Contacts
Tools for managing the registration contacts used as the registrant on domains registered through Bizzy. These are WHOIS-style contacts held at the domain registrar — not CRM contacts. Contacts are organization-wide: the same contact can be the registrant for any number of domains. Writes go through to the registrar, so what these tools change is also what appears in the public WHOIS record.externalId and accountId identify the contact at the registrar and are
assigned when it is created. They are returned on the contact object and
cannot be supplied or changed by a caller.createDomainContact
Create a registration contact at the domain registrar and store it. Usable as the registrant when registering a domain. Permission:domain-contacts:write
Parameters:
The address fields are required even though they are nullable on the stored
record: the registry rejects an incomplete registrant.
Returns: The created domain contact object, carrying the registrar-assigned
externalId and accountId.
getDomainContact
Get a specific domain contact by ID. Permission:domain-contacts:read
Parameters:
Returns: Domain contact object, or
null if not found.
listDomainContacts
List all domain contacts for the organization with pagination. Permission:domain-contacts:read
Parameters:
Returns:
updateDomainContact
Update a registration contact at the domain registrar and in Bizzy. Permission:domain-contacts:write
Parameters:
A
label-only change is local and never reaches the registrar, so it is allowed
even on a contact whose registration details are fixed.
Some contacts cannot have their registration details changed after registration.
Attempting it fails with the text Error: This operation (registrant contact updates) is not available — create a new contact instead.
Returns: The updated domain contact object.
deleteDomainContact
Remove a registration contact from Bizzy and from the domain registrar. Permission:domain-contacts:delete
Parameters:
Refused while the contact is still the registrant of a live domain. The call
fails with the text
Error: This contact is the registrant for example.com and cannot be removed, naming every domain that is using it. Point those domains at
a different registrant first.
Returns: The deleted domain contact object.
Domain Registrations
Tools for managing domain registration records that track ownership, renewal, and registrar metadata.createDomainRegistration
Create a new domain registration record to track domain ownership and renewal. Permission:domain-registrations:write
Parameters:
Returns: The created domain registration object.
getDomainRegistration
Get a specific domain registration by ID. Permission:domain-registrations:read
Parameters:
Returns: Domain registration object, or
null if not found.
listDomainRegistrations
List all domain registrations for the organization with pagination. Permission:domain-registrations:read
Parameters:
Returns:
updateDomainRegistration
Update an existing domain registration record - all fields are optional except registrationId. A registration whose domain moved to another registrar has the statetransferred_out and can’t be changed.
Permission: domain-registrations:write
Parameters:
Returns: The updated domain registration object.
deleteDomainRegistration
Delete a domain registration (soft delete). Permission:domain-registrations:delete
Parameters:
Returns: The deleted domain registration object.
Domain DNS Records
Tools for managing DNS records, available for domains whose DNS is hosted in Bizzy — every domain registered through Bizzy qualifies. No setup is needed: the domain’s DNS zone is created automatically the first time a record is added.listDnsRecords
List the DNS records for a domain whose DNS is hosted in Bizzy. Returns an empty list if the domain has no DNS zone yet. Permission:domains:read
Parameters:
Returns:
createDnsRecord
Create a DNS record for a domain whose DNS is hosted in Bizzy. Permission:domains:write
Parameters:
A DNS record’s
content must match its type. The tool refuses a
mismatch.content is limited to 2048 characters for every record type — long
enough for a DKIM key. MX and SRV records also require priority.updateDnsRecord
Update a DNS record. This is a full replacement — provide all record fields. Permission:domains:write
Parameters:
A DNS record’s
content must match its type. The tool refuses a
mismatch.content is limited to 2048 characters for every record type — long
enough for a DKIM key. MX and SRV records also require priority.deleteDnsRecord
Delete a DNS record from a domain whose DNS is hosted in Bizzy. Permission:domains:write
Parameters:
Returns:
{ "success": true, "recordId": "..." }
Next Steps
Contact Tools
Manage CRM contacts, distinct from the WHOIS-style domain contacts above
Authentication
Learn how MCP clients authenticate to the server