Introduction
L'API CatchDoms vous donne un accès programmatique à 370 000+ domaines expirés et aux enchères depuis Dynadot, GoDaddy, DropCatch, Catched et ukbackorder.
Toutes les réponses sont en JSON. L'URL de base pour tous les endpoints est :
Les données sont rafraîchies quotidiennement. Les enchères sont mises à jour plusieurs fois par jour.
Authentification
Toutes les requêtes API nécessitent un token Bearer dans le header Authorization.
Pour obtenir votre clé API :
- Inscrivez-vous ou connectez-vous sur catchdoms.com
- Allez sur la page Accès API
- Créez un nouveau token API
L'accès API nécessite un abonnement Pro (468 EUR/an).
Exemple de header de requête
Limites de requêtes
L'API est limitée à 100 requêtes par minute par token.
Les informations de limite sont incluses dans les headers de réponse :
| Header | Description |
|---|---|
X-RateLimit-Limit |
Votre limite par minute |
X-RateLimit-Remaining |
Requêtes restantes dans la fenêtre actuelle |
Si vous dépassez la limite, vous recevrez une réponse 429 Too Many Requests. Attendez 60 secondes avant de réessayer.
Utilisez per_page=100 pour récupérer plus de résultats par requête et réduire les appels API.
Endpoints
/api/domains
Lister les domaines
Retourne une liste paginée de domaines. Accepte des paramètres de filtre.
/api/domains/{id}
Obtenir un domaine
Retourne l'objet domaine complet par son identifiant numérique.
/api/user
Utilisateur authentifié
Retourne les informations de l'utilisateur authentifié.
Paramètres de requête
Tous les paramètres sont optionnels. Ajoutez-les au query string de GET /api/domains.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
source |
string | — | Filtrer par plateforme sourcedynadot, catched, dropcatch, godaddy, ukdroplists |
tld |
string | — | Filtrer par TLD, avec ou sans point.com ou com |
score_min |
integer | — | Score qualité minimum (0-100). 50+ pour les bons domaines, 70+ pour les excellents. |
age_min |
integer | — | Âge minimum en années, basé sur la première capture Wayback |
type |
string | — | Filtrer par type de domaineauction, closeout, backorder |
has_bids |
boolean | — | Uniquement les domaines avec enchères actives |
has_backlinks |
boolean | — | Uniquement les domaines avec referring domains (valeur SEO) |
has_gmb |
boolean | — | Uniquement les domaines avec une fiche Google My Business |
da_min |
integer | — | Domain Authority minimum (0-100) |
rd_min |
integer | — | Nombre minimum de referring domains |
language |
string | — | Filtrer par code langue détectéEN, FR, DE, ES, etc. |
contains |
string | — | Mot-clé que le nom de domaine doit contenir (max 50 caractères) |
per_page |
integer | 50 | Résultats par page (1-100) |
page |
integer | 1 | Numéro de page pour la pagination |
Champs de réponse
Chaque domaine dans le tableau data contient ces champs.
| Champ | Type | Nullable | Description |
|---|---|---|---|
| Identité | |||
id |
integer | No | Identifiant unique du domaine |
name |
string | No | Nom de domaine complet |
tld |
string | No | Extension avec le point (.com, .fr, etc.) |
source |
string | No | Plateforme source (dynadot, catched, dropcatch, godaddy, ukdroplists) |
type |
string | No | Type de domaine (auction, closeout, backorder) |
auction_type |
string | Yes | Sous-type pour DropCatch (Dropped, PreRelease, PrivateSeller) ou GoDaddy (Bid, BuyNow) |
| Prix | |||
price |
float | Yes | Prix fixe pour les closeouts, ou prix de départ pour les enchères |
max_bid |
float | Yes | Enchère la plus haute pour les domaines aux enchères |
effective_price |
float | Yes | Le prix réel à payer : max_bid si défini, sinon price. Utilisez ce champ plutôt que de vérifier price et max_bid séparément. |
bids_count |
integer | Yes | Nombre d'enchères placées sur le domaine |
auction_end_date |
string (ISO 8601) | Yes | Fin de l'enchère (ISO 8601) |
| Scoring | |||
estibot_appraisal |
float | Yes | Estimation automatique de la valeur par le registrar |
score |
integer | Yes | Score qualité CatchDoms (0-100), combinant âge, autorité, backlinks, qualité du nom et TLD |
is_spammy |
boolean | No | Si le domaine a été détecté comme spam |
| Historique | |||
age |
integer | Yes | Âge du domaine en années (calculé depuis wayback_first_date) |
wayback_snapshots |
integer | Yes | Nombre total de captures Wayback Machine |
wayback_first_date |
string (YYYY-MM-DD) | Yes | Date de la première capture Wayback (YYYY-MM-DD) |
wayback_last_date |
string (YYYY-MM-DD) | Yes | Date de la dernière capture Wayback (YYYY-MM-DD) |
| Métriques SEO | |||
pagerank |
integer | Yes | Score Open PageRank (0-10) |
domain_authority |
integer | Yes | Domain Authority de DataForSEO (0-100) |
backlinks_count |
integer | Yes | Nombre total de backlinks |
referring_domains |
integer | Yes | Nombre de referring domains uniques |
| Trafic | |||
monthly_visitors |
integer | Yes | Visiteurs mensuels estimés (domaines Dynadot uniquement) |
| Langue | |||
language |
string | Yes | Code langue détecté (EN, FR, DE, etc.), depuis le contenu archivé Wayback |
| Liens | |||
purchase_url |
string | Yes | Lien direct pour enchérir/acheter sur la plateforme source |
| Horodatages | |||
created_at |
string (ISO 8601) | No | Date d'ajout sur CatchDoms (ISO 8601) |
updated_at |
string (ISO 8601) | No | Dernière mise à jour (ISO 8601) |
effective_price — Le prix réel à payer : max_bid si défini, sinon price. Utilisez ce champ plutôt que de vérifier price et max_bid séparément.
Pagination
Tous les endpoints de liste retournent des résultats paginés au format standard Laravel.
L'objet meta contient :
current_page | Numéro de page actuel |
last_page | Numéro de la dernière page |
per_page | Éléments par page |
total | Total de domaines correspondants |
from | Index du premier élément sur cette page |
to | Index du dernier élément sur cette page |
L'objet links contient :
first | URL de la première page |
last | URL de la dernière page |
prev | URL de la page précédente (null sur la première page) |
next | URL de la page suivante (null sur la dernière page) |
{
"data": [ ... ],
"links": {
"first": "https://catchdoms.com/api/domains?page=1",
"last": "https://catchdoms.com/api/domains?page=68",
"prev": null,
"next": "https://catchdoms.com/api/domains?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 68,
"per_page": 50,
"to": 50,
"total": 3400
}
}
Exemples de code
Remplacez YOUR_API_KEY par votre token.
# List domains with score >= 50 and backlinks
curl "https://catchdoms.com/api/domains?score_min=50&has_backlinks=1&per_page=10" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
# Get a single domain by ID
curl "https://catchdoms.com/api/domains/12345" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
# Filter by TLD and language
curl "https://catchdoms.com/api/domains?tld=.fr&language=FR&age_min=10" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://catchdoms.com/api';
// List domains with filters
const params = new URLSearchParams({
score_min: 50,
has_backlinks: 1,
per_page: 10
});
const response = await fetch(`${BASE_URL}/domains?${params}`, {
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Accept': 'application/json'
}
});
const { data, meta } = await response.json();
console.log(`Found ${meta.total} domains`);
// Get a single domain
const domain = await fetch(`${BASE_URL}/domains/12345`, {
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Accept': 'application/json'
}
}).then(r => r.json());
import requests
API_KEY = 'YOUR_API_KEY'
BASE_URL = 'https://catchdoms.com/api'
headers = {
'Authorization': f'Bearer {API_KEY}',
'Accept': 'application/json'
}
# List domains with filters
response = requests.get(f'{BASE_URL}/domains', headers=headers, params={
'score_min': 50,
'has_backlinks': 1,
'language': 'FR',
'per_page': 25
})
data = response.json()
print(f"Found {data['meta']['total']} domains")
for domain in data['data']:
print(f"{domain['name']} - Score: {domain['score']} - Price: {domain['effective_price']}")
# Get a single domain
domain = requests.get(f'{BASE_URL}/domains/12345', headers=headers).json()
Erreurs
L'API utilise les codes HTTP standards. Les réponses d'erreur incluent un corps JSON avec un champ message.
| Code | Signification | Description |
|---|---|---|
| 200 | Succès | Requête exécutée avec succès |
| 401 | Non autorisé | Token API manquant ou invalide |
| 403 | Interdit | Token valide mais pas d'abonnement Pro |
| 404 | Non trouvé | L'ID du domaine n'existe pas |
| 422 | Erreur de validation | Valeur de paramètre invalide (ex: score_min=abc) |
| 429 | Trop de requêtes | Limite dépassée. Attendez 60 secondes. |
Exemple de réponse d'erreur
// 401 Unauthorized
{
"message": "Unauthenticated."
}
// 429 Too Many Requests
{
"message": "Too Many Attempts."
}
Serveur MCP
CatchDoms inclut un serveur MCP (Model Context Protocol) pour les assistants IA comme Claude Code, Cursor et Windsurf.
Au lieu d'écrire des appels API, vous pouvez poser des questions en langage naturel :
Configuration
Ajoutez ceci à la config de votre client MCP :
{
"mcpServers": {
"catchdoms": {
"url": "https://catchdoms.com/mcp/catchdoms",
"transport": "sse",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Claude Code : ~/.claude.json | Cursor : paramètres MCP
En savoir plus sur l'intégration MCP