Pilotez GnamiAI depuis n'importe où.
Une seule clé Bearer, du JSON sur HTTPS, et chaque endpoint qui
anime le tableau de bord. Construisez un bot Discord, un miroir
intelligent, un cron qui résume votre boîte courriel — même
surface que l'app web. Pas de SDK requis ; fetch
suffit.
1. Authentification
Chaque endpoint authentifié accepte une clé Bearer dans l'en-tête
Authorization :
Authorization: Bearer gnami_xxxxxxxxxxxxxxxxxxxxxx
Créez-en une dans le tableau de bord à Paramètres → Clés API. La clé complète n'est affichée qu'une seule fois à la création. Nous ne stockons que son haché scrypt — on ne peut pas la récupérer. Si elle est perdue, révoquez-la et créez-en une nouvelle.
Une clé porte la même autorité qu'une session navigateur pour l'espace propriétaire, à quelques exceptions près notées à la section 10.
2. Erreurs et limites de débit
Chaque erreur est un corps JSON avec error (code
machine) et message (humain). Le code HTTP suit la
sémantique habituelle :
400— corps de requête invalide401— clé Bearer manquante ou invalide402— fournisseur non configuré (aucune clé d'inférence) ou quota épuisé403— endpoint nécessite une session navigateur, pas une clé API404— ressource introuvable429— limite de débit. L'en-têteRetry-Afterdonne l'attente en secondes.502— fournisseur amont en échec503— dépendance niveau service manquante (ex. variables d'env Polar non configurées)
Limite sur /api/agent/turn : 20
tours par minute par espace, peu importe la clé qui les a
déclenchés. Le dépassement renvoie 429 + Retry-After: 60.
Les autres endpoints ne sont pas limités par appel aujourd'hui ;
le plafond budgétaire s'applique au coût d'inférence selon votre
plan dans Paramètres.
3. POST /api/agent/turn — piloter l'agent
Le moment principal. Envoie un tour à votre fournisseur
configuré, charge vos compétences et votre mémoire, exécute
optionnellement les blocs gnami-action émis par le
modèle, et retourne la réponse visible pour l'utilisateur.
Corps
{
"input": "string, requis, ≤ 8 000 caractères",
"history": [{ "role": "user"|"assistant", "content": "..." }, ...],
"subagentId": "uuid | null",
"attachments": [{ "name": "doc.pdf", "mimeType": "application/pdf", "data": "<base64>" }],
"audio_input": "<octets audio base64> (optionnel, déclenche la STT Whisper)"
}
Réponse (200)
{
"output": "string — la réponse de l'assistant",
"provider": "openai|anthropic|openrouter|ollama",
"model": "gpt-4o-mini",
"latencyMs": 1240,
"agentName": "default | <nom du sous-agent>",
"actions": [{ "type": "create_skill", "ok": true, "summary": "..." }],
"context": { "memoriesUsed": 0, "skillsUsed": 2, "historyMessages": 4, ... }
}
curl
curl https://gnamiai.live/api/agent/turn \
-H "Authorization: Bearer $GNAMI_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"Résume ma semaine."}'
Node
const res = await fetch("https://gnamiai.live/api/agent/turn", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.GNAMI_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ input: "Résume ma semaine." })
});
const { output } = await res.json();
console.log(output);
4. /api/skills — compétences de l'espace
Blocs Markdown injectés dans le prompt système au moment du
tour quand enabled = true.
GET /api/skills— liste les compétences possédées (contenu complet + entitlements du marketplace)POST /api/skills— corps{ name, content, enabled?, command_slug? }PATCH /api/skills/:id— mise à jour partielleDELETE /api/skills/:id— supprimer
Quotas : voir Paramètres → Compte, dépend de votre plan.
5. /api/subagents — spécialisations gérées
Personas nommés avec leur propre prompt système et un modèle
optionnel. Épinglez-en un dans le clavardage avec
/agent <nom> ou passez subagentId
à /api/agent/turn.
GET /api/subagents— listerPOST /api/subagents—{ name, description, systemPrompt, model? }PATCH /api/subagents/:id— mise à jour partielleDELETE /api/subagents/:id— supprimer
6. /api/crons — exécutions planifiées
Tours d'agent récurrents. Déclenchés par Vercel Cron à la
cadence définie par interval_minutes. L'agent
ramasse chaque cron dont next_run_at ≤ now().
GET /api/crons— lister avec dernier statut / sortiePOST /api/crons—{ name, prompt, interval_minutes, subagent_id? }PATCH /api/crons/:id— activer/désactiver, changer le prompt, etc.DELETE /api/crons/:id— supprimerPOST /api/crons/:id/run— déclencher un coup unique, en ignorant la planification
7. /api/approvals — portes HITL en attente
Actions destructrices que l'agent a émises mais ne peut pas
exécuter sans votre validation. Construisez une UI d'approbation
custom en interrogeant ?status=pending.
GET /api/approvals?status=pending|approved|rejected|expiredPOST /api/approvals/:id/resolve—{ decision: "approve"|"reject" }
8. /api/memory/tree — épisodes et mémoire long terme
Épisodes de conversation (résumés auto-générés de 2-3 phrases, 50 plus récents) plus le statut de connexion Mem0 si configuré.
GET /api/memory/tree
→ {
"episodes": [{ "id", "ts", "summary", "tokens" }, ...],
"mem0": { "connected": true|false, "scope": "..." }
}
9. Endpoints marketplace publics (sans auth)
N'importe qui peut les appeler — utile pour des indexeurs, des intégrations, ou un miroir du marketplace. Pas d'en-tête Bearer nécessaire.
GET /api/marketplace/stats— compteurs agrégés créateurs/listings/installsGET /api/marketplace/listings/all— toutes les listings publiéesGET /api/marketplace/listings/by-slug/:slug— détail listing + avis récents + notesGET /api/marketplace/listings/:listingId/reviews— liste complète des avis (max 50)GET /api/marketplace/creator/by-slug/:slug— profil créateur + ses listings
10. Endpoints inaccessibles aux clés API
Ceux-ci retournent 401 en auth Bearer même avec
une clé valide — ils nécessitent une vraie session navigateur.
L'intention est d'empêcher une clé fuitée de pouvoir détruire
l'espace ou s'auto-élever.
DELETE /api/account— suppression d'espacePOST /api/account/import— écrasement de l'espace par un dump JSONPOST /api/auth/google/link+/unlink— liaison de fournisseur d'identitéGET|POST|DELETE /api/settings/api-keys+/api-keys/:id— gestion des clés elles-mêmes
11. Recettes de bout en bout
Quatre scripts Node prêts à l'emploi. Affichage ou téléchargement
direct — ce sont des fichiers .mjs servis par le site :
marketplace-snapshot.mjs— récupère les stats publiques + liste chaque compétence publiée (sans auth)agent-turn.mjs— un tour authentifié en Bearerlist-skills.mjs— liste et imprime joliment les compétences de votre espacediscord-bot.mjs— bot Discord production-ready : reconnect automatique avec RESUME, historique par canal, file d'attente des tours (respecte les limites), logs JSON structurés, arrêt propre. Zéro dépendance npm.
Chacun fait moins de 100 lignes et tourne avec node script.mjs + la variable d'env GNAMI_KEY. Récupération rapide :
curl -O https://gnamiai.live/examples/agent-turn.mjs
export GNAMI_KEY=gnami_xxxxxxxxxxxxxxxxxxxxxx
node agent-turn.mjs "ping"
Ou lisez le README pour la configuration complète.
Construire l'intégration
Créez une clé dans Paramètres, copiez un des scripts d'exemple, changez trois lignes. Production-ready en moins de 10 minutes.