Domains

Update a domain, charging for privacy turned on

PATCH
/v1/domains/{id}

Changes the nameservers, the contacts, the transfer lock, the registrar hold, WHOIS privacy or the price fixed for the customer. Send only the fields you want to change. Only privacy costs anything: turning it on charges your wallet for the whole years left in the current term, and turning it off refunds nothing. Answers 202 instead of 200 when the registrar accepted the change but has not finished it yet; the body is the domain as it stands now, before that change lands.

Authorization

apiKey
headerAuthorizationBearer <token>

An API key from the Developers page. rhq_test_ keys reach the sandbox, rhq_live_ keys the live side.

Path Parameters

id*string

Header Parameters

Idempotency-Key?string

A value unique to this request, such as a UUID. A retry with the same key within 24 hours returns the first outcome instead of running again.

Length8 <= length <= 200

Request Body

application/json
  1. body
nameservers?array<>|

The full new list; null goes back to the registrar's own

contact?

Who the domain is registered to

contacts?

Only the roles given are changed; null goes back to the registrant, which the domain must already have or this same request must set

locked?boolean
suspended?boolean

Put the domain on hold, or take it off hold. Nothing is charged: a suspended domain stays registered and still renews

privacy?boolean

Turn WHOIS privacy on or off. Turning it on charges the whole years left in the current term at the price for this ending, and every renewal from then on charges it by the year; turning it off refunds nothing. Privacy already where you are asking for it is charged nothing

customerPrice?|

What the customer pays for one unit of this item from now on, in minor units of their list's currency. It beats their contract and list prices. null clears it

autoRenew?boolean

Renew this domain from your wallet shortly before it expires. Local to your account: nothing is charged by turning it on or off, and nothing reaches the registrar

releaseHostedDns?boolean

Switch hosted DNS off as part of this change. Without it, changing the nameservers of a domain whose DNS we host is refused: the registrar deletes the unused zone after 7 days and the records stored here go with it

acknowledgeMailboxes?boolean

Change the nameservers of a domain connected for mailboxes anyway. Without it, moving them off its mailboxes' own is refused: mail on it stops once they no longer resolve there

Response Body

Success

application/json
  1. response

Success

id*string
domain*string
status*string

pending: not yet finished at the registrar. pending_validation: registered and billed, held behind contact validation. active: registered and working. expired: past its expiry date, still renewable. redemption: past the renewal window, only a restore can save it. needs_reconciliation: the last registrar call is unknown. transferred_out: moved away to another registrar; no longer ours to renew or change. deleted: the registration was given up at the registrar and is no longer yours

Value in"pending""pending_validation""active""expired""redemption""needs_reconciliation""transferred_out""deleted"
customerId*|

The customer this was bought for, if any

unitPrice*integer

Price per year, in minor units

Range0 <= value
customerPrice*|

A unit price fixed for the customer on this item alone, in their list's currency. It beats their contract and list. Null when there is none

paidTotal*integer

Everything charged for this domain so far, in minor units

Range0 <= value
registeredAt*string
Formatdate-time
expiresAt*string

When the registration ends. While status is pending or needs_reconciliation this is only our estimate from the period ordered: the registrar's own date replaces it once the order finishes

Formatdate-time
nameservers*array<>

Where the domain's DNS is served from

customNameservers*boolean

False while the domain is on the registrar's own nameservers

contact*|

The registrant, or null until you set one

contacts*

The administrative, technical and billing contacts. null means the same as the registrant

locked*boolean

Whether transfers away from us are refused

suspended*boolean

Whether the domain is on hold at the registrar: it does not resolve, but it is still registered and still renews

privacy*boolean

Whether WHOIS privacy is on for this domain

privacyPrice*|

What you pay per year for privacy while it is on, in minor units. Null when privacy is off

autoRenew*boolean

Whether this domain renews itself from your wallet shortly before it expires

dns*

Hosted DNS and DNSSEC for this domain. Every field is always there

actor*|

Who placed this order

curl -X PATCH "https://example.com/v1/domains/dom_01K6XJ4Q8ZT3M9R5V2B7WDHNCA" \  -H "Idempotency-Key: 2f1c9a52-7d0e-4a8e-9a53-0c1f6f3f2b11" \  -H "Content-Type: application/json" \  -d '{}'
{  "id": "dom_01K6XJ4Q8ZT3M9R5V2B7WDHNCA",  "domain": "northwind-telecom.com",  "status": "pending",  "customerId": "cus_01K6XJ4Q8ZT3M9R5V2B7WDHNCA",  "unitPrice": 1440,  "customerPrice": null,  "paidTotal": 1440,  "registeredAt": "2026-10-07T11:04:31.000Z",  "expiresAt": "2027-10-07T11:04:31.000Z",  "nameservers": [    "ns1.example-dns.com"  ],  "customNameservers": true,  "contact": {    "name": "Jo Bloggs",    "organization": "Northwind Telecom",    "email": "[email protected]",    "phone": "+1 415 555 0132",    "address": "1 Market Street",    "city": "San Francisco",    "state": "CA",    "postalCode": "94105",    "country": "US",    "validation": "pending"  },  "contacts": {    "admin": null,    "tech": null,    "billing": null  },  "locked": true,  "suspended": true,  "privacy": true,  "privacyPrice": null,  "autoRenew": true,  "dns": {    "supported": true,    "hosted": true,    "dnssecSupported": true,    "signed": true,    "dsRecords": [      {        "keyTag": 0,        "algorithm": 0,        "digestType": 0,        "digest": "49FCE7"      }    ],    "keys": [      {        "flags": 256,        "algorithm": 0,        "publicKey": "string"      }    ]  },  "actor": {    "kind": "user",    "label": "string"  }}