API publique & serveur MCP
Génère des cours visuels ToExplain depuis ton propre code ou ton client MCP. L'authentification se fait par clé API et chaque génération débite les tokens de ton compte.
Introduction
L'API publique expose le cœur de ToExplain : transformer un sujet en fiches pédagogiques visuelles (affiches 16:9). Elle est pensée pour être appelée depuis un script, un backend ou un client MCP.
- URL de base :
https://api.toexplain.app(ou ton instance localehttp://localhost:8080) - Préfixe :
/api/public/v1 - Facturation : chaque génération débite les tokens de ton compte (mêmes règles que dans l'app : filigrane sur le plan gratuit, erreur si solde insuffisant).
- Le modèle IA est choisi côté serveur : tu n'as rien à configurer.
Créer une clé API
Va dans Réglages → API & MCP, puis crée une clé. Le secret complet n'est affiché qu'une seule fois : copie-le immédiatement.
Toutes les requêtes publiques portent l'en-tête :
Authorization: Bearer tex_live_...Garde ta clé secrète. Elle est stockée hachée côté serveur et donne accès à tes tokens. Tu peux la révoquer à tout moment depuis les Réglages.
Temps de génération
La génération est longue. Une fiche prend une à deux minutes. Un cours complet de 8 fiches peut facilement atteindre ~10 minutes. Prévois un polling patient et un timeout d'au moins 15 minutes.
L'appel de génération répond immédiatement (202) avec un identifiant de job. C'est le traitement en arrière-plan (planification, storyboard, génération d'images) qui prend du temps.
Endpoints
| Méthode | Chemin | Rôle |
|---|---|---|
| POST | /api/public/v1/courses/generate | Lance une génération |
| GET | /api/public/v1/jobs/{jobID} | Statut du job |
| GET | /api/public/v1/courses/{courseID} | Récupère le cours |
| GET | /api/public/v1/wallet | Solde de tokens |
Lancer une génération
curl -X POST https://api.toexplain.app/api/public/v1/courses/generate \
-H "Authorization: Bearer tex_live_..." \
-H "Content-Type: application/json" \
-d '{
"topic": "Comment fonctionne le DNS",
"language": "fr",
"sheetCount": 3
}'Paramètres :
topic— sujet à expliquer (requis)language—frouensheetCount— nombre de fiches (1 à 8)audience— public visé (optionnel)renderMode—posteroueditable
Réponse immédiate (202) :
{
"course": { "id": "c_...", "status": "generating" },
"job": { "id": "j_...", "status": "queued" },
"tokenCost": 3
}Flux de génération
Comme la génération est asynchrone, tu enchaînes trois étapes :
- 1. POST generate → récupère
job.id+course.id - 2. GET du job toutes les 2–3 s jusqu'à
status: "completed"ou"failed" - 3. GET du cours pour lire le titre et les URLs d'affiches
# 1. lancer
JOB=$(curl -s -X POST .../api/public/v1/courses/generate \
-H "Authorization: Bearer tex_live_..." \
-d '{"topic":"DNS","sheetCount":3}' | jq -r .job.id)
# 2. poller (patiemment : jusqu'à ~10 min)
while true; do
STATUS=$(curl -s .../api/public/v1/jobs/$JOB \
-H "Authorization: Bearer tex_live_..." | jq -r .status)
[ "$STATUS" = "completed" ] && break
[ "$STATUS" = "failed" ] && exit 1
sleep 3
doneServeur MCP
Le binaire MCP expose l'API publique comme outils dans Cursor, Claude Desktop et autres clients MCP. Il tourne en local (stdio) et utilise ta clé API.
Compiler
cd apps/api
go build -o bin/toexplain-mcp ./cmd/mcpConfiguration (mcp.json)
{
"mcpServers": {
"toexplain": {
"command": "/chemin/absolu/.../apps/api/bin/toexplain-mcp",
"env": {
"TOEXPLAIN_API_KEY": "tex_live_...",
"TOEXPLAIN_API_URL": "http://localhost:8080"
}
}
}
}Outils exposés :
generate_course— génère un cours et attend la fin (jusqu'à 20 min)get_balance— solde de tokens et planget_course— récupère un cours par ID
Erreurs
Toutes les erreurs suivent ce format :
{
"error": {
"code": "insufficient_tokens",
"message": "Tokens insuffisants : cette génération coûte 3 token(s)."
}
}| Statut | Code | Signification |
|---|---|---|
| 401 | invalid_api_key | Clé absente, invalide ou révoquée |
| 402 | insufficient_tokens | Solde de tokens insuffisant |
| 422 | validation_error | Paramètres de génération invalides |
| 404 | not_found | Job ou cours introuvable |