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 :

https://catchdoms.com/api

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 :

  1. Inscrivez-vous ou connectez-vous sur catchdoms.com
  2. Allez sur la page Accès API
  3. Créez un nouveau token API

L'accès API nécessite un abonnement Pro (468 EUR/an).

Exemple de header de requête

Authorization: Bearer YOUR_API_KEY

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

GET /api/domains

Lister les domaines

Retourne une liste paginée de domaines. Accepte des paramètres de filtre.

GET /api/domains/{id}

Obtenir un domaine

Retourne l'objet domaine complet par son identifiant numérique.

GET /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 source
dynadot, 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 domaine
auction, 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_pageNuméro de page actuel
last_pageNuméro de la dernière page
per_pageÉléments par page
totalTotal de domaines correspondants
fromIndex du premier élément sur cette page
toIndex du dernier élément sur cette page

L'objet links contient :

firstURL de la première page
lastURL de la dernière page
prevURL de la page précédente (null sur la première page)
nextURL 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 :

"Trouve des domaines .fr de plus de 10 ans avec backlinks"
"Montre-moi les enchères GoDaddy avec score > 70"

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