Aller au contenu

Chat Completions

Chat Completions est l’interface de conversation la plus courante. Elle convient au chat général, aux assistants de programmation, aux résumés, à la classification, aux appels d’outils et aux conversations multi-tours.

Elle suit le protocole Chat Completions d’OpenAI : une intégration OpenAI existante n’a que son URL de base et sa clé API à changer. Le même point de terminaison atteint aussi les modèles Claude, Gemini et d’autres ; RouteAPI convertit les formats de requête et de réponse en interne.

POST /v1/chat/completions

Adresse complète :

https://api.routeapi.ai/v1/chat/completions

Si un client est configuré avec une URL de base sans /v1 (par exemple https://api.routeapi.ai), les requêtes vers /chat/completions sont également acceptées : RouteAPI les réécrit en /v1/chat/completions.

Fenêtre de terminal
curl https://api.routeapi.ai/v1/chat/completions \
-H "Authorization: Bearer $ROUTEAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [
{ "role": "user", "content": "Présente RouteAPI en une phrase" }
]
}'
ChampTypeObligatoireDescription
modelstringOuiID de modèle, qui doit être disponible pour le compte actuel
messagesarrayOuiListe des messages de conversation
streambooleanNonActive la sortie SSE en streaming, false par défaut
temperaturenumberNonTempérature d’échantillonnage
top_pnumberNonParamètre nucleus sampling
max_tokensnumberNonNombre maximal de tokens en sortie
max_completion_tokensnumberNonNom plus récent de la limite de sortie ; si les deux sont fournis, RouteAPI privilégie celui-ci pour sa propre limite et son décompte
stopstring/arrayNonSéquences d’arrêt personnalisées
nintegerNonNombre de candidats ; le renvoi effectif de plusieurs candidats dépend du modèle
presence_penaltynumberNonPénalité de présence
frequency_penaltynumberNonPénalité de fréquence
seednumberNonGraine d’échantillonnage au mieux ; la reproductibilité dépend du modèle amont
userstringNonIdentifiant d’utilisateur final, transmis aux services amont qui le prennent en charge
toolsarrayNonDéfinitions d’outils
tool_choicestring/objectNonStratégie de sélection d’outil
response_formatobjectNonJSON mode ou JSON Schema
stream_optionsobjectNonOptions supplémentaires de streaming, comme include_usage

Les champs facultatifs sont transmis tels quels : un champ absent n’est pas remplacé par une valeur par défaut. Voir « Valeurs nulles explicites » ci-dessous.

[
{ "role": "system", "content": "Tu es un assistant technique rigoureux." },
{ "role": "user", "content": "Explique ce qu'est une passerelle API." }
]

Rôles courants :

RoleDescription
systemPrompt système
userEntrée utilisateur
assistantRéponse historique du modèle
toolRésultat d’appel d’outil

content peut être une simple chaîne ou un tableau de blocs de contenu pour une entrée multimodale ; voir Entrée multimodale. Quand un message assistant renvoie des appels d’outils, renvoyez-le tel quel suivi des résultats avec role: "tool" ; voir Appel d’outils.

{
"id": "chatcmpl_xxx",
"object": "chat.completion",
"created": 1730000000,
"model": "gpt-5.5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "RouteAPI est une passerelle API qui unifie la gestion de plusieurs services de modèles d'IA."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 18,
"total_tokens": 42
}
}

finish_reason indique pourquoi la génération s’est arrêtée : stop (fin naturelle), length (limite de sortie atteinte), tool_calls (le modèle veut appeler un outil) ou content_filter (bloqué par un filtre de contenu).

Avec stream: true, la réponse est un flux Server-Sent Events. Chaque ligne est un chat.completion.chunk dont choices[0].delta porte l’incrément, et le flux se termine par data: [DONE] :

data: {"id":"chatcmpl_xxx","object":"chat.completion.chunk","created":1730000000,"model":"gpt-5.5","choices":[{"index":0,"delta":{"content":"RouteAPI"},"finish_reason":null}]}
data: {"id":"chatcmpl_xxx","object":"chat.completion.chunk","created":1730000000,"model":"gpt-5.5","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]

Par défaut, RouteAPI ajoute avant data: [DONE] un dernier chunk contenant l’utilisation des tokens avec un tableau choices vide. Envoyez "stream_options": {"include_usage": false} pour le supprimer (les canaux qui ne prennent pas en charge stream_options l’envoient toujours) ; l’utilisation reste enregistrée dans les journaux de la console. La gestion complète des événements et les erreurs en cours de flux sont décrites dans Réponses en streaming.

Les SDK OpenAI officiels fonctionnent sans modification une fois la clé API et l’URL de base pointées vers RouteAPI.

Fenêtre de terminal
pip install openai
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ROUTEAPI_KEY"],
base_url="https://api.routeapi.ai/v1",
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Présente RouteAPI en une phrase"}],
)
print(response.choices[0].message.content)
Fenêtre de terminal
npm install openai
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.ROUTEAPI_KEY,
baseURL: 'https://api.routeapi.ai/v1',
});
const response = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [{ role: 'user', content: 'Présente RouteAPI en une phrase' }],
});
console.log(response.choices[0].message.content);

Les deux bibliothèques acceptent un point de terminaison compatible OpenAI personnalisé :

import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-5.5",
openai_api_key=os.environ["ROUTEAPI_KEY"],
openai_api_base="https://api.routeapi.ai/v1",
)
import os
import litellm
response = litellm.completion(
model="gpt-5.5",
messages=[{"role": "user", "content": "Présente RouteAPI en une phrase"}],
api_key=os.environ["ROUTEAPI_KEY"],
api_base="https://api.routeapi.ai/v1",
)

Tout client acceptant une URL de base OpenAI personnalisée peut se connecter avec les trois mêmes réglages :

  1. Clé API — une clé API RouteAPI commençant par sk-.
  2. URL de base — https://api.routeapi.ai/v1.
  3. Modèle — un ID renvoyé par GET /v1/models ; voir Models.

Des configurations prêtes à l’emploi pour Codex, Cursor, Claude Code, OpenCode et d’autres outils sont décrites dans Migrer depuis OpenAI.

L’API OpenAI officielle ne sert que les modèles d’OpenAI. Ici, le même champ model accepte des modèles de plusieurs fournisseurs — par exemple gpt-5.5, claude-sonnet-4-5 et gemini-2.5-pro — selon ce qui est disponible pour votre clé et votre groupe. Seul GET /v1/models indique quels modèles vous pouvez appeler.

  • La facturation suit la grille tarifaire de RouteAPI, qui peut différer du prix officiel du fournisseur.
  • Les limites de débit suivent les politiques de RouteAPI et non celles du fournisseur.
  • Le solde et les quotas de clé se gèrent dans la console RouteAPI.

Voir Facturation et quotas et Tarification des modèles.

Le protocole définit les champs ; le modèle décide lesquels fonctionnent réellement. Appels d’outils, entrée image, sortie structurée, usage en streaming et contrôles de raisonnement dépendent du modèle choisi et du service amont derrière lui. Le point de terminaison des modèles ne renvoie pas de drapeaux de capacité : vérifiez celles dont vous dépendez avec une vraie requête avant la production.

Les paramètres facultatifs envoyés explicitement à 0, 0.0 ou false sont conservés et transmis, et non écartés comme « non définis ». Cela permet de fixer temperature: 0 pour un échantillonnage déterministe. Pour laisser un paramètre non défini, omettez le champ plutôt que d’envoyer null.

Lorsque le service de modèle rejette une requête, RouteAPI renvoie le code de statut et le message de l’amont dans le corps d’erreur standard, avec (request id: <id>) ajouté. Les erreurs produites avant le routage — clé invalide, modèle non autorisé, aucun canal disponible — utilisent les codes listés dans Erreurs courantes.

  • La prise en charge d’un même paramètre peut varier selon les services de modèles.
  • Si la requête contient des paramètres optionnels comme tools, response_format ou stream_options, vérifiez d’abord que le modèle choisi prend en charge la capacité correspondante.
  • Les paramètres optionnels transmis explicitement avec 0 ou false doivent être considérés comme définis par l’utilisateur.
  • En cas de combinaison de sorties structurées et d’appels d’outils, lisez d’abord les contraintes de Sorties structurées.
  • Responses — protocole OpenAI plus récent, courant dans les agents de code.
  • Claude Messages — format natif Anthropic, pour les fonctions propres à Claude.
  • Google Gemini API — format natif de Google.
  • Models — modèles appelables par votre clé et leurs types de point de terminaison.