Documentation technique Moon AI
Introduction
L'API Moon AI fournit un point d'acces unifie vers plusieurs modeles d'IA (OpenAI, Anthropic, Google, Perplexity). Elle inclut Moon Guard pour l'anonymisation des donnees personnelles et Moon Auto pour le routage automatique vers le modele adapte a chaque requete.
https://api.realmoon.ai/v1Concepts principaux
| Concept | Description |
|---|---|
| Moon Guard | Pipeline d'anonymisation PII en 5 couches. Les donnees personnelles sont remplacees par des tokens avant envoi au modele, puis restaurees dans la reponse. |
| Moon Auto | Routage semantique des requetes. Analyse le contenu du prompt et selectionne le modele le plus pertinent (code, redaction, recherche, etc.). |
| Zero Data Retention | Aucune donnee utilisateur n'est conservee par les fournisseurs tiers. Accords ZDR actifs avec OpenAI, Anthropic, Google, OpenRouter et Fireworks AI. |
Authentification
Toutes les requetes necessitent une cle API. Les cles sont generees depuis le dashboard Moon AI.
Transmettez la cle dans le header Authorization de chaque requete :
curl https://api.realmoon.ai/v1/chat/completions \ -H "Authorization: Bearer mk_live_votre_cle_api" \ -H "Content-Type: application/json"
from moonai import MoonAI client = MoonAI( api_key="mk_live_votre_cle_api" )
import MoonAI from '@moonai/sdk'; const client = new MoonAI({ apiKey: 'mk_live_votre_cle_api' });
mk_test_ sont restreintes au mode sandbox.Types de cles
| Prefixe | Environnement | Description |
|---|---|---|
| mk_live_ | Production | Acces complet, facturation active |
| mk_test_ | Sandbox | Reponses simulees, pas de facturation |
Quick Start
Premiere requete en 3 etapes. Temps estime : 2 minutes.
1. Installer le SDK
pip install moonai
npm install @moonai/sdk
composer require moonai/moonai-php
2. Envoyer une requete
from moonai import MoonAI client = MoonAI(api_key="mk_live_votre_cle_api") response = client.chat.completions.create( model="auto", # Moon Auto selectionne le meilleur modele messages=[ {"role": "user", "content": "Explique-moi Moon Guard en 3 phrases."} ], guard=True # Active Moon Guard ) print(response.choices[0].message.content)
import MoonAI from '@moonai/sdk'; const client = new MoonAI({ apiKey: 'mk_live_votre_cle_api' }); const response = await client.chat.completions.create({ model: 'auto', messages: [ { role: 'user', content: 'Explique-moi Moon Guard en 3 phrases.' } ], guard: true }); console.log(response.choices[0].message.content);
curl -X POST https://api.realmoon.ai/v1/chat/completions \ -H "Authorization: Bearer mk_live_votre_cle_api" \ -H "Content-Type: application/json" \ -d '{ "model": "auto", "messages": [ {"role": "user", "content": "Explique-moi Moon Guard en 3 phrases."} ], "guard": true }'
3. Lire la reponse
{
"id": "chat_abc123def456",
"object": "chat.completion",
"model": "claude-opus-4-6",
"routed_by": "moon-auto",
"guard": {
"enabled": true,
"pii_detected": 0,
"pii_anonymized": 0
},
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "Moon Guard est un pipeline de protection..."
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 87,
"total_tokens": 111
}
}
Erreurs et codes HTTP
L'API retourne des codes HTTP standards. Chaque reponse d'erreur contient un objet JSON decrivant le probleme.
| Code | Type | Description |
|---|---|---|
| 200 | OK | Requete traitee |
| 400 | Bad Request | Parametre invalide ou manquant |
| 401 | Unauthorized | Cle API absente ou invalide |
| 403 | Forbidden | Plan insuffisant pour cette ressource |
| 429 | Rate Limited | Quota depasse. Consultez le header Retry-After |
| 500 | Server Error | Erreur interne. Contactez le support si le probleme persiste |
| 503 | Unavailable | Service temporairement indisponible, reessayez plus tard |
{
"error": {
"type": "invalid_request_error",
"message": "Le parametre 'model' est requis.",
"code": "missing_parameter",
"param": "model"
}
}
Limites de debit (Rate Limits)
Les quotas varient selon le plan. Chaque reponse HTTP contient les headers de suivi du quota.
| Plan | Requetes/min | Tokens/min | Requetes/jour |
|---|---|---|---|
| Free | 20 | 40 000 | 200 |
| Pro | 120 | 400 000 | 10 000 |
| Team | 500 | 2 000 000 | 50 000 |
| Enterprise | Custom | Custom | Illimite |
Headers de quota
| Header | Description |
|---|---|
| X-RateLimit-Limit | Nombre maximum de requetes par minute |
| X-RateLimit-Remaining | Requetes restantes dans la fenetre courante |
| X-RateLimit-Reset | Timestamp Unix de remise a zero du compteur |
| Retry-After | Delai en secondes avant la prochaine tentative (present si 429) |
Chat Completions API
Genere une reponse a partir d'une liste de messages. Compatible avec Moon Auto (routage) et Moon Guard (anonymisation).
Parametres (body JSON)
| Parametre | Type | Description |
|---|---|---|
| model requis | string | Identifiant du modele, ou "auto" pour le routage Moon Auto. Valeurs : "claude-opus-4-6", "gpt-5.4", "moon-1", etc. |
| messages requis | array | Liste de messages. Chaque objet contient un role ("system", "user", "assistant") et un content. |
| guard | boolean | Active l'anonymisation PII via Moon Guard. Default : true |
| stream | boolean | Active le mode streaming SSE. Default : false |
| temperature | number | Controle de la variabilite des reponses (0.0 a 2.0). Default : 1.0 |
| max_tokens | integer | Limite de tokens en sortie. Default : valeur du modele |
| top_p | number | Nucleus sampling (0.0 a 1.0). Default : 1.0 |
| stop | string | array | Sequences d'arret de la generation. 4 sequences maximum. |
response = client.chat.completions.create( model="auto", messages=[ {"role": "system", "content": "Tu es un assistant technique."}, {"role": "user", "content": "Comment deployer une app Next.js sur Vercel ?"} ], guard=True, temperature=0.7, max_tokens=2048 )
const response = await client.chat.completions.create({ model: 'auto', messages: [ { role: 'system', content: 'Tu es un assistant technique.' }, { role: 'user', content: 'Comment deployer une app Next.js sur Vercel ?' } ], guard: true, temperature: 0.7, maxTokens: 2048 });
curl -X POST https://api.realmoon.ai/v1/chat/completions \ -H "Authorization: Bearer mk_live_..." \ -H "Content-Type: application/json" \ -d '{ "model": "auto", "messages": [ {"role": "system", "content": "Tu es un assistant technique."}, {"role": "user", "content": "Comment deployer une app Next.js sur Vercel ?"} ], "guard": true, "temperature": 0.7, "max_tokens": 2048 }'
Streaming SSE
Le mode streaming transmet la reponse token par token via Server-Sent Events. Utile pour afficher les reponses au fil de la generation.
stream = client.chat.completions.create( model="auto", messages=[{"role": "user", "content": "Ecris un poeme sur la lune."}], stream=True ) for chunk in stream: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="")
const stream = await client.chat.completions.create({ model: 'auto', messages: [{ role: 'user', content: 'Ecris un poeme sur la lune.' }], stream: true }); for await (const chunk of stream) { const content = chunk.choices[0]?.delta?.content; if (content) process.stdout.write(content); }
data: {json}\n\n. Le flux se termine par data: [DONE]. Moon Guard reste actif en streaming. Les PII sont anonymisees avant l'envoi du premier chunk.Modeles disponibles
Retourne la liste des modeles accessibles via l'API Moon AI.
| Modele | Fournisseur | Usage principal | Contexte |
|---|---|---|---|
| auto | Moon Auto | Routage automatique selon le contenu | - |
| moon-1 | Moon AI | Redaction, francais, creativite | 128K |
| claude-opus-4-6 | Anthropic | Code, raisonnement complexe | 200K |
| claude-sonnet-4-6 | Anthropic | Usage general, temps de reponse court | 200K |
| gpt-5.4 | OpenAI | Analyse documentaire | 128K |
| gpt-4.1 | OpenAI | Usage general | 128K |
| gemini-2.5-pro | Multimodal, contexte long | 1M | |
| perplexity-sonar | Perplexity | Recherche web en temps reel | 128K |
Generation de documents
Genere des fichiers PDF, DOCX, PPTX ou XLSX a partir d'un prompt texte ou d'un identifiant de template.
Parametres
| Parametre | Type | Description |
|---|---|---|
| prompt requis | string | Description textuelle du document a generer |
| format requis | string | Format de sortie : "pdf", "docx", "pptx", "xlsx" |
| template | string | Identifiant du template (optionnel) |
| language | string | Code langue du document. Default : "fr" |
| guard | boolean | Anonymisation PII via Moon Guard. Default : true |
doc = client.documents.generate( prompt="Business plan pour une startup SaaS en cybersecurite", format="pdf", language="fr" ) # Telecharger le fichier with open("business-plan.pdf", "wb") as f: f.write(doc.content)
const doc = await client.documents.generate({ prompt: 'Business plan pour une startup SaaS en cybersecurite', format: 'pdf', language: 'fr' }); // Sauvegarder le fichier await fs.promises.writeFile('business-plan.pdf', doc.content);
Moon Guard API (anonymisation PII)
Moon Guard detecte et remplace les informations personnelles (PII) en 5 couches de traitement avant transmission au modele IA.
Les 5 couches du pipeline
Endpoint d'anonymisation
result = client.guard.anonymize( text="Jean Dupont habite au 12 rue de la Paix, Paris. Son email est [email protected]" ) print(result.anonymized_text) # "[PERSON_1] habite au [ADDRESS_1]. Son email est [EMAIL_1]" print(result.entities) # [{"type": "PERSON", "original": "Jean Dupont", "token": "PERSON_1"}, ...] # Restaurer les donnees originales restored = client.guard.restore( text=result.anonymized_text, session_id=result.session_id )
curl -X POST https://api.realmoon.ai/v1/guard/anonymize \ -H "Authorization: Bearer mk_live_..." \ -H "Content-Type: application/json" \ -d '{ "text": "Jean Dupont habite au 12 rue de la Paix, Paris." }'
Types de PII pris en charge
| Type | Exemples | Token |
|---|---|---|
| PERSON | Noms, prenoms | [PERSON_N] |
| Adresses email | [EMAIL_N] | |
| PHONE | Numeros de telephone | [PHONE_N] |
| ADDRESS | Adresses postales | [ADDRESS_N] |
| IBAN | Numeros de compte bancaire | [IBAN_N] |
| SSN | Numeros de securite sociale | [SSN_N] |
| PASSPORT | Numeros de passeport | [PASSPORT_N] |
| COMPANY | Noms d'entreprises | [COMPANY_N] |
Moon Auto (routage semantique)
Avec model: "auto", Moon Auto analyse le contenu de chaque requete et la dirige vers le modele le plus pertinent.
Regles de routage
# Utiliser Moon Auto (recommande) response = client.chat.completions.create(model="auto", ...) # Forcer un modele specifique response = client.chat.completions.create(model="claude-opus-4-6", ...) # La reponse indique le modele utilise print(response.model) # "claude-opus-4-6" print(response.routed_by) # "moon-auto" ou "user"
Moon CLI (assistant terminal)
Moon CLI est un agent de code IA en ligne de commande. Compatible multi-provider, il integre 10 outils (lecture, ecriture, shell, recherche), le streaming temps reel, les serveurs MCP et la mise a jour automatique.
Installation
# Installation via pip (recommande) pip install moon-cli # Lancer Moon CLI moon
# Installation depuis les sources git clone https://github.com/stellarrstudio/moon-cli.git cd moon-cli pip install -e . # Lancer Moon CLI moon
# Installation isolee via pipx pipx install moon-cli # Lancer Moon CLI moon
Authentification
Au premier lancement, Moon CLI demande la cle API et l'URL du provider. La configuration peut aussi se faire via variables d'environnement ou fichier .env.
# Le premier lancement lance la configuration moon ● M O O N v0.1.0 Stellarr Studio URL de l'API: https://api.openai.com/v1 Cle API: sk-... Modele: gpt-4o ✓ Configuration sauvegardee
# Variables d'environnement (priorite maximale) export MOON_API_KEY="sk-..." export MOON_API_URL="https://api.openai.com/v1" export MOON_MODEL="gpt-4o" # Ou configurer via la commande /login moon ❯ /login
# Fichier .env a la racine de votre projet MOON_API_KEY=sk-... MOON_API_URL=https://api.openai.com/v1 MOON_MODEL=gpt-4o
Providers compatibles
| Provider | URL de l'API | Modeles |
|---|---|---|
| OpenAI | https://api.openai.com/v1 | gpt-4o, gpt-4.1, o3, o4-mini |
| Anthropic | https://api.anthropic.com/v1 | claude-sonnet-4, claude-opus-4 |
| DeepSeek | https://api.deepseek.com/v1 | deepseek-chat, deepseek-reasoner |
https://generativelanguage.googleapis.com/v1beta | gemini-2.5-pro | |
| Mistral | https://api.mistral.ai/v1 | mistral-large-latest |
| OpenRouter | https://openrouter.ai/api/v1 | tous les modeles |
Liste des commandes
Les commandes s'utilisent avec le prefixe / dans le chat interactif.
| Commande | Description |
|---|---|
| /help | Affiche l'aide |
| /model <id> | Change le modele actif |
| /permissions <mode> | Definit le mode : yolo, normal, plan |
| /tools | Liste les outils disponibles |
| /init | Genere un fichier MOON.md pour le projet courant |
| /plan <tache> | Planifie les actions avant execution, validation manuelle requise |
| /undo | Annule la derniere modification de fichier |
| /mcp | Gere les serveurs MCP |
| /update | Verifie et installe les mises a jour |
| /new | Demarre une nouvelle conversation, efface l'historique |
| /retry | Renvoie le dernier message |
| /save <nom> | Sauvegarde la conversation courante |
| /load <nom> | Charge une conversation sauvegardee |
| /config set <k> <v> | Modifie une option de configuration |
| /status | Affiche l'etat de la session (modele, tokens, duree) |
| /usage | Affiche le detail des tokens consommes |
| /context | Affiche la fenetre de contexte |
| /doctor | Lance un diagnostic complet |
| /git | Affiche l'etat du depot Git |
| /diff | Affiche le git diff courant |
| /export <nom> | Exporte la conversation en fichier texte |
Raccourcis clavier
| Raccourci | Description |
|---|---|
| !commande | Execute une commande shell |
| @fichier | Injecte le contenu d'un fichier dans le prompt |
| \+Enter | Saut de ligne (mode multiligne) |
| Esc+Esc | Efface la ligne ou interrompt le streaming |
| Ctrl+L | Vide l'ecran |
Outils disponibles
10 outils sont integres. L'IA les utilise selon le contexte. En mode normal, les outils d'ecriture et d'execution demandent confirmation.
| Outil | Description | Confirmation |
|---|---|---|
| read_file | Lit un fichier avec numeros de ligne | Non |
| write_file | Cree ou remplace un fichier, cree les dossiers parents | Oui |
| edit_file | Modifie un fichier par remplacement exact de texte | Oui |
| execute_command | Execute une commande shell (bash/cmd) | Oui |
| glob_files | Recherche de fichiers par pattern glob | Non |
| grep_search | Recherche par regex dans le contenu des fichiers | Non |
| list_directory | Liste le contenu d'un dossier (plat ou arborescent) | Non |
| web_search | Recherche web via Brave Search | Non |
| web_fetch | Recupere le contenu d'une URL | Non |
| dispatch_agent | Lance un sous-agent autonome pour les taches longues | Non |
Configuration
La configuration est stockee dans ~/.moon-cli/config.json. Modifiable via /config set ou par edition directe du fichier.
{
"api_url": "https://api.openai.com/v1",
"api_key": "sk-...",
"model": "gpt-4o",
"temperature": 0.7,
"max_tokens": 8192,
"permission_mode": "normal",
"tools_enabled": true,
"max_history_messages": 100
}
Flags de lancement
Ces options surchargent la configuration au demarrage :
# Changer de modele moon --model claude-sonnet-4-20250514 # Mode non-interactif (une seule question) moon -p "explique ce code" # YOLO mode — tout approuver automatiquement moon --yolo # Mode lecture seule — aucune modification moon --plan # Changer de repertoire de travail moon -C ~/projects/my-app # Voir la version moon --version
Fichier MOON.md
La commande /init cree un fichier MOON.md a la racine du projet. Son contenu est automatiquement injecte dans le contexte du modele. Il decrit la stack, les conventions et la structure du code.
Modes de permission
Trois niveaux de securite controlent les actions autorisees :
| Mode | Comportement | Usage |
|---|---|---|
| normal | Confirmation requise avant chaque ecriture de fichier et execution shell | Mode par defaut, usage quotidien |
| yolo | Toutes les actions sont approuvees automatiquement, aucune confirmation | Contexte de confiance, execution rapide |
| plan | Lecture seule. Aucune ecriture, modification ou execution autorisee | Exploration, analyse, review de code |
# Dans le chat ❯ /permissions yolo ❯ /permissions plan ❯ /permissions normal # Au lancement moon --yolo moon --plan
Serveurs MCP
Moon CLI prend en charge le Model Context Protocol pour etendre ses capacites via des serveurs externes. Les outils MCP sont injectes dans la boucle agentique a chaque session.
# Voir les templates disponibles ❯ /mcp add # Ajouter un serveur depuis un template ❯ /mcp add brave-search ❯ /mcp add github ❯ /mcp add filesystem # Ajouter un serveur custom ❯ /mcp add mon-serveur npx -y @mon/mcp-server # Demarrer / arreter ❯ /mcp start brave-search ❯ /mcp stop brave-search # Voir les serveurs configures ❯ /mcp list
Templates MCP fournis
| Serveur | Description |
|---|---|
| brave-search | Recherche web via Brave Search API |
| filesystem | Acces fichiers etendu |
| github | GitHub : issues, PRs, repos |
| memory | Memoire persistante entre sessions |
| puppeteer | Navigation web avec Puppeteer |
| sqlite | Base de donnees SQLite |
Fichier de configuration MCP : ~/.moon-cli/mcp.json.
Mise a jour
La commande /update verifie la derniere version et propose l'installation. La mise a jour peut aussi se faire via pip.
# Dans le chat interactif ❯ /update verification des mises a jour... ● Mise a jour disponible installee v0.1.0 disponible v0.2.0 installer ? [Y/n] y ✓ Moon CLI mis a jour → v0.2.0 redemarrez Moon CLI pour appliquer # Ou via pip directement pip install --upgrade moon-cli
SDK officiels
Trois SDK sont maintenus pour Python, Node.js/TypeScript et PHP.
Python SDK
# Installation pip install moonai # Usage from moonai import MoonAI client = MoonAI() # Utilise MOON_API_KEY env var # Chat response = client.chat.completions.create( model="auto", messages=[{"role": "user", "content": "Hello Moon!"}] ) # Async from moonai import AsyncMoonAI async_client = AsyncMoonAI() response = await async_client.chat.completions.create(...)
Node.js / TypeScript SDK
// Installation: npm install @moonai/sdk import MoonAI from '@moonai/sdk'; const client = new MoonAI(); // Uses MOON_API_KEY env var // Chat completion const response = await client.chat.completions.create({ model: 'auto', messages: [{ role: 'user', content: 'Hello Moon!' }] }); // Streaming const stream = await client.chat.completions.create({ model: 'auto', messages: [{ role: 'user', content: 'Streaming test' }], stream: true }); for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content ?? ''); }
PHP SDK
// Installation: composer require moonai/moonai-php use MoonAI\Client; $client = new Client(getenv('MOON_API_KEY')); $response = $client->chat->completions->create([ 'model' => 'auto', 'messages' => [ ['role' => 'user', 'content' => 'Hello Moon!'] ], 'guard' => true ]); echo $response->choices[0]->message->content;
Webhooks
Les webhooks notifient votre serveur en temps reel lors d'evenements sur votre compte Moon AI.
Configuration
Les webhooks se configurent depuis le dashboard ou par appel API :
webhook = client.webhooks.create( url="https://votre-app.com/webhooks/moon", events=[ "chat.completion.created", "document.generated", "guard.pii_detected" ] ) print(webhook.secret) # whsec_... pour verifier les signatures
Types d'evenements
| Event | Description |
|---|---|
| chat.completion.created | Completion generee |
| chat.completion.failed | Completion echouee |
| document.generated | Document genere |
| guard.pii_detected | PII detectees par Moon Guard |
| guard.pii_blocked | Requete bloquee par Moon Guard |
| usage.limit_reached | Quota atteint |
| api_key.created | Cle API creee |
| api_key.revoked | Cle API revoquee |
Verification des signatures
Chaque requete webhook contient un header X-Moon-Signature (HMAC-SHA256). Validez-le avant de traiter le payload.
import hmac, hashlib def verify_signature(payload, signature, secret): expected = hmac.new( secret.encode(), payload.encode(), hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature)
import crypto from 'crypto'; function verifySignature(payload, signature, secret) { const expected = crypto .createHmac('sha256', secret) .update(payload) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(signature) ); }
Historique des versions
- Version stable de l'API Moon AI v1
- Moon Guard : pipeline d'anonymisation PII en 5 couches
- Moon Auto : routage semantique des requetes
- Documents API : generation PDF, DOCX, PPTX, XLSX
- SDK Python, Node.js et PHP
- Moon CLI v0.1.0 : agent de code IA en terminal (pip install moon-cli)
- Webhooks : notifications temps reel
- Beta publique de l'API
- Chat Completions, support multi-modeles
- Moon Guard v0.9, 3 couches
- SDK Python (beta)
- Alpha privee, premiers testeurs internes
- Prototype Moon Guard
- Infrastructure OVHcloud France
Obtenez votre cle API et envoyez votre premiere requete.