AI Directories
officielRecherchez dans le catalogue AI Directories, consultez une fiche et parcourez les répertoires de soumission.
Que pouvez-vous faire avec AI Directories MCP ?
- Rechercher des outils IA — Demandez de trouver des outils IA par mot-clé, catégorie, tag ou prix en utilisant
search_tools. - Obtenir les détails d’un outil — Demandez la fiche publique complète de n’importe quel outil via son slug avec
get_tool, y compris les captures d’écran et les FAQ. - Parcourir les outils populaires — Demandez les outils IA les plus populaires par ouvertures, éventuellement filtrés par catégorie, avec
get_top_tools. - Explorer les catégories et les tags — Demandez à l’assistant de lister toutes les catégories ou tags d’outils IA avec leurs compteurs en utilisant
list_categoriesoulist_tags. - Trouver des annuaires de soumission — Recherchez des annuaires par nom, coût ou catégorie avec
search_directoriespour identifier les cibles de soumission. - Obtenir les profils d’annuaires — Récupérez le profil complet d’un annuaire, y compris le Domain Rating et les exigences de badge, via
get_directory.
Documentation
Développeurs
API & MCP
Catalogue officiel AI Directories — recherchez des outils IA et des annuaires de soumission depuis curl ou un agent. Gratuit, documenté, et mieux que le scraping.
RESTGET · Bearer aid_
MCPStreamable HTTP
OpenAPIspecification machine
Recherchez le catalogue AI Directories, consultez une fiche, et parcourez les annuaires de soumission — depuis un agent ou depuis curl. REST et MCP partagent le même backend. Des scrapers tiers enveloppent nos pages publiques et facturent un export. Ceci est la source officielle.
Exemple — GET /tools/transclipper
curl -s "https://www.aidirectori.es/api/v1/tools/transclipper" \
-H "Authorization: Bearer aid_your_api_key"
{
"success": true,
"data": {
"id": "69b81f3e40816562014e004a",
"slug": "transclipper",
"name": "TransClipper",
"url": "https://www.aidirectori.es/ai-tools/transclipper",
"website": "https://transclipper.ai",
"tagline": "Steal the Blueprint Behind Any Viral Video",
"description": "TransClipper is a powerful AI-driven tool designed for efficient content clipping and transcription.",
"category": { "slug": "video", "name": "Video" },
"tags": [
{ "slug": "ai", "name": "AI" },
{ "slug": "content-creation", "name": "Content Creation" }
],
"pricing": "FREE",
"rating": 4,
"opens": 4030,
"featured": true,
"icon": "https://cdn.aidirectori.es/icons/1784893027853-vpj1hwsqkq.png"
}
}
Ce que vous pouvez faire
- Rechercher des outils IA par mot-clé, catégorie, tag, ou tarification
- Récupérer un outil par slug (fiche publique complète)
- Lister les catégories et les tags
- Rechercher des annuaires de soumission (DR, coût, badge)
- Récupérer un profil d'annuaire avec votre clé aid_
Ce que vous ne pouvez pas faire
- Lire les e-mails des fondateurs ou les analyses privées
- Scraper le site HTML ou vous faire passer pour un crawler
- Republier le catalogue comme annuaire concurrent
- Appeler les API d'écriture partenaires sans clé émise
Pourquoi cela existe
Des gens scrappaient aidirectori.es et vendaient l'export. L'API officielle est gratuite pour les produits, la recherche, et les agents — avec attribution, limites de débit, et une licence : vous ne pouvez pas republier le catalogue complet comme annuaire concurrent ou scrape payant.
Intégration dans un agent
Cursor : .cursor/mcp.json ou ~/.cursor/mcp.json. Pas d'espace après Authorization: — mcp-remote découpe sur les espaces. Voir Installer MCP.
{
"mcpServers": {
"aidirectories": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://www.aidirectori.es/api/mcp",
"--header", "Authorization:Bearer aid_your_real_key"
]
}
}
}
Aussi lisible par machine
- /llms.txt — résumé du site pour les agents
- /sitemap.xml
- 60 req/min · 400/heure par IP
Commencer / Démarrage rapide
Démarrage rapide
Créez une clé aid_, puis recherchez des outils, récupérez une fiche, et recherchez des annuaires.
Créez une clé sur le tableau de bord développeur, puis copiez ce qui suit.
1. Rechercher des outils IA
curl -s "https://www.aidirectori.es/api/v1/tools?q=image&limit=5" \
-H "Authorization: Bearer aid_your_api_key"
2. Récupérer une fiche
curl -s "https://www.aidirectori.es/api/v1/tools/transclipper" \
-H "Authorization: Bearer aid_your_api_key"
3. Rechercher des annuaires
curl -s "https://www.aidirectori.es/api/v1/directories?q=ai&limit=5" \
-H "Authorization: Bearer aid_your_api_key"
Mêmes opérations via MCP : ajoutez le serveur avec le même jeton Bearer, puis appelez search_tools, get_tool, et search_directories. Voir Installation MCP.
Commencer / Authentification
Authentification
Jeton Bearer via clé API. Générez des clés depuis votre tableau de bord développeur. Standard 10/min, premium 60/min.
Authentification
Jeton Bearer via clé API. Générez des clés depuis votre tableau de bord développeur.
Limites de débit
Les clés standard obtiennent 10 requêtes par minute. Les clés premium en obtiennent 60. Passez à un niveau supérieur depuis votre tableau de bord développeur. Les en-têtes de limite de débit sont présents sur chaque réponse.
URL de base
https://www.aidirectori.es/api/v1
-
1 Obtenez votre clé API
Allez sur le tableau de bord développeur et créez une clé API. Les clés commencent paraid_. Stockez-la en toute sécurité — vous ne pourrez plus voir la clé complète ensuite. Usage acceptable requis La création d'une clé exige d'accepter la Politique d'usage acceptable de l'API. Le clonage d'entreprises, la reconstruction d'AI Directories, la republication en masse, les pages SEO publiques non autorisées, le ciblage abusif, le partage d'identifiants, et la contournement des contrôles d'accès sont interdits et peuvent entraîner un bannissement permanent de la plateforme. -
2 Effectuez votre première requête
Passez votre clé comme jeton Bearer dans l'en-têteAuthorization.X-API-Keyest également accepté, sur chaque point de terminaison. Les deux sont interchangeables — ce qu'une clé peut atteindre dépend de la clé, pas de l'en-tête dans lequel elle arrive. Une cléaid_du tableau de bord obtient toujours403sur les points de terminaison partenaires lorsqu'elle est envoyée commeX-API-Key; si vous voyez une erreur 403, vous avez besoin d'une clé différente, pas d'un en-tête différent.curl -s "https://www.aidirectori.es/api/v1/tools?q=ai&limit=5" \ -H "Authorization: Bearer aid_your_api_key" -
3 Analysez la réponse
Les lectures réussies renvoient{ success: true, data }. Les points de terminaison de liste incluent égalementpagination— ses champs et les règles de limitation valent la peine d'être lus avant d'écrire une boucle de pagination. SurveillezX-RateLimit-Remaining.{ "success": true, "data": [ { "slug": "transclipper", "name": "TransClipper", "website": "https://transclipper.ai" } ] }
Clés partenaires
Les partenaires d'annuaires qui nous envoient des outils pour le service de soumission utilisent toujours une clé émise pour POST /submit-ai-tool, le statut, les webhooks, et le support. Ces clés fonctionnent aussi pour les lectures du catalogue. Voir Vous avez un annuaire ?.
MCP / Installation
Installer MCP
MCP Streamable HTTP hébergé — envoyez la même clé Bearer que pour REST.
Le serveur parle le Model Context Protocol sur Streamable HTTP. Il est hébergé. Chaque outil enveloppe les mêmes fonctions que l'API REST. Envoyez Authorization: Bearer aid_… depuis votre tableau de bord développeur.
https://www.aidirectori.es/api/mcp
Claude Code
claude mcp add --transport http aidirectories https://www.aidirectori.es/api/mcp \
--header "Authorization: Bearer aid_your_api_key"
Cursor / Claude Desktop
Portée du projet : .cursor/mcp.json. Globale : ~/.cursor/mcp.json. Claude Desktop : claude_desktop_config.json (stdio uniquement — ce même bloc).
{
"mcpServers": {
"aidirectories": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://www.aidirectori.es/api/mcp",
"--header", "Authorization:Bearer aid_your_real_key"
]
}
}
}
Pas d'espace après Authorization: — mcp-remote découpe les arguments sur les espaces, donc "Authorization: Bearer …" casse l'en-tête. Redémarrez complètement le client après avoir modifié le fichier.
Après avoir ajouté le serveur, demandez à l'agent de lister les outils. Vous devriez voir search_tools, get_top_tools, get_tool, list_categories, list_tags, search_directories, get_directory, et list_directory_categories.
Vérifier
curl -s https://www.aidirectori.es/api/mcp -X POST \
-H "Authorization: Bearer aid_your_api_key" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
MCP / Outils
Outils MCP
Chaque outil MCP est une fine enveloppe autour du catalogue REST.
L'authentification est la même clé Bearer aid_ que pour REST.
| Outil | REST | Entrée |
|---|---|---|
search_tools | GET /tools | q, category, tag, pricing, featured, page, limit |
get_top_tools | GET /tools/top | limit, category |
get_tool | GET /tools/{slug} | slug |
list_categories | GET /categories | q, limit |
list_tags | GET /tags | q, limit |
search_directories | GET /directories | q, category, cost, featured, page, limit |
get_directory | GET /directories/{slug} | slug |
list_directory_categories | GET /directory-categories | — |
Les notes complètes sur les champs se trouvent sous Outils IA et Annuaires.
API REST / Vue d'ensemble
API REST
HTTP simple pour les scripts, CI, et intégrations partenaires. Le serveur MCP appelle ces mêmes chemins — donc un résultat ne dépend jamais du transport qui l'a demandé.
| Opération | Méthode | Chemin | Auth | Entrée |
|---|---|---|---|---|
| search_tools Recherche par mot-clé avec filtres optionnels de catégorie, tag, tarification, et featured. | GET | /tools | Bearer | q, category, tag, pricing, featured, includeAdult, page, limit |
| get_top_tools Top N fiches par ouvertures — aucun mot-clé requis. | GET | /tools/top | Bearer | limit, category, includeAdult |
| list_categories Catégories d'outils IA avec comptes d'outils — à utiliser avant de filtrer une recherche. | GET | /categories | Bearer | q, limit |
| list_tags Tags d'outils IA avec comptes d'outils. | GET | /tags | Bearer | q, limit |
| get_tool La fiche publique complète d'un outil IA. | GET | /tools/{slug} | Bearer | slug |
| search_directories Recherche d'annuaires de soumission par nom, catégorie, ou coût. | GET | /directories | Bearer | q, category, cost, featured, page, limit |
| get_directory Le profil public complet d'un annuaire. | GET | /directories/{slug} | Bearer | slug |
| list_directory_categories Libellés de catégories d'annuaires pour la découverte de filtres. | GET | /directory-categories | Bearer | — |
| submit_ai_tool Créer une fiche d'outil IA (et éventuellement mettre en file les soumissions d'annuaires). | POST | /submit-ai-tool | X-API-Key | name, website, tagline, description, category, pricing, founderName, founderEmail, tags, paymentType, … |
| get_tool_status Interroger la progression des soumissions d'annuaires pour un outil soumis par votre clé. | GET | /ai-tools/status | X-API-Key | id | slug | website |
La découverte se trouve à GET / et le document OpenAPI à GET /openapi.json. Les notes sur les champs des réponses du catalogue sont sur Outils IA et Annuaires.
Enveloppe, pagination, et limites
Chaque réponse utilise la même enveloppe. data est un tableau pour les recherches et un objet pour les recherches à élément unique. Vérifiez success avant de lire data.
{ "success": true, "data": [], "pagination": { "page": 1, "limit": 20, "total": 0, "pages": 0 } }
{ "success": false, "error": "Invalid or revoked API key." }
GET /tools et GET /directories renvoient un objet pagination. Les points de terminaison de taxonomie — /categories, /tags, /directory-categories — renvoient la liste complète et aucune clé pagination du tout.
| page | La page que vous avez obtenue, base 1 |
|---|---|
| limit | Éléments par page réellement appliqués |
| total | Éléments correspondants sur toutes les pages |
| pages | ceil(total / limit), ou 0 si rien ne correspond |
Une limite excessive est réduite, pas rejetée. Demandez plus que le maximum et vous obtenez le maximum, avec un 200 — aucune erreur ne vous signale ce qui s'est passé. /tools et /directories sont par défaut à 20 et plafonnent à 100 ; /categories et /tags plafonnent à 500. Un limit manquant, nul, négatif, ou non numérique retombe sur la valeur par défaut, et page est plancher à 1. Lisez donc pagination.limit dans la réponse plutôt que de supposer que vous avez obtenu la taille de page demandée — cette supposition est ce qui transforme une boucle de pagination en boucle infinie.
page=1
while :; do
body=$(curl -s "https://www.aidirectori.es/api/v1/tools?limit=100&page=$page" \
-H "Authorization: Bearer $AID_KEY")
echo "$body" | jq -e '.success' >/dev/null || { echo "$body"; break; }
echo "$body" | jq -c '.data[]'
pages=$(echo "$body" | jq '.pagination.pages')
[ "$page" -ge "$pages" ] && break
page=$((page + 1))
sleep 6 # stay under 10 req/min on a standard key
done
Outils IA
Parcourez, recherchez, et filtrez le catalogue en direct, ou récupérez une fiche par slug. Correspond aux MCP search_tools, get_top_tools, get_tool, list_categories, et list_tags.
list_categories
Catégories d'outils IA avec comptes d'outils — à utiliser avant de filtrer une recherche.
| REST | GET /categories |
|---|---|
| MCP | tools/call → list_categories |
| Auth | Bearer |
| Entrée | q, limit |
curl -s "https://www.aidirectori.es/api/v1/categories" \
-H "Authorization: Bearer aid_your_api_key"
get_top_tools
Top N fiches par ouvertures — aucun mot-clé requis.
| REST | GET /tools/top |
|---|---|
| MCP | tools/call → get_top_tools |
| Auth | Bearer |
| Entrée | limit, category, includeAdult |
curl -s "https://www.aidirectori.es/api/v1/tools/top?limit=10&category=image" \
-H "Authorization: Bearer aid_your_api_key"
search_tools
Recherche par mot-clé avec filtres optionnels de catégorie, tag, tarification, et featured.
| REST | GET /tools |
|---|---|
| MCP | tools/call → search_tools |
| Auth | Bearer |
| Entrée | q, category, tag, pricing, featured, includeAdult, page, limit |
curl -s "https://www.aidirectori.es/api/v1/tools?q=ai&limit=5" \
-H "Authorization: Bearer aid_your_api_key"
get_tool
La fiche publique complète d'un outil IA.
| REST | GET /tools/{slug} |
|---|---|
| MCP | tools/call → get_tool |
| Auth | Bearer |
| Entrée | slug |
curl -s "https://www.aidirectori.es/api/v1/tools/transclipper" \
-H "Authorization: Bearer aid_your_api_key"
list_tags
Tags d'outils IA avec comptes d'outils.
| REST | GET /tags |
|---|---|
| MCP | tools/call → list_tags |
| Auth | Bearer |
| Entrée | q, limit |
curl -s "https://www.aidirectori.es/api/v1/tags" \
-H "Authorization: Bearer aid_your_api_key"
Annuaires
Le catalogue des annuaires de soumission — Domain Rating, coût, badge, et catégories. Correspond aux MCP search_directories, get_directory, et list_directory_categories.
search_directories
Recherche d'annuaires de soumission par nom, catégorie, ou coût.
| REST | GET /directories |
|---|---|
| MCP | tools/call → search_directories |
| Auth | Bearer |
| Entrée | q, category, cost, featured, page, limit |
curl -s "https://www.aidirectori.es/api/v1/directories?cost=Free&limit=10" \
-H "Authorization: Bearer aid_your_api_key"
get_directory
Le profil public complet d'un annuaire.
| REST | GET /directories/{slug} |
|---|---|
| MCP | tools/call → get_directory |
| Auth | Bearer |
| Entrée | slug |
curl -s "https://www.aidirectori.es/api/v1/directories/theres-an-ai-for-that" \
-H "Authorization: Bearer aid_your_api_key"
list_directory_categories
Libellés de catégories d'annuaires pour la découverte de filtres.
| REST | GET /directory-categories |
|---|---|
| MCP | tools/call → list_directory_categories |
| Auth | Bearer |
| Entrée | — |
curl -s "https://www.aidirectori.es/api/v1/directory-categories" \
-H "Authorization: Bearer aid_your_api_key"
Partenaire
Les points de terminaison d'écriture et de statut nécessitent un X-API-Key émis. Gardez-le sur votre serveur. MCP n'appelle pas ces points. Les listes complètes de champs se trouvent sous Soumettre & partenaires.
submit_ai_tool
Créer une fiche d'outil IA (et éventuellement mettre en file les soumissions d'annuaires).
| REST | POST /submit-ai-tool |
|---|---|
| MCP | — |
| Auth | X-API-Key |
| Entrée | name, website, tagline, description, category, pricing, founderName, founderEmail, tags, paymentType, … |
curl -s -X POST "https://www.aidirectori.es/api/v1/submit-ai-tool" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My Tool",
"website": "https://mytool.com",
"tagline": "One-line pitch",
"description": "What the product does.",
"category": "productivity",
"pricing": "FREE",
"paymentType": "pro",
"founderName": "Jane Founder",
"founderEmail": "jane@mytool.com",
"tags": ["ai", "productivity"],
"icon": "https://mytool.com/icon.png",
"frame": "https://mytool.com/screenshot.png",
"screenshots": ["https://mytool.com/gallery-1.png"]
}'
get_tool_status
Interrogez la progression de la soumission à l'annuaire pour un outil soumis avec votre clé.
| REST | GET /ai-tools/status |
|---|---|
| MCP | — |
| Auth | X-API-Key |
| Entrée | id | slug | website |
curl -s "https://www.aidirectori.es/api/v1/ai-tools/status?slug=my-ai-tool" \
-H "X-API-Key: YOUR_API_KEY"
API REST / Outils IA
Outils IA
Parcourez, recherchez et récupérez les fiches d'outils IA publiés.
search_tools
Recherche par mots-clés avec filtres de catégorie, de tag, de tarification et de mise en avant.
| REST | GET /tools |
|---|---|
| MCP | search_tools |
| Auth | Bearer aid_ |
| Entrée | q, category, tag, pricing (FREE | FREEMIUM | PAID), featured, includeAdult, page, limit (max 100) |
curl -s "https://www.aidirectori.es/api/v1/tools?q=transclipper&limit=5" \
-H "Authorization: Bearer aid_your_api_key"
Chaque élément inclut le nom, le slug, l'URL de la fiche, le site web, le slogan, la description, la catégorie, les tags, la tarification, la note, les ouvertures, l'icône et les horodatages. Pas d'e-mail du fondateur.
Les fiches pour adultes sont exclues par défaut. search_tools et get_top_tools retiennent les fiches pour adultes sauf si vous les demandez explicitement.
L'exclusion se fait par catégorie et tag, car les outils pour adultes sont souvent classés dans une catégorie générale — image, writing, video — tout en se taguant avec précision. Ainsi, category=image renvoie les outils d'image sans les applications de déshabillage.
Trois façons de s'y inscrire : includeAdult=true, category=nsfw, ou nommer un tag pour adultes tel que tag=ai-undressing. Rien n'est caché ou inaccessible — c'est simplement ce que vous n'obtenez pas lorsque vous ne l'avez pas demandé.
get_top_tools
Outils publiés les plus ouverts. Slug de catégorie facultatif.
curl -s "https://www.aidirectori.es/api/v1/tools/top?limit=10&category=image" \
-H "Authorization: Bearer aid_your_api_key"
get_tool
Fiche publique complète : captures d'écran, FAQ, réseaux sociaux, fonctionnalités.
curl -s "https://www.aidirectori.es/api/v1/tools/transclipper" \
-H "Authorization: Bearer aid_your_api_key"
list_categories / list_tags
curl -s "https://www.aidirectori.es/api/v1/categories" -H "Authorization: Bearer aid_your_api_key"
curl -s "https://www.aidirectori.es/api/v1/tags?q=photo" -H "Authorization: Bearer aid_your_api_key"
Les catégories renvoient slug, name, description, icon, toolsCount. Les tags renvoient slug, name, toolsCount. Aucun n'est paginé — vous obtenez la liste complète, alors mettez-la en cache et filtrez localement.
Champs des outils
Renvoyés par /tools, /tools/top et /tools/{slug} de la même manière :
| Champ | Type | Notes |
|---|---|---|
id | string | Identifiant stable |
slug | string | Utilisez ceci pour /tools/{slug} |
name, tagline, description | string | |
url | string | La fiche sur aidirectori.es |
website | string | Le site propre du produit |
category | object | { slug, name }, ou null |
tags | array | [{ slug, name }] |
pricing | string | FREE | FREEMIUM | PAID |
rating | number | 0 lorsqu'il n'est pas noté |
opens | number | Clics ; ce sur quoi /tools/top trie |
featured | boolean | |
icon, frame | string | URLs d'images, nullable |
founderName, location | string | Nullable. Jamais d'e-mail du fondateur |
domainRating | number | Nullable |
isForSale, askingPrice | boolean, number | Fiches marquées pour acquisition |
discountCode, affiliate | string, boolean | |
createdAt, updatedAt | string | ISO 8601, nullable |
GET /tools/{slug} ajoute screenshots (tableau d'URLs), video, socials, faqs, features, et affiliateLink. Ces six ne sont uniquement sur le point de terminaison d'outil unique — ne les attendez pas d'une recherche.
Tout champ peut être null lorsqu'une fiche ne l'a pas rempli. Codez de manière défensive.
API REST / Annuaires
Annuaires
L'autre moitié du catalogue — les annuaires de soumission pour startups et SaaS, avec DR et tarification.
Les scrappers manquent généralement cela. C'est la liste à laquelle nous soumettons réellement les produits.
search_directories
| REST | GET /directories |
|---|---|
| MCP | search_directories |
| Auth | Bearer aid_ |
| Entrée | q, category, cost (Free | Paid | Freemium), featured, page, limit |
curl -s "https://www.aidirectori.es/api/v1/directories?cost=Free&limit=10" \
-H "Authorization: Bearer aid_your_api_key"
Les champs incluent le nom, l'URL de la fiche, le site web, le Domain Rating, les visites mensuelles, le type de lien, l'exigence de badge, le prix minimum et les catégories.
get_directory
Ajoute la description, la FAQ, le lien de soumission et le texte de l'offre.
curl -s "https://www.aidirectori.es/api/v1/directories/theres-an-ai-for-that" \
-H "Authorization: Bearer aid_your_api_key"
list_directory_categories
curl -s "https://www.aidirectori.es/api/v1/directory-categories" \
-H "Authorization: Bearer aid_your_api_key"
Renvoie slug et name uniquement. Non paginé. Ce sont les valeurs que ?category= accepte — lisez-les plutôt que de deviner.
Champs des annuaires
| Champ | Type | Notes |
|---|---|---|
id, slug, name | string | |
url | string | Le profil sur aidirectori.es |
website | string | Le site propre de l'annuaire |
icon | string | Nullable |
cost | string | Free | Paid | Freemium |
type | string | Type de lien |
domainRating | number | Nullable — le nombre sur lequel la plupart trient |
monthlyVisits | number | Nullable |
requiresBadge | boolean | S'ils exigent un badge de backlink |
minimumPrice | number | 0 lorsqu'il est gratuit |
submissionExperience | string | Nullable |
featured | boolean | |
categories | array | [{ slug, name }] |
smallDescription | string | Nullable |
createdAt, updatedAt | string | ISO 8601 |
GET /directories/{slug} ajoute fullDescription, features, useCases, faq, deal ({ text, code } ou null), frame, et socials.
Notez les deux champs url : url est notre page de profil, website est l'annuaire lui-même. Les URLs de formulaires de soumission directe (submissionLink) ne sont pas dans l'API du catalogue ou le MCP — elles font partie du produit de liste payant sur le site et le tableau de bord.
Choisir les cibles de soumission
curl -s "https://www.aidirectori.es/api/v1/directories?cost=Free&limit=100" \
-H "Authorization: Bearer $AID_KEY" \
| jq -r '.data
| map(select(.requiresBadge == false and .domainRating != null))
| sort_by(-.domainRating)
| .[]
| [.domainRating, .name, .website] | @tsv'
Gratuit, sans badge requis, domaines les plus forts en premier.
API REST / Soumission & partenaires
Soumission & partenaires
Points de terminaison avec clé API pour soumettre des outils, interroger le statut, les webhooks et le support.
Ceux-ci ne sont pas anonymes. Nous délivrons une clé par partenaire. Le MCP ne les appelle pas.
Soumettre un outil
POST https://www.aidirectori.es/api/v1/submit-ai-tool
Crée une fiche. Envoyez paymentType pour mettre en file d'attente les soumissions à l'annuaire pour ce package. Omettez-le et l'outil est créé en attente afin que le package puisse être défini plus tard dans l'administration.
Requis
9
S'il en manque un, renvoie 400.
ChampTypeNotes
namestring Maximum 100 caractères.websiteurl URL publique du produit.taglinestring Maximum 200 caractères.descriptionstring Ce que fait le produit.categorystring Slug ou nom. Nous le mappons sur une catégorie existante.pricingenumFREEPAIDFREEMIUMLa tarification propre du produit — pas le package d'annuaire.founderNamestring Vous collectez ceci avant de faire le POST.founderEmailemail Vous collectez ceci. Jamais renvoyé sur les lectures publiques du catalogue. Ne l'envoyez pas depuis un navigateur.tagsstring[] Slugs ou noms.
Recommandé
5
La requête réussit sans ceux-ci — nous générons un slug, récupérons l'icône/og:image, et laissons le package en attente. Envoyez-les lorsque vous les avez.
ChampTypeNotes
paymentTypeenumstarterpropremiumPackage d'annuaire : 30+, 60+ ou 100+ soumissions. Envoyez ceci si le client a déjà choisi un package. Omettez uniquement si vous voulez que l'outil soit créé en attente afin que l'admin puisse le définir plus tard.slugstring Slug d'URL publique. Généré à partir du nom (et rendu unique) si omis — envoyez-le lorsque vous avez déjà un slug stable.iconurl Logo carré. Si omis, nous récupérons le favicon du site — envoyez le vôtre pour une meilleure fiche.frameurl Capture d'écran principale. Si omise, nous récupérons og:image — envoyez une capture du produit lorsque vous en avez une.screenshotsurl[] Images de galerie, miroitées vers Cloudflare. Non requis ; le cadre couvre le héros si ceci est vide.
Facultatif
11
Les images à des URLs publiques sont miroitées vers Cloudflare.
ChampTypeNotes
videourl YouTube ou Vimeo.socialsobject Clés vers URLs, par ex.{ "twitter": "https://x.com/…" }.featuresobject Map de chaînes, par ex.{ "Templates": "50+" }. Généré si omis.faqarray Si omis, extrait du site ou généré.affiliatestring Texte du programme d'affiliation.affiliateLinkurldiscountCodestring Code promo affiché sur la fiche.locationstring Où l'entreprise est basée.foundingDatestring Date de fondation, forme libre.isCustomerboolean S'ils sont déjà clients.isLaunchedboolean Si le produit est en ligne.
curl -s -X POST "https://www.aidirectori.es/api/v1/submit-ai-tool" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My Tool",
"website": "https://mytool.com",
"tagline": "One-line pitch",
"description": "What the product does.",
"category": "productivity",
"pricing": "FREE",
"paymentType": "pro",
"founderName": "Jane Founder",
"founderEmail": "jane@mytool.com",
"tags": ["ai", "productivity"],
"icon": "https://mytool.com/icon.png",
"frame": "https://mytool.com/screenshot.png",
"screenshots": ["https://mytool.com/gallery-1.png"]
}'
Interroger le statut de soumission
GET https://www.aidirectori.es/api/v1/ai-tools/status — recherchez un outil soumis avec votre clé en utilisant exactement un de id, slug, ou website. Les outils des autres clients renvoient 404.
Utilisez ceci à tout moment — pas seulement lorsqu'un webhook se déclenche. Interrogez pendant que summary.isComplete est false, puis arrêtez (ou attendez Done). submissionState est IN_QUEUE, ASSIGNED, IN_PROGRESS, REVIEW, DONE, ou null lorsqu'il n'y a pas de flux de travail d'annuaire.
curl -s "https://www.aidirectori.es/api/v1/ai-tools/status?slug=my-ai-tool" \
-H "X-API-Key: YOUR_API_KEY"
Webhook
Nous envoyons du JSON en POST à une URL HTTPS stockée sur votre client API — pas envoyé à chaque soumission. Donnez-nous l'URL lors de votre candidature ; nous la stockons comme webhookUrl et vous envoyons un secret de signature. Les réponses de fin d'annuaire et de support atteignent ce même point de terminaison.
L'événement d'annuaire se déclenche lorsqu'un admin clique sur Done sur un outil soumis avec votre clé et que webhookUrl est défini. URL manquante : nous n'envoyons rien. Votre point de terminaison en panne ou non-2xx : l'outil est toujours marqué Done. Nous ne réessayons pas encore — interrogez le statut si vous avez besoin d'un repli.
Événements
2
Lisez X-AI-Directories-Event avant d'analyser le corps.
ChampTypeNotes
directory_submissions.completedDone L'admin a marqué le travail d'annuaire Done pour un outil soumis avec votre clé. La charge utile est { event, occurredAt, tool, summary, submissions }.support.repliedreply Une réponse de support est prête (IA ou humaine). La charge utile est { event, occurredAt, conversation }. Uniquement si le support est activé.
Requête
| Méthode | POST |
|---|---|
| Content-Type | application/json |
| Auth | En-tête HMAC — pas votre clé API |
En-têtes
3
ChampTypeNotes
X-AI-Directories-Eventstring Quelle charge utile vous avez reçue. Branchez-vous là-dessus — la même URL reçoit les deux événements.X-AI-Directories-Signaturestring sha256=<hex> HMAC du corps brut avec votre secret de signature. Présent lorsque nous avons émis un secret.User-Agentstring AI-Directories-Webhook/1.0
Vérifier la signature
HMAC-SHA256 sur le corps brut de la requête avec le secret que nous vous avons donné. Comparez le digest hexadécimal à X-AI-Directories-Signature après avoir retiré le préfixe sha256=. Utilisez une comparaison à temps constant.
const crypto = require("crypto");
function verifySignature(rawBody, signatureHeader, secret) {
const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
const received = String(signatureHeader || "").replace(/^sha256=/, "");
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received));
}
Charge utile
submissions inclut uniquement les annuaires auxquels nous avons réellement soumis. Chaque ligne peut inclure le listingUrl en direct, la capture d'écran de preuve, le domain rating, et qui l'a soumis (ADMIN ou OWNER). Renvoyez 2xx pour accuser réception.
{
"event": "directory_submissions.completed",
"occurredAt": "2026-09-01T13:00:00.000Z",
"tool": {
"id": "64a1b2c3d4e5f6789012345",
"name": "My AI Tool",
"slug": "my-ai-tool",
"website": "https://myaitool.com",
"paymentStatus": "prolist",
"paymentLabel": "Pro · 60+",
"targetDirectoriesCount": 60
},
"summary": {
"submittedCount": 62,
"recordedSubmissions": 62,
"notes": "All high-DR directories completed"
},
"submissions": [
{
"name": "There's An AI For That",
"slug": "theres-an-ai-for-that",
"url": "https://theresanaiforthat.com",
"listingUrl": "https://theresanaiforthat.com/ai/my-ai-tool",
"domainRating": 81,
"isSubmitted": true,
"submittedBy": "ADMIN",
"submittedAt": "2026-09-01T12:00:00.000Z"
}
]
}
Support client
Transmettez une question depuis l'interface de votre produit ; nous répondons depuis votre base de connaissances lorsque nous le pouvons, ou un humain répond dans notre tableau de bord. Désactivé par défaut — jusqu'à ce que nous l'activions, POST /support/ask renvoie 403. Même X-API-Key que pour la soumission. Le MCP ne peut pas appeler ceci.
Le mode par défaut est hybride : l'IA répond lorsqu'elle le peut, sinon la conversation reste pending pour un humain. Nous pouvons définir le client en mode humain uniquement (sans IA). Sans connaissance produit, les questions attendent une personne.
Envoyer une question
POST https://www.aidirectori.es/api/v1/support/ask
Corps
5 question est obligatoire. Réutilisez conversationId ou externalId pour continuer un fil. Les clients réservés aux humains peuvent envoyer metadata.peerPushMessageId pour des tentatives idempotentes.
FieldTypeNotes
questionstring La question du client. 4000 caractères maximum. message est également accepté.conversationIdstring Continuez un fil que nous avons renvoyé précédemment.externalIdstring Votre ticket ou identifiant de fil. Le réutiliser continue la même conversation.customerobject{ name, email, id }facultatif pour le client final — pas le fondateur de submit.metadataobject JSON arbitraire stocké sur la conversation.
curl -s -X POST "https://www.aidirectori.es/api/v1/support/ask" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"question": "How do I cancel my subscription?",
"externalId": "ticket-123",
"customer": { "name": "Ada", "email": "ada@example.com" }
}'
Hybride/IA : 200 avec status: "answered" signifie que reply est prêt (replySource est ai ou human). pending signifie interroger ou attendre le webhook.
{
"success": true,
"data": {
"id": "64a1b2c3d4e5f6789012345",
"status": "answered",
"externalId": "ticket-123",
"reply": "You can cancel from Settings → Billing.",
"replySource": "ai",
"messages": [
{ "role": "customer", "content": "How do I cancel my subscription?" },
{ "role": "assistant", "content": "You can cancel from Settings → Billing.", "source": "ai" }
]
}
}
Les clients réservés aux humains reçoivent une enveloppe légère — pas d’historique, ni customer, ni messages[]. message est null jusqu’à ce qu’un humain réponde, puis un seul message d’agent.
{
"success": true,
"data": {
"id": "64a1b2c3d4e5f6789012345",
"externalId": "ticket-123",
"status": "pending",
"message": null
}
}
Interroger une conversation
GET https://www.aidirectori.es/api/v1/support/conversations/:id — ou lister avec ?id=, ?externalId=, ou ?status=pending. Intervalle suggéré en attente : 5 à 15 secondes. Les résultats de liste hybrides omettent le tableau complet messages ; les résultats réservés aux humains renvoient la même forme légère que ask.
curl -s "https://www.aidirectori.es/api/v1/support/conversations/64a1b2c3d4e5f6789012345" \
-H "X-API-Key: YOUR_API_KEY"
Webhook lorsqu’une réponse est prête
Si webhookUrl est défini, nous envoyons un POST support.replied — même HMAC que directory Done. La charge utile hybride/IA utilise reply / replySource. Les clients réservés aux humains utilisent un conversation.message singulier avec role: "agent" et source: "human".
{
"event": "support.replied",
"occurredAt": "2026-09-09T09:01:00.000Z",
"conversation": {
"id": "64a1b2c3d4e5f6789012345",
"status": "answered",
"externalId": "ticket-123",
"reply": "You can cancel from Settings → Billing.",
"replySource": "human"
}
}
{
"event": "support.replied",
"occurredAt": "2026-09-11T12:00:00.000Z",
"conversation": {
"id": "64a1b2c3d4e5f6789012345",
"externalId": "ticket-123",
"status": "answered",
"message": {
"id": "...",
"role": "agent",
"source": "human",
"content": "Thanks — here's how to cancel…",
"createdAt": "2026-09-11T12:00:00.000Z"
}
}
}
Envoyez un e-mail à support@thedirectori.es pour une clé, une URL de webhook, un secret de signature ou un accès au support — ou faites une demande depuis Got a directory?.
Référence / Limites de débit
Limites de débit
Les clés standard obtiennent 10 requêtes par minute. Les clés premium en obtiennent 60. En-têtes sur chaque réponse.
Les limites sont par clé API, pas par IP — et REST et MCP puisent dans des budgets séparés, donc une rafale d’agent ne peut pas affamer vos scripts côté serveur.
| Clé | REST / minute | MCP / minute |
|---|---|---|
Standard (aid_ depuis le tableau de bord) | 10 | 30 |
| Premium (plan Catalog API payant, octroi admin, ou clé partenaire émise) | 60 | 120 |
Le budget MCP est le plus grand car les agents se déploient en parallèle : une question d’un utilisateur devient souvent plusieurs appels d’outils simultanés.
La poignée de main est gratuite
initialize, notifications/initialized, ping, et tools/list ne coûtent rien. Connecter un client, ou le redémarrer, ne dépense pas votre quota — seul tools/call le fait. Un corps de requête malformé n’est pas facturé non plus.
Chaque réponse inclut X-RateLimit-Limit, X-RateLimit-Remaining, et X-RateLimit-Reset. 429 envoie également Retry-After.
Passez à la version supérieure depuis votre tableau de bord développeur (9 $/mois). N’usurpez pas l’identité de robots de moteurs de recherche ou d’assistants pour vider le catalogue.
Besoin d’une limite plus élevée ? Envoyez un e-mail à support@thedirectori.es.
Les clés partenaire submit/support ont leurs propres limites d’écriture ; elles utilisent le budget catalogue premium lors de la lecture.
Référence / Erreurs
Erreurs
Forme d’erreur JSON et codes de statut HTTP.
{ "success": false, "error": "Tool not found." }
| HTTP | Signification |
|---|---|
| 400 | Requête invalide |
| 401 | Clé API manquante ou invalide |
| 403 | Clé valide mais fonctionnalité non activée |
| 404 | Outil, répertoire ou conversation introuvable |
| 429 | Limite de débit |
| 500 / 503 | Problème serveur ou base de données — réessayez |
MCP utilise des erreurs JSON-RPC (-32601 méthode introuvable, -32603 interne, et charges utiles d’outil isError).