Aller au contenu principal
-- jours
:
-- heures
:
-- min
:
-- sec
Moon AI prépare sa plus grosse mise à jour 🚀 — la bêta ouverte reste disponible. Accédez à la bêta
Introduction

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.

Base URL. Toutes les requetes utilisent ce prefixe :
https://api.realmoon.ai/v1

Concepts principaux

ConceptDescription
Moon GuardPipeline d'anonymisation PII en 5 couches. Les donnees personnelles sont remplacees par des tokens avant envoi au modele, puis restaurees dans la reponse.
Moon AutoRoutage semantique des requetes. Analyse le contenu du prompt et selectionne le modele le plus pertinent (code, redaction, recherche, etc.).
Zero Data RetentionAucune 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'
});
Ne commitez jamais votre cle API dans le code source. Stockez-la dans une variable d'environnement. Les cles prefixees mk_test_ sont restreintes au mode sandbox.

Types de cles

PrefixeEnvironnementDescription
mk_live_ProductionAcces complet, facturation active
mk_test_SandboxReponses 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

200 application/json
{
  "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.

CodeTypeDescription
200OKRequete traitee
400Bad RequestParametre invalide ou manquant
401UnauthorizedCle API absente ou invalide
403ForbiddenPlan insuffisant pour cette ressource
429Rate LimitedQuota depasse. Consultez le header Retry-After
500Server ErrorErreur interne. Contactez le support si le probleme persiste
503UnavailableService temporairement indisponible, reessayez plus tard
Exemple d'erreur
{
  "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.

PlanRequetes/minTokens/minRequetes/jour
Free2040 000200
Pro120400 00010 000
Team5002 000 00050 000
EnterpriseCustomCustomIllimite

Headers de quota

HeaderDescription
X-RateLimit-LimitNombre maximum de requetes par minute
X-RateLimit-RemainingRequetes restantes dans la fenetre courante
X-RateLimit-ResetTimestamp Unix de remise a zero du compteur
Retry-AfterDelai en secondes avant la prochaine tentative (present si 429)

Chat Completions API

POST /v1/chat/completions

Genere une reponse a partir d'une liste de messages. Compatible avec Moon Auto (routage) et Moon Guard (anonymisation).

Parametres (body JSON)

ParametreTypeDescription
model requisstringIdentifiant du modele, ou "auto" pour le routage Moon Auto. Valeurs : "claude-opus-4-6", "gpt-5.4", "moon-1", etc.
messages requisarrayListe de messages. Chaque objet contient un role ("system", "user", "assistant") et un content.
guardbooleanActive l'anonymisation PII via Moon Guard. Default : true
streambooleanActive le mode streaming SSE. Default : false
temperaturenumberControle de la variabilite des reponses (0.0 a 2.0). Default : 1.0
max_tokensintegerLimite de tokens en sortie. Default : valeur du modele
top_pnumberNucleus sampling (0.0 a 1.0). Default : 1.0
stopstring | arraySequences 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);
}
Chaque evenement SSE suit le format 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

GET /v1/models

Retourne la liste des modeles accessibles via l'API Moon AI.

ModeleFournisseurUsage principalContexte
autoMoon AutoRoutage automatique selon le contenu-
moon-1Moon AIRedaction, francais, creativite128K
claude-opus-4-6AnthropicCode, raisonnement complexe200K
claude-sonnet-4-6AnthropicUsage general, temps de reponse court200K
gpt-5.4OpenAIAnalyse documentaire128K
gpt-4.1OpenAIUsage general128K
gemini-2.5-proGoogleMultimodal, contexte long1M
perplexity-sonarPerplexityRecherche web en temps reel128K
Zero Data Retention. Tous les fournisseurs operent sous contrat ZDR. Aucune donnee n'est conservee apres traitement.

Generation de documents

POST /v1/documents/generate

Genere des fichiers PDF, DOCX, PPTX ou XLSX a partir d'un prompt texte ou d'un identifiant de template.

Parametres

ParametreTypeDescription
prompt requisstringDescription textuelle du document a generer
format requisstringFormat de sortie : "pdf", "docx", "pptx", "xlsx"
templatestringIdentifiant du template (optionnel)
languagestringCode langue du document. Default : "fr"
guardbooleanAnonymisation 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

1
Scan
2
Tokenisation
3
Leurres
4
Chiffrement
5
Restructuration

Endpoint d'anonymisation

POST /v1/guard/anonymize
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

TypeExemplesToken
PERSONNoms, prenoms[PERSON_N]
EMAILAdresses email[EMAIL_N]
PHONENumeros de telephone[PHONE_N]
ADDRESSAdresses postales[ADDRESS_N]
IBANNumeros de compte bancaire[IBAN_N]
SSNNumeros de securite sociale[SSN_N]
PASSPORTNumeros de passeport[PASSPORT_N]
COMPANYNoms 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

Code
Claude Opus 4.6
Redaction
Moon-1
Recherche web
Perplexity Sonar
Documents
GPT-5.4
Forcer un modele specifique
# 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
💡 Prerequis : Python 3.10+, une cle API d'un provider compatible OpenAI (OpenAI, Anthropic, DeepSeek, Google, Mistral, etc.).

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

ProviderURL de l'APIModeles
OpenAIhttps://api.openai.com/v1gpt-4o, gpt-4.1, o3, o4-mini
Anthropichttps://api.anthropic.com/v1claude-sonnet-4, claude-opus-4
DeepSeekhttps://api.deepseek.com/v1deepseek-chat, deepseek-reasoner
Googlehttps://generativelanguage.googleapis.com/v1betagemini-2.5-pro
Mistralhttps://api.mistral.ai/v1mistral-large-latest
OpenRouterhttps://openrouter.ai/api/v1tous les modeles
💡 Tout endpoint compatible OpenAI est pris en charge. Il suffit de modifier l'URL et la cle API.

Liste des commandes

Les commandes s'utilisent avec le prefixe / dans le chat interactif.

CommandeDescription
/helpAffiche l'aide
/model <id>Change le modele actif
/permissions <mode>Definit le mode : yolo, normal, plan
/toolsListe les outils disponibles
/initGenere un fichier MOON.md pour le projet courant
/plan <tache>Planifie les actions avant execution, validation manuelle requise
/undoAnnule la derniere modification de fichier
/mcpGere les serveurs MCP
/updateVerifie et installe les mises a jour
/newDemarre une nouvelle conversation, efface l'historique
/retryRenvoie le dernier message
/save <nom>Sauvegarde la conversation courante
/load <nom>Charge une conversation sauvegardee
/config set <k> <v>Modifie une option de configuration
/statusAffiche l'etat de la session (modele, tokens, duree)
/usageAffiche le detail des tokens consommes
/contextAffiche la fenetre de contexte
/doctorLance un diagnostic complet
/gitAffiche l'etat du depot Git
/diffAffiche le git diff courant
/export <nom>Exporte la conversation en fichier texte

Raccourcis clavier

RaccourciDescription
!commandeExecute une commande shell
@fichierInjecte le contenu d'un fichier dans le prompt
\+EnterSaut de ligne (mode multiligne)
Esc+EscEfface la ligne ou interrompt le streaming
Ctrl+LVide l'ecran
Moon CLI v0.1.0
$ moon

   M O O N  v0.1.0
    Stellarr Studio

  gpt-4o · main (clean) · python · NORMAL
  ~/projects/my-app

   Refactorise ce composant React avec des hooks

   Lecture Dashboard.tsx
   Modification Dashboard.tsx

    @@ -12,8 +12,15 @@
      12  + const [data, setData] = useState(null)
      13  + const [loading, setLoading] = useState(true)
      14  - class Dashboard extends Component {

   Ecriture useDashboard.ts (245 chars)

  312in · 487out · 799 total
  ✦ 2.3s

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.

OutilDescriptionConfirmation
read_fileLit un fichier avec numeros de ligneNon
write_fileCree ou remplace un fichier, cree les dossiers parentsOui
edit_fileModifie un fichier par remplacement exact de texteOui
execute_commandExecute une commande shell (bash/cmd)Oui
glob_filesRecherche de fichiers par pattern globNon
grep_searchRecherche par regex dans le contenu des fichiersNon
list_directoryListe le contenu d'un dossier (plat ou arborescent)Non
web_searchRecherche web via Brave SearchNon
web_fetchRecupere le contenu d'une URLNon
dispatch_agentLance un sous-agent autonome pour les taches longuesNon

Configuration

La configuration est stockee dans ~/.moon-cli/config.json. Modifiable via /config set ou par edition directe du fichier.

~/.moon-cli/config.json
{
  "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 :

Flags de lancement
# 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 :

ModeComportementUsage
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
Changer de mode
# 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.

Gestion des serveurs MCP
# 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

ServeurDescription
brave-searchRecherche web via Brave Search API
filesystemAcces fichiers etendu
githubGitHub : issues, PRs, repos
memoryMemoire persistante entre sessions
puppeteerNavigation web avec Puppeteer
sqliteBase 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.

Mise a jour
# 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
💡 Un indicateur de mise a jour s'affiche au demarrage si une nouvelle version existe. Le cache de verification expire apres 1 heure.

SDK officiels

Trois SDK sont maintenus pour Python, Node.js/TypeScript et PHP.

Python SDK

Installation & Usage
# 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 & Usage
// 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 & Usage
// 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 :

Creer un webhook
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

EventDescription
chat.completion.createdCompletion generee
chat.completion.failedCompletion echouee
document.generatedDocument genere
guard.pii_detectedPII detectees par Moon Guard
guard.pii_blockedRequete bloquee par Moon Guard
usage.limit_reachedQuota atteint
api_key.createdCle API creee
api_key.revokedCle 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

v1.0.0 Latest 9 mars 2026
  • 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
v0.9.0-beta 15 fevrier 2026
  • Beta publique de l'API
  • Chat Completions, support multi-modeles
  • Moon Guard v0.9, 3 couches
  • SDK Python (beta)
v0.1.0-alpha 5 janvier 2026
  • Alpha privee, premiers testeurs internes
  • Prototype Moon Guard
  • Infrastructure OVHcloud France

Obtenez votre cle API et envoyez votre premiere requete.

Creer un compte