AI Directories

officiel

Recherchez 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_categories ou list_tags.
  • Trouver des annuaires de soumission — Recherchez des annuaires par nom, coût ou catégorie avec search_directories pour 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

Ouvrir dans Claude

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_

www.aidirectori.es/api/v1

MCPStreamable HTTP

api/mcp

OpenAPIspecification machine

openapi.json

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

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. 1 Obtenez votre clé API

    Allez sur le tableau de bord développeur et créez une clé API. Les clés commencent par aid_. 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. 2 Effectuez votre première requête

    Passez votre clé comme jeton Bearer dans l'en-tête Authorization. X-API-Key est é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 toujours 403 sur les points de terminaison partenaires lorsqu'elle est envoyée comme X-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. 3 Analysez la réponse

    Les lectures réussies renvoient { success: true, data }. Les points de terminaison de liste incluent également pagination — ses champs et les règles de limitation valent la peine d'être lus avant d'écrire une boucle de pagination. Surveillez X-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.

OutilRESTEntrée
search_toolsGET /toolsq, category, tag, pricing, featured, page, limit
get_top_toolsGET /tools/toplimit, category
get_toolGET /tools/{slug}slug
list_categoriesGET /categoriesq, limit
list_tagsGET /tagsq, limit
search_directoriesGET /directoriesq, category, cost, featured, page, limit
get_directoryGET /directories/{slug}slug
list_directory_categoriesGET /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érationMéthodeCheminAuthEntrée
search_tools Recherche par mot-clé avec filtres optionnels de catégorie, tag, tarification, et featured.GET/toolsBearerq, category, tag, pricing, featured, includeAdult, page, limit
get_top_tools Top N fiches par ouvertures — aucun mot-clé requis.GET/tools/topBearerlimit, category, includeAdult
list_categories Catégories d'outils IA avec comptes d'outils — à utiliser avant de filtrer une recherche.GET/categoriesBearerq, limit
list_tags Tags d'outils IA avec comptes d'outils.GET/tagsBearerq, limit
get_tool La fiche publique complète d'un outil IA.GET/tools/{slug}Bearerslug
search_directories Recherche d'annuaires de soumission par nom, catégorie, ou coût.GET/directoriesBearerq, category, cost, featured, page, limit
get_directory Le profil public complet d'un annuaire.GET/directories/{slug}Bearerslug
list_directory_categories Libellés de catégories d'annuaires pour la découverte de filtres.GET/directory-categoriesBearer—
submit_ai_tool Créer une fiche d'outil IA (et éventuellement mettre en file les soumissions d'annuaires).POST/submit-ai-toolX-API-Keyname, 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/statusX-API-Keyid | 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.

pageLa page que vous avez obtenue, base 1
limitÉléments par page réellement appliqués
totalÉléments correspondants sur toutes les pages
pagesceil(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.

RESTGET /categories
MCPtools/call → list_categories
AuthBearer
Entréeq, 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.

RESTGET /tools/top
MCPtools/call → get_top_tools
AuthBearer
Entréelimit, 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.

RESTGET /tools
MCPtools/call → search_tools
AuthBearer
Entréeq, 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.

RESTGET /tools/{slug}
MCPtools/call → get_tool
AuthBearer
Entréeslug
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.

RESTGET /tags
MCPtools/call → list_tags
AuthBearer
Entréeq, 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.

RESTGET /directories
MCPtools/call → search_directories
AuthBearer
Entréeq, 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.

RESTGET /directories/{slug}
MCPtools/call → get_directory
AuthBearer
Entréeslug
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.

RESTGET /directory-categories
MCPtools/call → list_directory_categories
AuthBearer
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).

RESTPOST /submit-ai-tool
MCP—
AuthX-API-Key
Entréename, 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é.

RESTGET /ai-tools/status
MCP—
AuthX-API-Key
Entréeid | 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.

RESTGET /tools
MCPsearch_tools
AuthBearer aid_
Entréeq, 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 :

ChampTypeNotes
idstringIdentifiant stable
slugstringUtilisez ceci pour /tools/{slug}
name, tagline, descriptionstring
urlstringLa fiche sur aidirectori.es
websitestringLe site propre du produit
categoryobject{ slug, name }, ou null
tagsarray[{ slug, name }]
pricingstringFREE | FREEMIUM | PAID
ratingnumber0 lorsqu'il n'est pas noté
opensnumberClics ; ce sur quoi /tools/top trie
featuredboolean
icon, framestringURLs d'images, nullable
founderName, locationstringNullable. Jamais d'e-mail du fondateur
domainRatingnumberNullable
isForSale, askingPriceboolean, numberFiches marquées pour acquisition
discountCode, affiliatestring, boolean
createdAt, updatedAtstringISO 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

RESTGET /directories
MCPsearch_directories
AuthBearer aid_
Entréeq, 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

ChampTypeNotes
id, slug, namestring
urlstringLe profil sur aidirectori.es
websitestringLe site propre de l'annuaire
iconstringNullable
coststringFree | Paid | Freemium
typestringType de lien
domainRatingnumberNullable — le nombre sur lequel la plupart trient
monthlyVisitsnumberNullable
requiresBadgebooleanS'ils exigent un badge de backlink
minimumPricenumber0 lorsqu'il est gratuit
submissionExperiencestringNullable
featuredboolean
categoriesarray[{ slug, name }]
smallDescriptionstringNullable
createdAt, updatedAtstringISO 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

  • name string Maximum 100 caractères.
  • website url URL publique du produit.
  • tagline string Maximum 200 caractères.
  • description string Ce que fait le produit.
  • category string Slug ou nom. Nous le mappons sur une catégorie existante.
  • pricing enum FREE PAID FREEMIUM La tarification propre du produit — pas le package d'annuaire.
  • founderName string Vous collectez ceci avant de faire le POST.
  • founderEmail email Vous collectez ceci. Jamais renvoyé sur les lectures publiques du catalogue. Ne l'envoyez pas depuis un navigateur.
  • tags string[] 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

  • paymentType enum starter pro premium Package 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.
  • slug string 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.
  • icon url Logo carré. Si omis, nous récupérons le favicon du site — envoyez le vôtre pour une meilleure fiche.
  • frame url Capture d'écran principale. Si omise, nous récupérons og:image — envoyez une capture du produit lorsque vous en avez une.
  • screenshots url[] 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

  • video url YouTube ou Vimeo.
  • socials object Clés vers URLs, par ex. { "twitter": "https://x.com/…" }.
  • features object Map de chaînes, par ex. { "Templates": "50+" }. Généré si omis.
  • faq array Si omis, extrait du site ou généré.
  • affiliate string Texte du programme d'affiliation.
  • affiliateLink url
  • discountCode string Code promo affiché sur la fiche.
  • location string Où l'entreprise est basée.
  • foundingDate string Date de fondation, forme libre.
  • isCustomer boolean S'ils sont déjà clients.
  • isLaunched boolean 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.completed Done 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.replied reply 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éthodePOST
Content-Typeapplication/json
AuthEn-tête HMAC — pas votre clé API

En-têtes

3

ChampTypeNotes

  • X-AI-Directories-Event string Quelle charge utile vous avez reçue. Branchez-vous là-dessus — la même URL reçoit les deux événements.
  • X-AI-Directories-Signature string sha256=<hex> HMAC du corps brut avec votre secret de signature. Présent lorsque nous avons émis un secret.
  • User-Agent string 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

  • question string La question du client. 4000 caractères maximum. message est également accepté.
  • conversationId string Continuez un fil que nous avons renvoyé précédemment.
  • externalId string Votre ticket ou identifiant de fil. Le réutiliser continue la même conversation.
  • customer object { name, email, id } facultatif pour le client final — pas le fondateur de submit.
  • metadata object 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 / minuteMCP / minute
Standard (aid_ depuis le tableau de bord)1030
Premium (plan Catalog API payant, octroi admin, ou clé partenaire émise)60120

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." }
HTTPSignification
400Requête invalide
401Clé API manquante ou invalide
403Clé valide mais fonctionnalité non activée
404Outil, répertoire ou conversation introuvable
429Limite de débit
500 / 503Problè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).