Aller au contenu principal
Documentation

API Moon AI.

Une API compatible OpenAI, paiement à l'usage en euros : une clé par workspace, les modèles publics, Moon 6 et les modèles auto-hébergés, recharge et factures, anonymisation Moon Blur avant l'envoi au modèle.

API Moon AI v1

Compatible OpenAI, paiement à l'usage en euros.

Démarrer en 30 secondes

Moon AI expose une API d'inférence compatible avec le SDK OpenAI. Pointez n'importe quel client OpenAI sur l'URL de base ci-dessous avec votre clé, et vous appelez les modèles depuis vos propres applications. La facturation est 100 % à l'usage : vous rechargez un solde en euros pour votre workspace, sans abonnement.

  • URL de base : https://api.realmoon.ai/v1
  • Authentification : Authorization: Bearer sk-moon-... (ou l'en-tête x-api-key).
  • Les clés se créent depuis le portail chat.realmoon.ai/settings/developer (propriétaire ou admin du workspace). La clé en clair n'est affichée qu'une seule fois à la création.

Confidentialité : Moon AI ne conserve pas le contenu des requêtes API et anonymise les données sensibles (Moon Blur) avant l'envoi au modèle. Détail complet dans la politique de confidentialité.

SDK & installation

L'API est compatible OpenAI : utilisez le SDK officiel OpenAI de votre langage, en pointant le base_url sur https://api.realmoon.ai/v1 et la clé sur votre clé sk-moon-. Aucun SDK propriétaire à installer.

Python

pip install openai

Node.js / TypeScript

npm install openai

Variables d'environnement

Conservez la clé dans une variable d'environnement, jamais en dur dans le code ni dans un dépôt Git.

export OPENAI_API_KEY="sk-moon-..."
export OPENAI_BASE_URL="https://api.realmoon.ai/v1"

Avec ces deux variables, les SDK OpenAI (Python, Node) sont configurés sans argument supplémentaire : OpenAI() suffit.

Exemples

curl

curl https://api.realmoon.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-moon-..." \
  -H "Content-Type: application/json" \
  -d '{"model": "anthropic/claude-sonnet-4.6", "messages": [{"role": "user", "content": "Bonjour"}]}'

Python (SDK openai)

from openai import OpenAI

client = OpenAI(
    base_url="https://api.realmoon.ai/v1",
    api_key="sk-moon-...",
)

resp = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.6",
    messages=[{"role": "user", "content": "Bonjour"}],
)
print(resp.choices[0].message.content)

Le streaming (stream=True) est supporté et renvoyé en SSE OpenAI standard.

Endpoints

Méthode Chemin Description
POST/v1/chat/completionsComplétion de chat compatible OpenAI (streaming + non-streaming).
GET/v1/modelsCatalogue des modèles disponibles, avec les prix.
GET/v1/creditsSolde du workspace.
GET/v1/generation?id=Coût + métadonnées d'une requête passée (en-tête X-Moon-Request-Id).

Les modèles exposés sont ceux qui sont actifs et publics dans Moon AI : modèles OpenRouter / OpenAI, modèles personnalisés (Moon 6) et modèles Ollama auto-hébergés. Les modèles à accès restreint ne sont jamais exposés.

Streaming

Passez stream: true pour recevoir la réponse en Server-Sent Events (SSE) au format OpenAI standard. Le coût final est réconcilié à la fin du flux.

Python

from openai import OpenAI

client = OpenAI(base_url="https://api.realmoon.ai/v1", api_key="sk-moon-...")

stream = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.6",
    messages=[{"role": "user", "content": "Ecris un haiku."}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")

Vision (entrée image)

Les modèles compatibles vision acceptent le format multimodal OpenAI : un message dont le content est une liste de parties text et image_url.

resp = client.chat.completions.create(
    model="openai/gpt-4o",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Decris cette image."},
            {"type": "image_url", "image_url": {"url": "https://..."}},
        ],
    }],
)

Tous les modèles ne supportent pas la vision : utilisez un modèle multimodal (par exemple openai/gpt-4o). Le catalogue /v1/models liste les modèles disponibles.

Gestion des erreurs

Enveloppe au format OpenAI : {"error": {"message", "type", "code"}}.

HTTP code Signification
401invalid_api_keyClé absente, inconnue, révoquée ou expirée.
402insufficient_creditsSolde trop bas, rechargez le workspace.
402spend_cap_exceededPlafond de dépense (heure / jour / mois) atteint.
403ip_not_allowedIP appelante hors de la liste autorisée de la clé.
403missing_scopeLa clé n'a pas le scope inference.
404model_not_publicLe modèle n'est pas disponible sur l'API.
429rate_limitedTrop de tentatives d'authentification depuis cette IP.
503pricing_unavailablePrix du modèle temporairement inconnu (on refuse plutôt que mal facturer).
503upstream_errorLe fournisseur en amont a échoué ; le pré-débit est remboursé.

Clés, idempotence & plafonds

Chaque clé porte :

  • scopes : inference est requis pour appeler /v1/chat/completions.
  • plafond de dépense (optionnel) : un plafond en euros par fenêtre glissante (heure, jour ou mois).
  • liste d'IP autorisées (optionnel) : plages CIDR ; les autres IP sont rejetées.
  • expiration (optionnel) : la clé cesse de fonctionner après sa date d'expiration.

Chaque complétion est facturée une seule fois contre une clé de requête dérivée côté serveur : une nouvelle tentative réseau ne double-facture jamais la même requête en cours.

Facturation à l'usage

  • Vous rechargez le montant en euros de votre choix (frais de recharge + TVA au paiement, via Stripe). Chaque recharge génère une facture PDF avec numéro légal et détail HT / TVA, consultable depuis le portail.
  • Chaque requête est pré-débitée au pire cas puis réconciliée au coût réel après la réponse : vous ne payez que ce que vous avez réellement consommé.
  • Les prix sont une marge sur le prix du modèle en amont ; ils peuvent évoluer avec lui. Le coût exact d'une requête est toujours disponible via /v1/generation?id=.
  • Recharge automatique (optionnelle) : rechargez automatiquement quand le solde passe sous un seuil que vous définissez, sur une carte enregistrée.
  • Plafonds de dépense par heure / jour / mois pour borner la dépense du workspace.

Prêt à intégrer ?

Créez votre clé et rechargez votre workspace depuis le portail développeur.