FreeRegistrar Prices API
List price changes
GET/prices/changesNo key
Confirmed registrar price changes across the nine, newest first.
Free: the 10 newest, one page. Paid: the keyset feed on (confirmedAt, id) with filters.
AccessNo key. Limited per address; a key adds the paid fields.
BillingOne call.
FormatsJSON, CSV (
.csv)Connect on RapidAPIAlso inDomain Price Comparison API
Request
endingstringPaidQueryA bare ending.
registrarstring: namecheap, name.com, namesilo, porkbun, dynadot, cloudflare, spaceship, godaddy, unstoppablePaidQueryA registrar slug.
fieldstring: purchase, renewal, transferPaidQueryWhich price moved.
sincestringPaidQueryA day or an ISO 8601 timestamp: confirmed at or after it.
limitintegerOptionalQueryRows a page: 20 by default, at most 20 without a key and 100 with a paid subscription; a larger value is clamped.
cursorstringPaidQueryThe 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/prices/changes"
const response = await fetch("https://api.unique.domains/v1/prices/changes", {
method: "GET",
});
const data = await response.json();
console.log(data);import requests
response = requests.get(
"https://api.unique.domains/v1/prices/changes",
)
print(response.json())req, err := http.NewRequest("GET", "https://api.unique.domains/v1/prices/changes", nil)
if err != nil {
panic(err)
}
res, err := http.DefaultClient.Do(req)$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://api.unique.domains/v1/prices/changes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($ch);uri = URI("https://api.unique.domains/v1/prices/changes")
request = Net::HTTP::Get.new(uri)
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }Response
idstringTldPriceChange.id as a string.
extensionstringBare ending.
registrarstringRegistrar slug.
registrarNamestringDisplay name.
fieldWhich price moved.
oldPricenumberBefore.
newPricenumberAfter.
currencystringISO 4217.
confirmedAtstringConfirmation timestamp.
Errors
{
"data": [
{
"id": "48230",
"extension": "xyz",
"registrar": "porkbun",
"registrarName": "Porkbun",
"field": "purchase",
"oldPrice": 2.04,
"newPrice": 1.98,
"currency": "USD",
"confirmedAt": "2026-11-04T05:38:00.000Z"
}
],
"meta": {
"asOf": "2026-11-05T08:00:00Z",
"cursor": null,
"limit": 20
},
"links": {
"self": "https://api.unique.domains/v1/prices/changes",
"next": null,
"register": null,
"product": null,
"dataset": null
}
}