Domeinregistratie
Registrar-operaties — TLD-registraties registreren, verhuizen en beheren, samen met hun contacten. Dit is iets anders dan Domeinen, dat de hostnames beheert die aan WordPress-sites zijn gekoppeld.
Feature-flagged
Deze endpoints worden afgeschermd door de domain-registration feature
flag. Wanneer die uitstaat, retourneert elk endpoint hier 503
{"errors":[...],"code":"feature_disabled"}.
Account-scope vereist (X-Auth-Account) — een ontbrekende header retourneert
400. OAuth-scopes: lezen domains:read, schrijven domains:write.
Mutaties vereisen de can_edit-rol. Een registratie met een RTR-proces dat
al loopt, wijst verdere mutaties af met 409 registration_busy. Mutaties
kunnen synchroon worden afgerond (200) of een asynchroon registrar-proces
openen (202 met pending_process). TLD's zonder geconfigureerde registrar
retourneren 503 registrar_unavailable; upstream registrar-fouten
retourneren 502.
Een domein registreren/verhuizen is een bestelling
De endpoints hier controleren beschikbaarheid (check /
suggesties) en beheren bestaande registraties.
Om daadwerkelijk een domein te registreren of te verhuizen, plaats je
een betaalde bestelling via POST /api/orders/domain (zie het
volledige paramoverzicht in Bestellingen). Om de houder van een
registratie te wijzigen als betaalde bestelling, gebruik je
POST /api/domain_registrations/:id/registrant_change
(de factureerbare tegenhanger van PATCH .../holder).
Domeincontacten
Herbruikbare contacten voor houder/admin/tech/facturatie die domeinregistraties
ondersteunen. Een contact wordt bij het aanmaken aan één TLD vastgepind omdat
elke registry een andere set velden valideert. :id is het numerieke contact-ID.
Vorm van een domeincontact
- id: Integer
- handle: String
- first_name: String
- last_name: String
- organization: String
- street_address: String
- post_code: String
- city: String
- state: String
- country: String | ISO-2
- email: String
- phone: String | E.164,
+CC.NUMBER - extra_properties: Object | TLD-specifieke registry-velden
- validations: Array
- split_from_id: Integer | null
- created_at: DateTime
- updated_at: DateTime
Domeincontacten weergeven
GET /api/domain_contacts
Params (optioneel)
- q: String | substring-match tegen handle, organisatie, volledige naam of registratienaam
Retourneert { "domain_contacts": [ ... ] }.
Een domeincontact bekijken
GET /api/domain_contacts/:id
Een domeincontact aanmaken
POST /api/domain_contacts
Maakt het contact aan bij de registrar ÉN lokaal. Retourneert 201. Je moet
tld_id of tld_name meegeven zodat de juiste registry-regels van toepassing
zijn. Een onbekende TLD retourneert 404 tld_not_found.
Params
- tld_id: Integer | één van tld_id / tld_name vereist
- tld_name: String | bijv. ".uk", ".com"
- domain_contact: Object (vereist)
- first_name, last_name, organization, street_address, post_code, city, state: String
- country: String | ISO-2
- email: String
- phone: String | E.164 (
+CC.NUMBER) - extra_properties: Object | TLD-specifieke registry-velden
Een domeincontact bijwerken
PATCH /api/domain_contacts/:id
Retourneert 200, of 202 met pending_process wanneer de registry de update
asynchroon verwerkt. Als een momenteel gekoppeld domein de wijziging afwijst,
wordt het contact transparant gesplitst (het origineel houdt de mislukkende
domeinen, voor de rest wordt een nieuw contact aangemaakt). Geef tld_id/tld_name
mee om te bepalen welke TLD-validatieregels van toepassing zijn (standaard de TLD
van de eerste gekoppelde registratie).
Params
- tld_id | tld_name: zie aanmaken
- domain_contact: Object | dezelfde velden als bij aanmaken (allemaal optioneel)
Een domeincontact verwijderen
DELETE /api/domain_contacts/:id
Alleen toegestaan wanneer geen enkele registratie dit contact gebruikt.
Retourneert 204.
Fouten
- 422
contact_in_use| nog gekoppeld aan een registratie - 422
tld_required_for_orphan| verweesd contact + geen tld_id/tld_name opgegeven
Verificatie-e-mail opnieuw verzenden
POST /api/domain_contacts/:id/resend_verification
Voor contacten op TLD's die houdervalidatie vereisen (.au, .it, …). Retourneert
{ "status": "queued" }.
Domeinregistraties
:id is de registratie-guid.
Vorm van een domeinregistratie
- id: String | guid
- name: String
- status: String
- expires_at: DateTime
- auto_renew: Boolean
- locked: Boolean
- privacy_protect: Boolean
- dnssec_enabled: Boolean
- server_transfer_prohibited: Boolean
- local_contact_active: Boolean
- cancellation_deadline_at: DateTime | indien van toepassing
- within_cancellation_window: Boolean | indien van toepassing
- nameservers:
Array<String> - tld: Object | { id, name, registrar }
- owner_contact / admin_contact / tech_contact / billing_contact: Object | zie vorm van een domeincontact, of null
- pending_async: Boolean
- rtr_process_id: String
- rtr_process_status: String
- transfer_out_pending: Boolean
- push_transfer_pending: Boolean
- subscription_id: String
- feature_flags: Object | { supports_privacy, supports_transfer_lock, supports_push_transfer, supports_dnssec, requires_contact_validation, authcode_behavior }
- fees: Object | { privacy_enable, registrant_change } — elk
{ amount_cents, currency }of null - created_at: DateTime
- updated_at: DateTime
Domeinregistraties weergeven
GET /api/domain_registrations
Params (optioneel)
- q: String | hoofdletterongevoelige substring-match tegen
name
Retourneert { "domain_registrations": [ ... ] }.
Een domeinregistratie bekijken
GET /api/domain_registrations/:id
Voegt, indien van toepassing, toe:
Geretourneerde params
- domain_registration: Object | zie vorm hierboven
- dns_zone: Object | { id, name } als het account een DnsZone heeft voor deze naam; anders null
- linked_site: Object | { id, name } als een Site deze naam als hostname gebruikt; anders null
- transfer_out: Object | live registry-weergave, alleen terwijl
transfer_out_pendingtrue is
Beschikbaarheid controleren
POST /api/domain_registrations/check
Params
- domain: String (vereist) | volledig gekwalificeerd, bijv. "example.com"
Geretourneerde params
- domain: String | genormaliseerde lookup
- available: Boolean | alleen true wanneer de registry zegt dat het beschikbaar is ÉN er een
create_pricebestaat voor dit account - premium: Boolean
- owned_by_account: Boolean
- reason: String | null | door de registrar opgegeven reden wanneer niet beschikbaar
- create_price: Object | null |
{ amount_cents, currency }— huidige bestelbare registratieprijs - transfer_price: Object | null | bestelbare inkomende verhuisprijs (ingesteld wanneer niet beschikbaar)
Fouten
- 422
missing_domain/invalid_domain/unknown_tld - 502
registrar_unavailable
Domeinsuggesties
POST /api/domain_registrations/suggestions
Params
- domain: String (vereist) | basisnaam of volledig gekwalificeerd
Geretourneerde params
- domain: String | genormaliseerde lookup
- suggestions:
Array<Object>- domain: String
- tld: String
- source: String | ADAC-categorisatie (bijv. "spinner", "premium")
- available: Boolean
- price: Object |
{ amount_cents, currency }
Fouten
- 422
missing_domain - 503
missing_api_key - 502
registrar_unavailable
Een registratie bijwerken
PATCH /api/domain_registrations/:id
Op dit moment is auto_renew het enige ondersteunde veld. Het omschakelen houdt
de Stripe-facturatie gesynchroniseerd en restitueert binnen het annuleringsvenster
van de TLD waar van toepassing.
Params
- domain_registration: Object
- auto_renew: Boolean
Geretourneerde params
- domain_registration: Object | ververst
- scenario: String |
enabled,clean_cancel,refund_cancel, oflate_cancel
Fouten
- 422
cancellation_window_passed| kan auto-renew niet uitschakelen na het venster - 400
no_op| geen ondersteunde velden in de update
Nameservers bijwerken
PATCH /api/domain_registrations/:id/nameservers
Params
- nameservers:
Array<String>(vereist)
Retourneert 200 of 202 (met pending_process).
Fouten
- 422
nameservers_required| de lijst is leeg / allemaal blanco
Verhuisslot in-/uitschakelen
PATCH /api/domain_registrations/:id/lock
Schakelt CLIENT_TRANSFER_PROHIBITED bij de registry in of uit.
Params
- locked: Boolean (vereist)
Fouten
- 422
lock_unsupported| TLD ondersteunt geen verhuisslot - 422
server_transfer_prohibited| registry heeft verhuizingen verboden
WHOIS-privacy in-/uitschakelen
PATCH /api/domain_registrations/:id/privacy
Params
- privacy_protect: Boolean (vereist)
Privacy uitschakelen is altijd gratis. Inschakelen op een betaalde TLD
retourneert 402:
Reactie met kosten (402 Payment Required)
- errors: Array
- code: String |
payment_required - price: Object | { amount_cents, currency, role: "privacy" }
- portal_url: String
- remediation: String
Fouten
- 422
privacy_unsupported| TLD ondersteunt geen WHOIS-privacy
DNSSEC beheren
PATCH /api/domain_registrations/:id/dnssec
Params
- mode: String (vereist) |
enable,disable, ofadd_keys - key_data:
Array<Object>| vereist voor enable / add_keys- flags: Integer
- algorithm: Integer
- publicKey: String | base64
Fouten
- 422
invalid_mode| mode ontbreekt of onbekend - 422
dnssec_no_keys| enable/add_keys aangeroepen zonder key_data
Houder (registrant) wijzigen
PATCH /api/domain_registrations/:id/holder
Bewerk het bestaande houdercontact ter plekke, of vervang het.
Params
- holder_contact: Object (vereist)
- action_mode: String |
edit_currentofchange - first_name, last_name, organization, street_address, post_code, city, state: String
- country: String | ISO-2
- email: String
- phone: String | E.164
- extra_properties: Object
- confirm_reverification: "1" | vereist wanneer bewerkingen een gevalideerd veld raken
- action_mode: String |
- source_domain_contact_id: Integer | met
change, hergebruik dit bestaande contact - new_contact: Object | met
change, maak een nieuw contact aan
De kostenpoort gaat alleen af bij action_mode: change op een betaalde TLD
(retourneert 402 payment_required met een price-blok waarvan de role
gelijk is aan registrant_change + portal_url); edit_current-bewerkingen
zijn altijd gratis. Om de factureerbare wijziging direct uit te voeren (in plaats
van naar het portaal te worden gestuurd), gebruik je
POST .../registrant_change.
Fouten
- 402
payment_required|action_mode: changeop een TLD die houderwijzigingen factureert (prijsrole: "registrant_change", kostenblok +portal_url) - 409
reverification_required| gevalideerde velden gewijzigd zonderconfirm_reverification: "1" - 404
source_contact_not_found|source_domain_contact_idniet gevonden of niet gebruikt in dit account
Een houderwijziging (registrant) bestellen
POST /api/domain_registrations/:id/registrant_change
Plaatst een betaalde bestelling om de houder (eigenaar) van de registratie te
wijzigen — voor TLD's die houderwijzigingen factureren (bijv. .com / .net via
Verisign IRTP). Dit is de factureerbare tegenhanger van
PATCH .../holder: dat endpoint maakt gratis
bewerkingen en stuurt kostendragende wijzigingen naar het portaal met 402; dit
endpoint belast de standaard betaalmethode van het account off-session en past de
wijziging asynchroon toe. Retourneert dezelfde 202 Accepted bestel-/winkelwagen-envelope
als POST /api/orders — poll de geretourneerde bestelling via
/api/orders/:id.
OAuth-geblokkeerd; vereist een gebruiker met bestelrechten
Niet op de domains:write-allowlist — OAuth-toegangstokens kunnen dit niet
bereiken. Vereist een gebruiker-scoped credential (bestellingen zijn
eigendom van een User): een system Account-bearer key retourneert 401
user_required, en een gebruiker zonder rechten om een bestelling aan te
maken retourneert 403 forbidden. Net als bij andere mutaties wijst een
lopend RTR-proces af met 409 registration_busy.
Params (geef exact ÉÉN bron voor de nieuwe eigenaar op)
- source_domain_contact_id: Integer | hergebruik een bestaand contact dat eigendom is van het account
- new_contact: Object | maak een nieuw eigenaarscontact aan
- first_name, last_name, country (ISO-2), email, phone (E.164
+CC.NUMBER): vereist - organization, street_address, post_code, city, state: String | optioneel
- extra_properties: Object | optioneel, TLD-specifieke registry-velden
- first_name, last_name, country (ISO-2), email, phone (E.164
Retourneert 202 met de bestel-/winkelwagen-envelope.
Fouten
- 401
user_required| system Account-bearer key (geen gebruiker) - 403
forbidden| gebruiker mist rechten om een bestelling aan te maken - 403
trial_account| proefaccounts kunnen niet bestellen - 409
registration_busy| er loopt al een RTR-proces - 422
source_contact_not_found|source_domain_contact_idniet gevonden (let op:422hier vs404op/holder) - 422
contact_invalid|new_contactmist vereiste velden of is door de registry afgewezen (bevatviolations) - 422
no_registrant_change_price| geen houderwijzigingsprijs geconfigureerd voor dit account/deze TLD - 422
cart_pay_failed| betaling kon niet worden gestart (een voor de bestelling aangemaakt contact wordt afgebroken)
Rolcontacten bijwerken
PATCH /api/domain_registrations/:id/contacts
Stel rolcontacten voor admin / tech / facturatie in (de houder wordt gewijzigd
via /holder). Elke rol is onafhankelijk optioneel. Kies voor elke aanwezige rol
één bron:
{role}_contact: { source: "same_as_owner" }{role}_contact: { source: "existing" }+{role}_source_domain_contact_id: <id>{role}_contact: { source: "new" }+{role}_new_contact: { ...velden... }
Fouten
- 422
owner_contact_missing|same_as_ownergebruikt zonder ingesteld houdercontact
De EPP-/authcode ophalen
GET /api/domain_registrations/:id/epp_code
Vereist de domains:write-scope, ook al is het een GET. Retourneert
{ "authcode": "..." }.
Fouten
- 422
server_transfer_prohibited| registry heeft verhuizingen verboden - 422
authcode_unavailable| TLD verbergt de authcode (authcode_behavior: hidden) - 502
authcode_unavailable| registrar gaf de authcode niet terug
Geforceerd opnieuw synchroniseren
POST /api/domain_registrations/:id/force_sync
Leest het domein opnieuw uit bij de registrar en synchroniseert de lokale staat.
Geretourneerde params
- domain_registration: Object | ververst
- changed:
Array<String>| namen van velden die zijn gewijzigd
Een lopende uitgaande verhuizing afhandelen
POST /api/domain_registrations/:id/transfer_out
Params
- decision: String (vereist) |
approveofreject
Fouten
- 422
no_pending_transfer_out - 422
invalid_decision
Push-verhuizing naar een andere provider
POST /api/domain_registrations/:id/push_transfer
Registrar-naar-registrar push-verhuizing (geen authcode). Retourneert 200 of 202.
Params
- recipient: String (vereist) | doel-registrar-handle (bijv. "REG-IDS")
Fouten
- 422
push_transfer_unsupported/push_transfer_in_progress/domain_not_transferable
Verificatie van houdercontact opnieuw verzenden
POST /api/domain_registrations/:id/resend_contact_verification
Voor TLD's die verificatie van het houdercontact vereisen. Retourneert
{ "status": "queued" }.
Fouten
- 422
verification_not_applicable| TLD vereist geen validatie, of geen houdercontact
Hosts (glue records)
Glue records voor een registratie. Genest onder
/api/domain_registrations/:domain_registration_id/hosts. De route-param is
:host_name.
Hosts weergeven
GET .../hosts
Geretourneerde params
- hosts:
Array<Object>- host_name: String | bijv. "ns1.example.com"
- addresses:
Array<Object>- address: String | IP-literal
- version: Integer | 4 of 6
Een host aanmaken
POST .../hosts
De hostname moet een subdomein van de registratie zijn. Elk adres wordt
automatisch geclassificeerd als IPv4/IPv6. Retourneert 201 { "host": { ... } }.
Params
- host_name: String (vereist) | volledig gekwalificeerd subdomein
- addresses:
Array<Object>(vereist, ten minste één)- address: String | IP-literal (geen CIDR)
De adressen van een host bijwerken
PATCH .../hosts/:host_name
Vervangt de adressenset. Retourneert 200.
Params
- addresses:
Array<Object>(vereist) | zelfde vorm als bij aanmaken
Een host verwijderen
DELETE .../hosts/:host_name
Retourneert 204.
Processen
RTR-processen die aan een registratie zijn gekoppeld — elke asynchrone
registrar-operatie opent er een. Poll deze na een 202. Genest onder
/api/domain_registrations/:domain_registration_id/processes.
Processen weergeven
GET .../processes
Retourneert { "processes": [ ... ] }, nieuwste eerst (ruwe RTR-procesrecords).
Een proces ophalen
GET .../processes/:id
Geretourneerde params
- process: Object | ruwe RTR-procesbody
- log:
Array<Object>
Een proces waarvan de identifier niet bij de registratie hoort, retourneert 404.
Een onderbroken proces hervatten
POST .../processes/:id/resend
Retourneert { "status": "queued" }.
Een proces annuleren
DELETE .../processes/:id/cancel
Retourneert { "status": "cancelled" }.