DocumentationOuvrir Moon AI
Parcourir la documentation

Conversation (chat completions)

Référence de POST /v1/chat/completions : paramètres, messages, réponse, flux SSE et format des morceaux, outils, images, longueur de sortie et erreurs.

Sur cette page

POST /v1/chat/completions est le point d’accès des modèles de conversation. Le corps de la requête et la réponse suivent l’API Chat Completions d’OpenAI : les SDK d’OpenAI s’en servent sans réglage particulier.

HTTP
POST https://api.realmoon.ai/v1/chat/completions
  • Authentification : clé sk-moon-… avec la portée inference (voir Authentification).
  • Corps : JSON (Content-Type: application/json).
  • Réponse : un objet chat.completion, ou un flux SSE de morceaux chat.completion.chunk avec "stream": true.
  • Facturation : à l’usage, sur le porte-monnaie du workspace de la clé (voir Coûts).

ExempleLien vers la section Exemple

cURL
curl https://api.realmoon.ai/v1/chat/completions \
  -H "Authorization: Bearer $MOONAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "anthropic/claude-haiku-4.5",
        "messages": [
          {"role": "system", "content": "Tu réponds en une phrase."},
          {"role": "user", "content": "Qu’est-ce qu’une API ?"}
        ],
        "max_tokens": 300,
        "temperature": 0.3
      }'
Python
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.realmoon.ai/v1", api_key=os.environ["MOONAI_API_KEY"])

response = client.chat.completions.create(
    model="anthropic/claude-haiku-4.5",
    messages=[
        {"role": "system", "content": "Tu réponds en une phrase."},
        {"role": "user", "content": "Qu’est-ce qu’une API ?"},
    ],
    max_tokens=300,
    temperature=0.3,
)
print(response.choices[0].message.content)
JavaScript
import OpenAI from 'openai';

const client = new OpenAI({ baseURL: 'https://api.realmoon.ai/v1', apiKey: process.env.MOONAI_API_KEY });

const response = await client.chat.completions.create({
  model: 'anthropic/claude-haiku-4.5',
  messages: [
    { role: 'system', content: 'Tu réponds en une phrase.' },
    { role: 'user', content: 'Qu’est-ce qu’une API ?' },
  ],
  max_tokens: 300,
  temperature: 0.3,
});
console.log(response.choices[0].message.content);

ParamètresLien vers la section Paramètres

Le corps est un objet JSON. Les paramètres du tableau sont transmis au modèle, sauf provider et transforms, vérifiés à part (voir Préférences de fournisseur) ; les autres sont retirés sans erreur (voir Paramètres ignorés). Un modèle peut refuser un paramètre qu’il ne connaît pas (400 unsupported_parameter).

ParamètreTypeObligatoireDescription
modelchaîneouiIdentifiant d’un modèle de type chat de GET /v1/models. Absent : 400 missing_required_parameter. Inconnu : 404 model_not_found.
messagestableauouiLa conversation, voir Messages. Absent ou mal formé : 400 unsupported_content.
streambooléennontrue pour recevoir la réponse en flux SSE, voir Flux. false par défaut.
max_tokensentiernonNombre maximal de jetons de sortie, raisonnement compris. Voir Longueur de la réponse.
max_completion_tokensentiernonMême rôle que max_tokens, sous le nom utilisé par les modèles de raisonnement d’OpenAI.
temperaturenombrenonAléa de l’échantillonnage.
top_pnombrenonÉchantillonnage par noyau.
top_k, min_p, top_a, repetition_penaltynombrenonRéglages d’échantillonnage, pour les modèles qui les acceptent.
frequency_penalty, presence_penaltynombrenonPénalités de répétition.
stopchaîne ou tableaunonSéquences qui arrêtent la génération.
seedentiernonGraine, pour les modèles qui la respectent.
logit_biasobjetnonBiais par jeton, pour les modèles qui l’acceptent.
logprobsbooléennonDemande les probabilités des jetons, pour les modèles qui les renvoient.
top_logprobsentiernonNombre de jetons probables renvoyés à chaque position, avec logprobs.
response_formatobjetnonSortie JSON ({"type": "json_object"}) ou conforme à un schéma ({"type": "json_schema", "json_schema": {…}}), selon le modèle.
toolstableaunonFonctions que le modèle peut appeler, voir Outils.
tool_choicechaîne ou objetnonnone, auto, required, une fonction précise ({"type": "function", "function": {"name": "…"}}) ou {"type": "allowed_tools", …}.
parallel_tool_callsbooléennonAutorise plusieurs appels d’outils dans une même réponse.
functions, function_calltableau, chaîne ou objetnonAncienne forme des outils, encore acceptée.
reasoning_effortchaînenonEffort de raisonnement (par exemple low, medium, high), pour les modèles qui l’acceptent.
reasoningobjetnonRéglage du raisonnement. Seules les clés effort, max_tokens, exclude et enabled sont transmises.
include_reasoningbooléennonDemande au modèle de renvoyer son raisonnement, quand il le permet.
verbositychaînenonNiveau de détail, pour les modèles qui l’acceptent.
user, safety_identifier, prompt_cache_keychaînenonIdentifiant de votre utilisateur final ou clé de cache. Remplacé par un pseudonyme s’il contient une donnée personnelle détectée (voir Confidentialité).
nentiernonSeule la valeur 1 est acceptée (400 n_not_supported sinon).
providerobjetnonPréférences de fournisseur, voir ci-dessous.
transformstableaunon["middle-out"] seulement, voir ci-dessous.

Les réglages d’échantillonnage dépendent du modèle : un modèle peut en ignorer certains.

Préférences de fournisseurLien vers la section Préférences de fournisseur

Un même modèle peut être servi par plusieurs fournisseurs. L’objet provider restreint ou ordonne ce choix ; il ne l’élargit jamais.

CléValeurEffet
onlytableau de nomsNe sert la requête que par ces fournisseurs.
ignoretableau de nomsÉcarte ces fournisseurs.
ordertableau de nomsEssaie les fournisseurs dans cet ordre.
quantizationstableau de nomsNe garde que ces niveaux de quantification.
sortprice, throughput ou latencyTrie les fournisseurs par prix, débit ou latence.
allow_fallbacksbooléenfalse : pas de repli vers un autre fournisseur.
require_parametersbooléentrue : seulement les fournisseurs qui acceptent tous les paramètres de la requête.
max_priceobjetPrix maximal accepté, en dollars US : prompt et completion par million de jetons, request par requête, image par image.
data_collection"deny"Écarte les fournisseurs qui déclarent réutiliser les données.
zdrbooléentrue : seulement les fournisseurs qui déclarent ne rien conserver.
  • Les listes comptent 64 noms au plus.
  • Une valeur par défaut (allow_fallbacks: true, zdr: false, data_collection: "allow", liste vide) est ignorée.
  • Toute autre clé, ou une valeur invalide, est refusée avec 400 unsupported_parameter et param qui la nomme (par exemple provider.foo).
  • Le prix maximal transmis n’est jamais plus haut que le prix du modèle dans /v1/models : une préférence ne fait jamais servir la requête plus cher que ce que la réserve couvre.
  • Tous les modèles ne prennent pas ces préférences en charge. Sur un modèle qui ne les accepte pas, par exemple un modèle hébergé par Moon AI, une préférence active est refusée avec 400 unsupported_parameter (param: "provider").
  • Les engagements data_collection et zdr sont ceux que déclarent les fournisseurs ; Moon AI ne les contrôle pas.

transforms: ["middle-out"] raccourcit le milieu d’une conversation trop longue pour la fenêtre de contexte du modèle. Toute autre valeur est refusée (400 unsupported_parameter, param: "transforms"), comme middle-out sur un modèle qui ne prend pas les préférences de fournisseur en charge.

MessagesLien vers la section Messages

messages est un tableau d’objets message, du plus ancien au plus récent.

ChampTypeObligatoireDescription
rolechaîneouisystem, user, assistant ou tool.
contentchaîne, tableau de parties ou nullouiLe contenu. null est permis pour un message assistant qui ne porte que des tool_calls.
namechaînenonNom de l’auteur. Remplacé par un pseudonyme s’il contient une donnée personnelle détectée.
tool_callstableaunonSur un message assistant : les appels d’outils que le modèle a faits, renvoyés tels quels.
tool_call_idchaînedans un message toolL’identifiant de l’appel auquel le message répond.

Un content en tableau contient des parties :

Type de partieFormeRemarques
text{"type": "text", "text": "…"}Texte.
refusal{"type": "refusal", "refusal": "…"}Refus renvoyé par un modèle, dans un message assistant que vous renvoyez.
image_url{"type": "image_url", "image_url": {"url": "…", "detail": "auto"}}Adresse https:// ou http://, ou data:image/…;base64,…. Voir Images et fichiers.
input_audio{"type": "input_audio", "input_audio": {"data": "<base64>", "format": "wav"}}Audio en base64 seulement, pour les modèles qui lisent l’audio.
file{"type": "file", "file": {"filename": "devis.pdf", "file_data": "data:application/pdf;base64,…"}}Fichier en base64, en URL data: ou à une adresse http(s)://.

Toute autre partie est refusée avec 400 unsupported_content, en particulier :

  • un fichier désigné par son identifiant (file_id) : envoyez son contenu dans file_data ;
  • une vidéo ;
  • de l’audio envoyé comme file : utilisez une partie input_audio ;
  • de l’audio sur un modèle dont le prix de l’audio n’est pas connu.

RéponseLien vers la section Réponse

Sans flux, la réponse est un objet chat.completion.

Réponse
{
  "id": "gen-6f1c2b7e9a4d4c0e8b3a5d2f1e0c9b8a",
  "object": "chat.completion",
  "created": 1793577600,
  "model": "anthropic/claude-haiku-4.5",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Une API est une interface qui permet à deux logiciels d’échanger des données."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 24, "completion_tokens": 18, "total_tokens": 42 }
}
ChampTypeDescription
idchaîneIdentifiant de la requête chez Moon AI (gen-…), le même que l’en-tête X-Moon-Request-Id. Il sert à lire le coût avec GET /v1/generation.
objectchaînechat.completion.
createdentierDate en secondes Unix.
modelchaîneLe modèle appelé, ou le nom exact de la version servie. Pour un modèle maison de Moon AI, toujours l’identifiant Moon AI.
choicestableauUne seule réponse (n vaut toujours 1).
choices[].message.rolechaîneassistant.
choices[].message.contentchaîne ou nullLe texte de la réponse. null quand le modèle ne fait qu’appeler des outils.
choices[].message.tool_callstableauLes appels d’outils demandés par le modèle, voir Outils.
choices[].message.refusalchaîneLe refus du modèle, quand il refuse de répondre.
choices[].message.reasoningchaîneLe raisonnement, quand le modèle le renvoie (reasoning_content chez certains modèles).
choices[].finish_reasonchaînestop, length (limite de sortie atteinte), tool_calls, content_filter…
choices[].logprobsobjetLes probabilités des jetons, avec logprobs: true.
usage.prompt_tokens, usage.completion_tokens, usage.total_tokensentierJetons comptés.
usage.prompt_tokens_details, usage.completion_tokens_detailsobjetDétails que le modèle fournit : jetons lus en cache, jetons de raisonnement.

La réponse ne donne jamais le coût, ni le fournisseur qui a servi le modèle : provider, system_fingerprint, native_finish_reason et les champs de coût de usage sont retirés.

En-têtes de réponseLien vers la section En-têtes de réponse

En-têteValeur
X-Moon-Request-Idgen-…, identifiant de la requête.
X-Moon-Prompt-Storagenone : le contenu n’est pas conservé.
X-Moon-Bluron si Moon Blur a analysé la requête, off s’il est désactivé pour la clé.
X-Moon-Blur-RedactionsNombre de valeurs remplacées par Moon Blur, quand il y en a.

FluxLien vers la section Flux

Avec "stream": true, la réponse arrive en Server-Sent Events (Content-Type: text/event-stream) au format d’OpenAI. Le statut HTTP (200) et les en-têtes partent avec le premier octet.

cURL
curl -N https://api.realmoon.ai/v1/chat/completions \
  -H "Authorization: Bearer $MOONAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "anthropic/claude-haiku-4.5",
        "messages": [{"role": "user", "content": "Écris un haïku sur la Lune."}],
        "stream": true
      }'
Python
stream = client.chat.completions.create(
    model="anthropic/claude-haiku-4.5",
    messages=[{"role": "user", "content": "Écris un haïku sur la Lune."}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage)
JavaScript
const stream = await client.chat.completions.create({
  model: 'anthropic/claude-haiku-4.5',
  messages: [{ role: 'user', content: 'Écris un haïku sur la Lune.' }],
  stream: true,
});
for await (const chunk of stream) {
  const text = chunk.choices[0]?.delta?.content;
  if (text) process.stdout.write(text);
  if (chunk.usage) console.log('\n', chunk.usage);
}

Format des événementsLien vers la section Format des événements

Chaque événement est une ligne data: suivie d’un objet JSON, puis une ligne vide. Le dernier événement est data: [DONE]. Les lignes qui commencent par : sont des commentaires.

Flux
data: {"id":"gen-6f1c2b7e9a4d4c0e8b3a5d2f1e0c9b8a","object":"chat.completion.chunk","created":1793577600,"model":"anthropic/claude-haiku-4.5","choices":[{"index":0,"delta":{"role":"assistant","content":"Lune"},"finish_reason":null}]}

data: {"id":"gen-6f1c2b7e9a4d4c0e8b3a5d2f1e0c9b8a","object":"chat.completion.chunk","created":1793577600,"model":"anthropic/claude-haiku-4.5","choices":[{"index":0,"delta":{"content":" pâle au-dessus des toits"},"finish_reason":null}]}

: keep-alive

data: {"id":"gen-6f1c2b7e9a4d4c0e8b3a5d2f1e0c9b8a","object":"chat.completion.chunk","created":1793577600,"model":"anthropic/claude-haiku-4.5","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: {"id":"gen-6f1c2b7e9a4d4c0e8b3a5d2f1e0c9b8a","object":"chat.completion.chunk","created":1793577600,"model":"anthropic/claude-haiku-4.5","choices":[],"usage":{"prompt_tokens":16,"completion_tokens":21,"total_tokens":37}}

data: [DONE]
Champ d’un morceauDescription
idIdentifiant de la requête (gen-…), le même dans tous les morceaux.
objectchat.completion.chunk.
created, modelComme dans la réponse sans flux.
choices[].delta.roleassistant, dans le premier morceau.
choices[].delta.contentLe fragment de texte suivant.
choices[].delta.tool_callsFragments d’appels d’outils : index, puis id et function.name au début, function.arguments découpé en morceaux à concaténer.
choices[].delta.reasoningFragment du raisonnement, quand le modèle le renvoie (reasoning_content chez certains modèles).
choices[].finish_reasonnull tant que la réponse continue, puis la raison de fin.
usageDans un des derniers morceaux : les jetons comptés, parfois avec un tableau choices vide.
  • Le morceau qui porte usage arrive toujours, même sans stream_options : vérifiez que choices n’est pas vide avant de le lire.
  • Des commentaires : keep-alive arrivent pendant que le modèle réfléchit, pour garder la connexion ouverte. Les SDK les ignorent.
  • Quand Moon Blur a remplacé une valeur, elle est remise dans le texte, le raisonnement et les arguments d’outils, même quand un jeton est coupé entre deux morceaux.
  • Si le flux est coupé de notre côté ou chez le fournisseur, un dernier événement data: {"error": {"message": "upstream stream interrupted", "type": "server_error", "code": "upstream_error"}} signale que la réponse est incomplète. Les SDK le lèvent comme une erreur pendant l’itération.
  • Le flux dure une heure au plus, et il est coupé si le modèle n’envoie rien pendant 5 minutes.
  • Le coût est réglé à la fin du flux. Si votre client ferme la connexion avant, la requête est réglée sur le coût que le fournisseur annonce pour ce qu’il a produit, ou garde une partie de sa réserve (voir Règlement).

Outils (function calling)Lien vers la section Outils (function calling)

Seuls les outils de type function, exécutés par votre programme, sont acceptés. Un outil d’un autre type (exécuté par le fournisseur, comme une recherche web) est refusé avec 400 unsupported_parameter et param: "tools".

cURL
curl https://api.realmoon.ai/v1/chat/completions \
  -H "Authorization: Bearer $MOONAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "anthropic/claude-haiku-4.5",
        "messages": [{"role": "user", "content": "Quel temps fait-il à Lyon ?"}],
        "tools": [{
          "type": "function",
          "function": {
            "name": "meteo",
            "description": "Météo actuelle d’une ville",
            "parameters": {
              "type": "object",
              "properties": {"ville": {"type": "string"}},
              "required": ["ville"]
            }
          }
        }],
        "tool_choice": "auto"
      }'
Python
import json

tools = [{
    "type": "function",
    "function": {
        "name": "meteo",
        "description": "Météo actuelle d’une ville",
        "parameters": {
            "type": "object",
            "properties": {"ville": {"type": "string"}},
            "required": ["ville"],
        },
    },
}]
messages = [{"role": "user", "content": "Quel temps fait-il à Lyon ?"}]

first = client.chat.completions.create(model="anthropic/claude-haiku-4.5", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)

messages.append(first.choices[0].message)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps({"ville": args["ville"], "ciel": "dégagé", "temperature": 18})})

final = client.chat.completions.create(model="anthropic/claude-haiku-4.5", messages=messages, tools=tools)
print(final.choices[0].message.content)
JavaScript
const tools = [{
  type: 'function',
  function: {
    name: 'meteo',
    description: 'Météo actuelle d’une ville',
    parameters: {
      type: 'object',
      properties: { ville: { type: 'string' } },
      required: ['ville'],
    },
  },
}];
const messages = [{ role: 'user', content: 'Quel temps fait-il à Lyon ?' }];

const first = await client.chat.completions.create({ model: 'anthropic/claude-haiku-4.5', messages, tools });
const call = first.choices[0].message.tool_calls[0];
const args = JSON.parse(call.function.arguments);

messages.push(first.choices[0].message);
messages.push({ role: 'tool', tool_call_id: call.id, content: JSON.stringify({ ville: args.ville, ciel: 'dégagé', temperature: 18 }) });

const final = await client.chat.completions.create({ model: 'anthropic/claude-haiku-4.5', messages, tools });
console.log(final.choices[0].message.content);
Message renvoyé par le modèle
{
  "role": "assistant",
  "content": null,
  "tool_calls": [
    {
      "id": "call_01",
      "type": "function",
      "function": { "name": "meteo", "arguments": "{\"ville\":\"Lyon\"}" }
    }
  ]
}
  • Tous les modèles ne savent pas appeler des outils.
  • Les arguments (function.arguments) arrivent sous forme de chaîne JSON. Quand Moon Blur a masqué une valeur, elle est remise dans les arguments, qui restent du JSON valide.
  • finish_reason vaut tool_calls quand le modèle attend le résultat de vos fonctions.

Images et fichiersLien vers la section Images et fichiers

Un modèle qui lit les images accepte des parties image_url dans un message user.

cURL
curl https://api.realmoon.ai/v1/chat/completions \
  -H "Authorization: Bearer $MOONAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "anthropic/claude-haiku-4.5",
        "messages": [{
          "role": "user",
          "content": [
            {"type": "text", "text": "Décris cette image."},
            {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
          ]
        }]
      }'
Python
import base64

with open("photo.jpg", "rb") as f:
    data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()

response = client.chat.completions.create(
    model="anthropic/claude-haiku-4.5",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Décris cette image."},
            {"type": "image_url", "image_url": {"url": data_url}},
        ],
    }],
)
print(response.choices[0].message.content)
JavaScript
import fs from 'node:fs';

const dataUrl = 'data:image/jpeg;base64,' + fs.readFileSync('photo.jpg').toString('base64');

const response = await client.chat.completions.create({
  model: 'anthropic/claude-haiku-4.5',
  messages: [{
    role: 'user',
    content: [
      { type: 'text', text: 'Décris cette image.' },
      { type: 'image_url', image_url: { url: dataUrl } },
    ],
  }],
});
console.log(response.choices[0].message.content);
  • Une image à une adresse https:// est lue par le fournisseur du modèle, pas par Moon AI.
  • Sur les modèles d’OpenAI, une image sans detail (ou avec auto) est envoyée avec detail: "high".
  • Pour la plupart des modèles, un PDF envoyé dans une partie file est lu par le modèle s’il sait lire les fichiers ; sinon, son texte en est extrait avant l’envoi.
  • La réserve d’une requête tient compte de ses pièces jointes. Une image d’un modèle dont le traitement des images n’est pas connu, un fichier PDF ou un audio peuvent être retenus jusqu’à la taille de la fenêtre de contexte : la réserve peut être élevée, mais elle est rendue après la réponse (voir Coûts).

Moon Blur ne lit que le texte : les images, fichiers et sons partent tels quels.

RaisonnementLien vers la section Raisonnement

Les modèles de raisonnement acceptent reasoning_effort ou l’objet reasoning selon leur famille. Quand le modèle renvoie son raisonnement, il arrive dans un champ du message ou du morceau de flux (reasoning ou reasoning_content, selon le modèle). Les jetons de raisonnement sont des jetons de sortie : ils sont comptés dans usage et dans la limite de sortie.

Longueur de la réponseLien vers la section Longueur de la réponse

  • Avec max_tokens (ou max_completion_tokens), le modèle ne produit pas plus que cette valeur, raisonnement compris. Un budget reasoning.max_tokens plus grand est ramené à cette valeur.
  • Sans max_tokens, la réponse dispose d’au moins 4 096 jetons de sortie (moins si la limite du modèle est plus basse). Si le solde ou un plafond de dépense ne couvre pas cette taille, la requête est refusée (402) plutôt que servie en quelques mots. Au-delà, la limite monte jusqu’à celle du modèle (16 384 jetons au plus), tant qu’une petite part de ce qu’il reste au solde et aux plafonds la couvre, pour laisser de la place aux requêtes simultanées. Elle laisse aussi la place de l’entrée dans la fenêtre de contexte.
  • Pour un modèle de raisonnement d’OpenAI appelé directement, la limite est envoyée sous le nom max_completion_tokens.

Fixer max_tokens rend la réserve plus petite et plus prévisible. C’est recommandé quand beaucoup de requêtes partent en même temps.

Paramètres ignorésLien vers la section Paramètres ignorés

Ces paramètres sont retirés avant l’envoi, sans erreur : store, metadata, service_tier, modalities, audio, prediction, web_search_options, plugins, stream_options (le serveur demande lui-même l’usage en fin de flux) et tout paramètre absent du tableau des paramètres. Le paramètre store ne peut donc pas demander au fournisseur de garder vos requêtes.

ErreursLien vers la section Erreurs

HTTPcodeSignification
400nullinvalid JSON body ou body must be a JSON object.
400missing_required_parametermodel absent (param: "model").
400unsupported_contentmessages absent ou mal formé, ou partie de message que l’API ne sert pas (voir Messages).
400n_not_supportedn différent de 1.
400unsupported_parameterOutil d’un autre type que function, tool_choice invalide, préférence de fournisseur refusée, ou paramètre refusé par le modèle.
400 ou 413context_length_exceededRequête trop longue pour la fenêtre de contexte du modèle (param: "messages"), avec son explication.
400 ou 413no_available_route, invalid_requestLe modèle a refusé la requête, avec son explication.
402insufficient_credits, spend_cap_exceeded, hold_exceeds_capLe solde ou un plafond ne couvre pas la réserve (voir Coûts).
403org_policyLes règles de votre organisation refusent l’API ou ce modèle.
404model_not_foundModèle inconnu ou non servi par l’API (param: "model").
413moon_blur_payload_too_largeUn texte dépasse 500 000 caractères, trop long pour Moon Blur : rien n’est envoyé ni retenu.
429model_rate_limitedLe modèle reçoit trop de requêtes, rien n’est facturé ; Retry-After dit quand réessayer.
429credits_held_in_progressVos requêtes en cours retiennent le solde qui manque ; réessayez après Retry-After (2 secondes).
500 à 504upstream_errorLe fournisseur a échoué, ou ne peut pas servir la requête pour l’instant.
503nullupstream unavailable : le fournisseur n’a pas pu être joint.
503pricing_unavailablePrix du modèle momentanément inconnu : la requête est refusée plutôt que mal facturée.
503moon_blur_unavailableMoon Blur n’a pas pu analyser la requête : elle n’est pas envoyée, rien n’est retenu. Retry-After: 5.
503billing_unavailable, org_policy_unavailableLe solde ou les règles de l’organisation sont momentanément illisibles.
504upstream_timeoutLe fournisseur n’a pas répondu à temps. La réserve est gardée (voir Règlement).

Les erreurs de clé et de débit, communes à toute l’API, sont dans Erreurs. Les refus du modèle sont relayés sans le nom de son fournisseur, ses liens ni ses identifiants internes.

Voir aussiLien vers la section Voir aussi

Moon AI

Moon AI en action

0:00

À découvrir

Captures de chat.realmoon.ai du 29 octobre 2026, avec des données fictives.

Moon AI

Vos préférences

Aucun suivi publicitaire.

Ce site ne dépose aucun cookie publicitaire ni cookie de mesure d’audience : notre serveur compte les visites sans cookie. Votre thème et la fermeture de l’information sur les cookies sont mémorisés sur cet appareil.

L’application Moon AI possède ses propres réglages de confidentialité.