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êtex-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é.
## 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é (/confidentialite).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/completions | Complétion de chat compatible OpenAI (streaming + non-streaming). |
| GET | /v1/models | Catalogue des modèles disponibles, avec les prix. |
| GET | /v1/credits | Solde 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.
## Endpoints | Méthode | Chemin | Description | |---|---|---| | POST | /v1/chat/completions | Complétion de chat compatible OpenAI (streaming + non-streaming). | | GET | /v1/models | Catalogue des modèles disponibles, avec les prix. | | GET | /v1/credits | Solde 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 |
|---|---|---|
| 401 | invalid_api_key | Clé absente, inconnue, révoquée ou expirée. |
| 402 | insufficient_credits | Solde trop bas, rechargez le workspace. |
| 402 | spend_cap_exceeded | Plafond de dépense (heure / jour / mois) atteint. |
| 403 | ip_not_allowed | IP appelante hors de la liste autorisée de la clé. |
| 403 | missing_scope | La clé n'a pas le scope inference. |
| 404 | model_not_public | Le modèle n'est pas disponible sur l'API. |
| 429 | rate_limited | Trop de tentatives d'authentification depuis cette IP. |
| 503 | pricing_unavailable | Prix du modèle temporairement inconnu (on refuse plutôt que mal facturer). |
| 503 | upstream_error | Le fournisseur en amont a échoué ; le pré-débit est remboursé. |
Clés, idempotence & plafonds
Chaque clé porte :
- scopes :
inferenceest 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.
## 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.