FreeDomain Market API
List market sales movers
GET/market/sales/moversNo key
Up to ten words whose sales moved over the last 30 days.
Words with three sales or more in 30 days against the 30 before, in the stored order, words with a deny class left out. Never the sold names.
AccessNo key. Limited per address; a key adds the paid fields.
BillingOne call.
FormatsJSON, CSV (
.csv)Request
fieldsstringOptionalQueryComma-separated top-level keys to keep; an unknown key answers 400 unsupported_field.
curl -X GET "https://api.unique.domains/v1/market/sales/movers"
const response = await fetch("https://api.unique.domains/v1/market/sales/movers", {
method: "GET",
});
const data = await response.json();
console.log(data);import requests
response = requests.get(
"https://api.unique.domains/v1/market/sales/movers",
)
print(response.json())req, err := http.NewRequest("GET", "https://api.unique.domains/v1/market/sales/movers", 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/market/sales/movers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($ch);uri = URI("https://api.unique.domains/v1/market/sales/movers")
request = Net::HTTP::Get.new(uri)
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }Response
wordstringsales30dintegerprev30dintegerdirectionstringsales90dintegermedian12mUsdinteger | nullprevMedian12mUsdinteger | nullendingsSoldOnstring[]Errors
{
"data": [
{
"word": "agent",
"sales30d": 9,
"prev30d": 3,
"direction": "up",
"sales90d": 14,
"median12mUsd": 4200,
"prevMedian12mUsd": 3100,
"endingsSoldOn": [
"ai",
"com",
"io"
]
}
],
"meta": {
"asOf": "2026-11-05T08:00:00Z",
"cursor": null,
"limit": null
},
"links": {
"self": "https://api.unique.domains/v1/market/sales/movers",
"next": null,
"register": null,
"product": null,
"dataset": null
}
}