Renew a domain
Adds years to the end of the registration and charges your wallet, including WHOIS privacy for those years while it is on. A promotion only reaches a renewal when it is set to; an introductory offer the domain was first bought on does not.
apiKeyAuthorizationBearer <token>An API key from the Developers page. rhq_test_ keys reach the sandbox, rhq_live_ keys the live side.
id*stringIdempotency-Key?stringA 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.
8 <= length <= 200application/json- body
{ "couponOptional": false}years?integerHow many years. Defaults to 1
1 <= value <= 10coupon?stringA coupon code, unlocking the promotion it belongs to for this renewal
1 <= length <= 40couponOptional?booleanPlace the order at the normal price when the coupon cannot be used, instead of refusing it
falseSuccess
application/json- response
Success
id*stringdomain*stringstatus*stringpending: 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
"pending""pending_validation""active""expired""redemption""needs_reconciliation""transferred_out""deleted"customerId*|The customer this was bought for, if any
unitPrice*integerPrice per year, in minor units
0 <= valuecustomerPrice*|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*integerEverything charged for this domain so far, in minor units
0 <= valueregisteredAt*stringdate-timeexpiresAt*stringWhen 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
date-timenameservers*array<>Where the domain's DNS is served from
customNameservers*booleanFalse 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*booleanWhether transfers away from us are refused
suspended*booleanWhether the domain is on hold at the registrar: it does not resolve, but it is still registered and still renews
privacy*booleanWhether 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*booleanWhether 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 POST "https://example.com/v1/domains/dom_01K6XJ4Q8ZT3M9R5V2B7WDHNCA/renew" \ -H "Idempotency-Key: 2f1c9a52-7d0e-4a8e-9a53-0c1f6f3f2b11" \ -H "Content-Type: application/json" \ -d '{ "couponOptional": false }'{ "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" }}Delete a domain DELETE
Gives the registration up at the registrar. The name stops being yours and goes back to the registry; it cannot be undone from here. Inside the registry's add grace period the registration charge alone is credited back to your wallet - not WHOIS privacy, and never a renewal; quote it first with `GET /v1/domains/{id}/delete-quote`. The domain stays on your account as a record, with `status: "deleted"`.
Get a transfer code POST
Generates a fresh transfer (auth) code and shows it once: we never store it, and it never appears in a list or a webhook. The domain must have its transfer lock off first; this never turns it off for you. A new code replaces the old one.