This is a multi-tenant domain registrar service. This page gives a short overview of the public API. Each endpoint returns JSON. Each endpoint uses the usual HTTP verbs and status codes.
For request and response examples for each endpoint, see the full API documentation.
Authorization: Bearer <token>.The API documentation gives an example request and an example response for each endpoint below.
The server implements OAuth 2.1 with PKCE, refresh-token rotation with reuse detection, and unauthenticated Dynamic Client Registration.
GET /.well-known/oauth-authorization-serverGET /oauth/authorizePOST /oauth/authorize/loginPOST /oauth/authorize/totpPOST /oauth/authorize/consentPOST /oauth/logoutPOST /oauth/tokenPOST /oauth/introspectPOST /oauth/revokePOST /oauth/registerEach tenant-scoped endpoint starts with /api/v1/tenants/:tenant_id/.
POST /domains/check — availability check; accepts a single name or a list of names spanning multiple TLDs (the service fans out per registry binding). Optional: idn_language, fee_commands, fee_period, client_transaction_id.POST /domains — register (ICANN TLDs require a quote and an agreement acceptance block)GET /domains — list the tenant's domainsGET /domains/:name — show a single domainPOST /domains/:name/renew — renew for a supplied number of yearsPOST /domains/:name/update_nameservers — replace the nameserver set (external names auto-provision as host rows)POST /domains/:name/update_ds_records — replace the DNSSEC DS record set (full-replacement semantics bridged onto EPP secDNS-1.1 deltas)DELETE /domains/:name/ds_records — clear all DS recordsPOST /domains/:name/update_contacts — assign admin / tech / billing contactsPOST /domains/:name/transfer_in — initiate an inbound transferPOST /domains/:name/approve_transfer_out — approve a pending outbound transferPOST /domains/:name/reject_transfer_out — reject a pending outbound transferPOST /domains/:name/auth_code/rotate — rotate the transfer auth codePOST /domains/:name/auth_code/retrieve — read the current auth code (admin role; audited)POST /domains/:name/transfer_lock — apply clientTransferProhibitedDELETE /domains/:name/transfer_lock — release the transfer lockPOST /domains/:name/update_lock — apply clientUpdateProhibitedDELETE /domains/:name/update_lock — release the update lockPOST /domains/:name/delete_lock — apply clientDeleteProhibitedDELETE /domains/:name/delete_lock — release the delete lockPOST /domains/:name/renew_lock — apply clientRenewProhibitedDELETE /domains/:name/renew_lock — release the renew lockPUT /domains/:name/auto_renewal — set the auto-renewal mode (DEFAULT, AUTORENEW, AUTOEXPIRE, RENEWONCE, AUTODELETE)POST /domains/:name/auto_renewal — shortcut for AUTORENEWDELETE /domains/:name/auto_renewal — shortcut for AUTOEXPIREPOST /domains/:name/apply_hold — place a registrar holdPOST /domains/:name/release_hold — release a registrar holdDELETE /domains/:name — delete the domainPOST /domains/:name/restore — restore a deleted domain during RGPPOST /domains/:name/reconcile — pull registry state back onto the local rowGET /domains/:name/events — audit logGET /transfers — list inter-registrar transfers (in + out)GET /transfers/:id — show a single transferPOST /transfers/:id/cancel — cancel a pending inbound transferA change to the registrant Name, Organization, or Email is material. It needs a confirmation from the two parties.
POST /domains/:name/change_of_registrant — start a request (returns the two consent tokens one time only)GET /domains/:name/change_of_registrant — list the requests for a domainGET /change_of_registrant/:id — show a single requestPOST /change_of_registrant/:id/confirm — a party confirms with its tokenPOST /change_of_registrant/:id/decline — a party declines with its tokenPOST /change_of_registrant/:id/cancel — the initiator retracts a request that is not terminalPOST /contacts/check — validate a contact handle's availabilityGET /contacts — list the tenant's contactsGET /contacts/:handle — show a single contactPOST /contacts — create a contactPATCH /contacts/:handle — update a contactDELETE /contacts/:handle — delete a contactPOST /contacts/:handle/transfer — transfer a contact between tenantsPOST /hosts/check — availability check against the local recordsPOST /hosts/registry_check — availability check at the registry (EPP host:check)GET /hosts — list the tenant's hostsGET /hosts/:name — show a single hostPOST /hosts — create a host (subordinate hosts need IPs; external hosts take none)PATCH /hosts/:name — update a host's IPsPOST /hosts/:name/rename — rename a hostDELETE /hosts/:name — delete a hostPOST /hosts/:name/reconcile — pull registry state (statuses + IPs) back onto the local rowGET /registry_accounts — list the tenant's registry accounts (never the credentials)POST /registry_accounts/:id/set_default — make an account the default for its registryPOST /registry_accounts/:id/clear_default — clear that defaultGET /registry_accounts/:id/certificate — retrieve metadata + public PEM (never the key)PUT /registry_accounts/:id/certificate — upload or rotate (key is write-only)DELETE /registry_accounts/:id/certificate — remove the stored certificateGET /tld_associations/:id/certificate — obsolete path; it resolves the bound registry accountPUT /tld_associations/:id/certificate — obsolete pathDELETE /tld_associations/:id/certificate — obsolete pathGET /tld_associations — list the tenant's TLD associationsGET /tld_associations/:id_or_tld — show one association, by UUID or by TLD labelPATCH /tld_associations/:id/notifications — set the notification address for the low-balance alertsGET /rate_card — list active rate cards across this tenant's TLDsGET /tlds/:tld/rate_card — show the active rate card for a TLDPOST /quotes — mint a single-use quote (required for ICANN-TLD register / renew / transfer_in / restore; informational for trade)POST /agreement_versions — create a draft agreement versionGET /agreement_versions — list agreement versionsGET /agreement_versions/:id — show a single agreement versionPOST /agreement_versions/:id/publish — publish a draftPOST /agreement_versions/:id/retire — retire a published versionPOST /domains/:name/acceptance — record an acceptanceGET /domains/:name/acceptance — show the active acceptancePOST /domains/:name/acceptance/terminate — terminate the active acceptance (start the 45-day deletion clock)GET /domains/:name/acceptance/history — list every acceptance recorded for the domainGET /api/v1/tenants/:tenant_id — show the calling tenantPATCH /api/v1/tenants/:tenant_id — update mutable tenant attributes (also accepts PUT)GET /registrar_information — the registrar information that the tenant publishes (RAA §3.17)GET /users — list the identity of the tenant's usersGET /users/:user_id — show the identity of one userGET /members — list membersGET /members/:user_id — show a single memberDELETE /members/:user_id — remove a memberPUT /members/:user_id/role — change a member's rolePUT /members/:user_id/activate — activate a memberPUT /members/:user_id/deactivate — deactivate a memberGET /invitations — list pending invitationsPOST /invitations — invite a userDELETE /invitations/:id — revoke an invitationGET /oauth_clients — list the tenant's OAuth clientsGET /oauth_clients/:id — show a single OAuth clientPOST /oauth_clients — register a new OAuth clientDELETE /oauth_clients/:id — revoke an OAuth clientPOST /oauth_clients/:id/rotate_secret — rotate a confidential client's secretGET /sessions — list active sessionsDELETE /sessions/:id — revoke a sessionGET /api/v1/user/tenants — list tenants the calling user can authenticate intoGET /api/v1/user/totp — TOTP enrollment statusPOST /api/v1/user/totp/enrollments — start TOTP enrollment (returns secret + otpauth URI)POST /api/v1/user/totp/enrollments/confirm — confirm with a code (returns recovery codes once)DELETE /api/v1/user/totp — disable TOTP (requires a current code or recovery code)The audit log is the evidence of each action. A notification is different: it is an item that needs your attention.
GET /audit_events — list the tenant's audit events (cursor pagination)GET /audit_events/:id — show a single audit eventGET /notifications — list the inbox (cursor pagination)GET /notifications/:id — show a single notificationPOST /notifications/:id/ack — mark a notification readDELETE /notifications/:id — dismiss a notificationGET /disputes — list disputesGET /disputes/:id — show a single disputePOST /api/v1/abuse_reports — public abuse intake (unauthenticated)GET /abuse_cases — list the tenant's abuse cases (read-only)GET /abuse_cases/:id — show a single abuse case
These read-only lookups below /directory/v1/ are
public. They need no bearer token. The service applies a rate
limit to each source IP address. A lookup returns only the
fields that the disclosure flags of the contact permit.
GET /directory/v1/domains/by_name/:name — look up a domain by FQDNGET /directory/v1/contacts/:handle — look up a contact by handleGET /directory/v1/hosts/by_name/:name — look up a host by FQDNGET /directory/v1/registrars/by_iana_id/:iana_id — look up a registrar by IANA idThese endpoints need no authentication. Each one completes a workflow that a token from the server started. Usually the service sends that token to the end user in an email message or an SMS message. Each endpoint takes its token in the URL or in the body. A call to one of these endpoints is the confirmation.
GET /api/v1/invitations/:token — read the public data of an invitationPOST /api/v1/invitations/:token/accept — accept a tenant invitationPOST /api/v1/invitations/:token/decline — decline a tenant invitation (the invitee must authenticate)POST /api/v1/tenants/:tenant_id/contacts/:handle/verify — confirm a contact's email or phonePOST /api/v1/users/verify — complete the verification of a user email addressPOST /api/v1/users/reset_password — request a password resetPOST /api/v1/users/reset_password/complete — set the new passwordThese paths give HTML, not JSON. They let a person complete an operation without an API client. An email message links to them when the tenant has no page of its own. Each page is a second front end onto the endpoints above, and it adds no rule.
GET / POST /verify/user — user email verification pageGET / POST /verify/:tenant_id/:handle — contact verification page (the fallback when the tenant has no verification URL template)GET / POST /forgot-password — request a password resetGET / POST /reset-password — set the new passwordGET /invitations/:token — invitation page, with the accept and decline actionsGET /change-of-registrant/:token — consent page, with the confirm and decline actionsGET / POST /oauth/logout — end the browser session