Les valeurs ci-dessous sont celles du 5 novembre 2026. L’onglet « Limites » du portail affiche celles qui s’appliquent à votre workspace et permet de régler les plafonds de dépense (ouvrir).
DébitLien vers la section Débit
| Limite | Valeur | Réponse au-delà |
|---|---|---|
| Requêtes par clé | 600 par minute | 429 avec Retry-After |
| Requêtes refusées avec une même clé (clé révoquée, adresse non autorisée…) | 60 par minute | 429 |
| Échecs d’authentification depuis une même adresse | 60 par minute | 429 |
- La limite de débit compte par clé, pas par workspace : plusieurs clés ont chacune la leur.
- Une clé valide qui vient de servir n’est pas freinée parce qu’une autre personne de la même adresse (réseau d’entreprise, NAT) se trompe de clé.
- Une adresse IPv6 est comptée avec tout son préfixe /64.
- L’onglet « Limites » du portail rappelle la limite par clé, sous « Limites de débit ».
Requêtes simultanéesLien vers la section Requêtes simultanées
La conversation n’a pas de limite de requêtes simultanées en nombre : chaque requête retient sa part du solde (voir Réserve), et c’est le solde qui borne ce qui peut tourner en même temps. Quand les réserves en cours bloquent une nouvelle requête qui tiendrait sinon, l’API répond 429 (Retry-After: ).
Les médias ont un nombre de requêtes en cours par workspace :
| Point d’accès | Requêtes en cours |
|---|---|
| Images | 8 |
| Vidéos (tâches non terminées) | 20 |
| Téléchargements de vidéos | 4 |
| Voix | 8 |
| Transcription | 4 |
| Embeddings | 8 |
| OCR | 2 |
Au-delà : 429 avec Retry-After (30 secondes pour les vidéos, 5 secondes sinon).
TaillesLien vers la section Tailles
| Point d’accès | Limite |
|---|---|
/ | La fenêtre de contexte du modèle (context_length dans /v1/models). Avec Moon Blur, chaque texte fait 500 000 caractères au plus. |
/ | Corps JSON de 1 Mo. |
/ | Corps de 90 Mo ; images de 20 Mo et 40 mégapixels chacune. |
/v1/videos | Corps de 60 Mo ; images de 20 Mo. |
/ | Corps de 256 Ko ; texte de 4 096 caractères. |
/ | Fichier de 25 Mo et 20 minutes d’audio. |
/ | Corps de 8 Mo ; 2 048 textes et environ 1 million de jetons. |
/v1/ocr | Document de 30 Mo ; 50 pages par requête. |
Un envoi multipart doit porter un en-tête Content-Length (411 sinon).
DuréesLien vers la section Durées
| Cas | Durée |
|---|---|
Conversation en flux (stream: true) | Jusqu’à une heure. Le flux est coupé si le modèle n’envoie rien pendant 5 minutes. |
| Conversation sans flux | La réponse doit arriver en 100 secondes environ : au-delà, la connexion peut être coupée par le réseau. |
| Images, voix, transcription, embeddings | Attente de 85 secondes au plus pour le modèle. |
| OCR | 85 secondes environ ; les pages non lues à temps ne sont ni renvoyées ni facturées. |
| Vidéos | Le lancement répond tout de suite ; la vidéo se suit ensuite (voir Vidéos). |
Plafonds de dépenseLien vers la section Plafonds de dépense
Deux niveaux de plafonds bornent ce que l’API peut dépenser. Ils se règlent en euros.
| Niveau | Où | Fenêtres |
|---|---|---|
| Workspace | Onglet « Limites », bloc « Plafonds de dépense du workspace » : « Par heure (€) », « Par jour (€) », « Par mois (€) », puis « Enregistrer les limites ». | Glissantes : la dernière heure, les dernières 24 heures et les 30 derniers jours. Laissez vide pour ne pas limiter. |
| Clé | À la création de la clé : « Plafond de dépense (€) » et « Période ». Voir Authentification. | Une fenêtre glissante d’une heure, de 24 heures ou de 30 jours. |
- Chaque requête doit tenir dans tous les plafonds qui la concernent, réserve comprise. Au-delà :
402(avecspend_cap_exceeded scopeetwindow), ou402quand c’est la réserve de cette seule requête qui dépasse ce que le plafond laisse.hold_exceeds_cap - Le propriétaire et le contact de facturation reçoivent un e-mail quand un plafond est atteint.
- Une fenêtre glissante se libère au fil du temps : une dépense d’il y a 61 minutes ne compte plus dans le plafond par heure.
Réessayer sans payer deux foisLien vers la section Réessayer sans payer deux fois
Chaque requête HTTP reçue a son propre identifiant (X-Moon-Request-Id) et n’est facturée qu’une fois. Mais l’API ne reconnaît pas une nouvelle tentative de votre part : renvoyer la même requête en crée une deuxième, avec sa propre réserve et son propre coût. Il n’y a pas d’en-tête d’idempotence.
| Cas | Réessayer ? |
|---|---|
429 avec Retry-After | Oui, après le délai. La requête refusée ne coûte rien. |
402, 400, 401, 403, 404, 413 | Non : corrigez la cause d’abord. Rien n’est facturé. |
503 (moon_blur_unavailable, billing_unavailable, service_unavailable, pricing_unavailable) | Oui, après Retry-After ou quelques secondes. Rien n’est facturé. |
502 | Oui. Rien n’est facturé si le modèle n’a rien produit. |
504 sur la conversation, connexion coupée, délai de votre client dépassé | Avec prudence : la première requête a pu être facturée (sa réserve est gardée). Vérifiez la dépense dans « Utilisation » › « Journal des requêtes », ou avec GET / si vous avez reçu l’identifiant de la requête, avant de relancer une requête coûteuse. Sur les médias, un 504 ne coûte rien. |
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.realmoon.ai/v1",
api_key=os.environ["MOONAI_API_KEY"],
max_retries=0,
timeout=600,
)import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://api.realmoon.ai/v1',
apiKey: process.env.MOONAI_API_KEY,
maxRetries: 0,
timeout: 600_000,
});