DomainPrey API
Programmatic access to AI-scored expired domains, deep research, and real-time drop alerts.
Enterprise API access requires an Enterprise plan ($49/mo).
Overview
The DomainPrey API gives you full access to our database of AI-scored expired domains. Search, filter, research, and get real-time alerts when high-value domains become available.
Base URL:
https://domainprey.com/api/v1
All responses are JSON. All requests should include your API key.
Authentication
Include your API key in every request via the X-Api-Key header:
curl -H "X-Api-Key: dp_your_key_here" \
https://domainprey.com/api/v1/domains
Alternatively, pass it as a query parameter (less secure, not recommended for production):
https://domainprey.com/api/v1/domains?api_key=dp_your_key_here
Rate Limits
API requests are limited to 100 requests per minute per API key. The counter resets every 60 seconds.
If you exceed the limit, you'll receive a 429 response:
{
"error": "Rate limit exceeded (100 requests/minute)",
"retry_after": 42
}
Error Handling
The API uses standard HTTP status codes:
| Code | Meaning |
|---|---|
200 | Success |
401 | Invalid or missing API key |
403 | Enterprise plan required |
404 | Domain not found |
429 | Rate limit exceeded |
500 | Server error |
All errors return a JSON body with an error field:
{ "error": "Domain not found" }
List Domains
Search and filter verified available domains with full scoring data.
| Parameter | Type | Default | Description |
|---|---|---|---|
| search | string | — | Search domain names (partial match) |
| tld | string | — | Filter by TLD (e.g. com, io, ai) |
| min_score | number | 0 | Minimum overall score (0-100) |
| max_length | number | 50 | Maximum domain name length |
| sort | string | overall | Sort by: overall, brandability, keyword_value, flip_potential, estimated_value, length |
| order | string | desc | asc or desc |
| page | number | 1 | Page number |
| limit | number | 20 | Results per page (max 100) |
Example Request
curl -H "X-Api-Key: dp_your_key" \
"https://domainprey.com/api/v1/domains?min_score=60&tld=com&sort=estimated_value&limit=5"
Example Response
{
"domains": [
{
"name": "techvault.com",
"tld": "com",
"length": 13,
"status": "available",
"age_years": 12,
"discovered_at": "2026-02-25T08:00:00Z",
"verified_at": "2026-02-25T10:30:00Z",
"overall": 78,
"brandability": 85,
"keyword_value": 65,
"length_score": 72,
"flip_potential": 80,
"estimated_value": 2400,
"ai_summary": "Strong brandable .com with tech keyword..."
}
],
"total": 1847,
"page": 1,
"pages": 370,
"limit": 5
}
Try It
Get Domain
Get full details and scores for a single domain.
Example
curl -H "X-Api-Key: dp_your_key" \
https://domainprey.com/api/v1/domains/techvault.com
Try It
Research Domain
Get deep research data: Wayback Machine history, WHOIS, comparable sales, SEO backlinks, and social media presence.
Example Response
{
"domain": "techvault.com",
"wayback": {
"firstSnapshot": "2014-03-12T00:00:00Z",
"lastSnapshot": "2025-11-08T00:00:00Z",
"snapshotCount": 847,
"yearsActive": 11,
"hadRealContent": true,
"score": 82
},
"whois": {
"createdDate": "2013-06-15",
"expiryDate": null,
"ageYears": 12,
"registrar": "GoDaddy"
},
"comparable_sales": [
{ "domain": "techbase.com", "price": 3500, "source": "namebio" },
{ "domain": "techprime.com", "price": 4200, "source": "namebio" }
],
"seo": {
"indexed_pages": 2,
"has_backlinks": true,
"results": [{ "title": "TechVault - ...", "url": "..." }]
},
"social": {
"mentions": 1,
"results": [{ "title": "@techvault on Twitter", "url": "..." }]
},
"scores": {
"overall": 78,
"estimated_value": 2400,
"brandability": 85,
"keyword_value": 65,
"flip_potential": 80,
"length_score": 72
}
}
Try It
Newly Added
Get domains verified as available in the last 48 hours, sorted by score.
| Parameter | Type | Default | Description |
|---|---|---|---|
| limit | number | 50 | Max results (up to 200) |
| min_score | number | 0 | Minimum overall score |
curl -H "X-Api-Key: dp_your_key" \
"https://domainprey.com/api/v1/newly-added?min_score=60&limit=10"
Historical Data
Browse historical domain drops. See which domains became available over the past 90 days.
| Parameter | Type | Default | Description |
|---|---|---|---|
| days | number | 30 | Look back period (max 90) |
| tld | string | — | Filter by TLD |
| min_score | number | 0 | Minimum score |
| limit | number | 100 | Max results (up to 500) |
curl -H "X-Api-Key: dp_your_key" \
"https://domainprey.com/api/v1/history?days=7&tld=com&min_score=70"
Domain Audit Trail
Get the full status change history for a specific domain. See when it was discovered, verified, sniped, re-verified, etc.
Example Response
{
"domain": "techvault.com",
"status": "available",
"discovered_at": "2026-02-20T08:00:00Z",
"verified_at": "2026-02-25T10:30:00Z",
"history": [
{
"field": "status",
"old_value": "pending",
"new_value": "available",
"reason": "tpp-verified",
"changed_at": "2026-02-25T10:30:00Z"
}
]
}
Stats
Get aggregate statistics about the DomainPrey database.
Example Response
{
"total_domains": 105000,
"available_domains": 4326,
"average_score": 42.7,
"tld_breakdown": [
{ "tld": "com", "count": 1847 },
{ "tld": "net", "count": 623 },
{ "tld": "org", "count": 412 }
]
}
Webhooks — Real-time Drop Alerts
Webhooks push domain availability notifications to your server in real-time. When our verification engine discovers new available domains matching your criteria, we send a POST request to your webhook URL.
Configure webhooks from your Dashboard (up to 3 per account). Each webhook can filter by:
- Minimum score — only domains scoring above this threshold
- TLDs — e.g. only
.comand.io - Keywords — only domains containing specific keywords
Payload Format
We send a POST request with a JSON body:
{
"event": "domain.available",
"timestamp": "2026-02-26T14:30:00.000Z",
"domains": [
{
"name": "techvault.com",
"tld": "com",
"overall": 78,
"estimated_value": 2400
},
{
"name": "aiforge.io",
"tld": "io",
"overall": 82,
"estimated_value": 3100
}
]
}
Verifying Webhook Signatures
Every webhook request includes an X-DomainPrey-Signature header containing an HMAC-SHA256 signature of the request body, signed with your webhook secret.
To verify:
// Node.js
const crypto = require('crypto');
function verifyWebhook(body, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
// Express middleware
app.post('/webhook', express.text({ type: '*/*' }), (req, res) => {
const sig = req.headers['x-domainprey-signature'];
if (!verifyWebhook(req.body, sig, 'your_webhook_secret')) {
return res.status(401).send('Invalid signature');
}
const data = JSON.parse(req.body);
console.log('New domains:', data.domains);
res.sendStatus(200);
});
# Python
import hmac, hashlib
def verify_webhook(body: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)
2xx status to acknowledge receipt. Failed deliveries are not retried (yet).
Test Your API Key
Paste your API key below to verify it's working and check your current rate limit status.
API Key Test
Code Examples
Python — Find high-value .com domains
import requests
API_KEY = "dp_your_key_here"
BASE = "https://domainprey.com/api/v1"
headers = {"X-Api-Key": API_KEY}
# Get top .com domains scoring 70+
resp = requests.get(f"{BASE}/domains", headers=headers, params={
"tld": "com",
"min_score": 70,
"sort": "estimated_value",
"order": "desc",
"limit": 20
})
data = resp.json()
for d in data["domains"]:
print(f"{d['name']} — Score: {d['overall']}, Value: ${d['estimated_value']}")
JavaScript / Node.js — Monitor new drops
const API_KEY = 'dp_your_key_here';
async function checkNewDrops() {
const resp = await fetch(
'https://domainprey.com/api/v1/newly-added?min_score=60',
{ headers: { 'X-Api-Key': API_KEY } }
);
const { domains } = await resp.json();
for (const d of domains) {
console.log(`${d.name} — Score: ${d.overall}, Est: $${d.estimated_value}`);
}
}
// Check every 15 minutes
setInterval(checkNewDrops, 15 * 60 * 1000);
checkNewDrops();
cURL — Quick domain lookup
# Get details for a specific domain
curl -s -H "X-Api-Key: dp_your_key" \
https://domainprey.com/api/v1/domains/example.com | jq .
# Search for AI-related domains
curl -s -H "X-Api-Key: dp_your_key" \
"https://domainprey.com/api/v1/domains?search=ai&min_score=50&tld=com" | jq .
# Get today's best drops
curl -s -H "X-Api-Key: dp_your_key" \
"https://domainprey.com/api/v1/newly-added?min_score=70&limit=5" | jq .
Google Sheets — Import domains
// Apps Script — paste in Extensions > Apps Script
function importDomains() {
const API_KEY = 'dp_your_key_here';
const resp = UrlFetchApp.fetch(
'https://domainprey.com/api/v1/domains?min_score=60&limit=50',
{ headers: { 'X-Api-Key': API_KEY } }
);
const data = JSON.parse(resp.getContentText());
const sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1, 1, 1, 5).setValues([
['Domain', 'Score', 'Value', 'TLD', 'Verified']
]);
const rows = data.domains.map(d => [
d.name, d.overall, d.estimated_value, d.tld, d.verified_at
]);
sheet.getRange(2, 1, rows.length, 5).setValues(rows);
}
DomainPrey API v1 — Back to DomainPrey — Pricing — Support