List name changes
The change events of one name, newest first.
Price, status, expiry, lifecycle, registrar, transfer, lock, renewal, nameserver, parking and auction events, kept 90 days. before and after carry the allowlisted values of each type only. A name the catalog never stored answers an empty list.
plan_required..csv)Keep a key on a server: a page a visitor loads shows it to everyone.
Request
namestringRequiredPathA full domain name on an ending the catalog holds, lowercased, IDN as punycode. A bare word, a subdomain, an e-mail address or an unknown ending answers 400 validation_failed with reason and suggestion.
typesstringOptionalQueryComma list of change types (default all): price_drop, price_increase, status_change, expiry_window, lifecycle_move, registrar_change, transfer, lock_removed, renewal_observed, nameserver_change, parking_change, auction_ending, auction_jump.
limitintegerOptionalQueryRows a page: 20 by default, at most 20 without a key and 100 with a paid subscription; a larger value is clamped.
cursorstringOptionalQueryThe meta.cursor of the previous page; the last page answers null.
fieldsstringOptionalQueryComma-separated top-level keys to keep; an unknown key answers 400 unsupported_field.
curl -X GET "https://api.unique.domains/v1/names/get.plumbing/changes?types=registrar_change%2Ctransfer" \ -H "Authorization: Bearer YOUR_MEMBER_KEY"
const response = await fetch("https://api.unique.domains/v1/names/get.plumbing/changes?types=registrar_change%2Ctransfer", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_MEMBER_KEY",
},
});
const data = await response.json();
console.log(data);import requests
response = requests.get(
"https://api.unique.domains/v1/names/get.plumbing/changes?types=registrar_change%2Ctransfer",
headers={
"Authorization": "Bearer YOUR_MEMBER_KEY",
},
)
print(response.json())req, err := http.NewRequest("GET", "https://api.unique.domains/v1/names/get.plumbing/changes?types=registrar_change%2Ctransfer", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_MEMBER_KEY")
res, err := http.DefaultClient.Do(req)$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://api.unique.domains/v1/names/get.plumbing/changes?types=registrar_change%2Ctransfer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer YOUR_MEMBER_KEY",
],
]);
$response = curl_exec($ch);uri = URI("https://api.unique.domains/v1/names/get.plumbing/changes?types=registrar_change%2Ctransfer")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_MEMBER_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }Response
idstringtypestringobservedAtstringsubjectobjectbeforeobject | nullafterobject | nullexpiresAtstring | nullErrors
{
"data": [
{
"id": "8c0e1b7a-55a2-4f0d-9d1e-2b6a3c4d5e6f",
"type": "registrar_change",
"observedAt": "2026-11-03T05:41:00.000Z",
"subject": {
"kind": "name",
"key": "get.plumbing"
},
"before": {
"registrar": "Network Solutions, LLC",
"ianaId": 2
},
"after": {
"registrar": "Moniker Online Services LLC",
"ianaId": 228
},
"expiresAt": null
}
],
"meta": {
"asOf": "2026-11-05T08:00:00Z",
"cursor": null,
"limit": 20
},
"links": {
"self": "https://api.unique.domains/v1/names/get.plumbing/changes?types=registrar_change%2Ctransfer",
"next": null,
"register": null,
"product": null,
"dataset": null
}
}