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.
Endpoint
Section intitulée « Endpoint »POST /v1/chat/completionsAdresse complète :
https://api.routeapi.ai/v1/chat/completionsSi 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.
Exemple de requête
Section intitulée « Exemple de requête »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" } ] }'Paramètres de requête
Section intitulée « Paramètres de requête »| Champ | Type | Obligatoire | Description |
|---|---|---|---|
model | string | Oui | ID de modèle, qui doit être disponible pour le compte actuel |
messages | array | Oui | Liste des messages de conversation |
stream | boolean | Non | Active la sortie SSE en streaming, false par défaut |
temperature | number | Non | Température d’échantillonnage |
top_p | number | Non | Paramètre nucleus sampling |
max_tokens | number | Non | Nombre maximal de tokens en sortie |
max_completion_tokens | number | Non | Nom 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 |
stop | string/array | Non | Séquences d’arrêt personnalisées |
n | integer | Non | Nombre de candidats ; le renvoi effectif de plusieurs candidats dépend du modèle |
presence_penalty | number | Non | Pénalité de présence |
frequency_penalty | number | Non | Pénalité de fréquence |
seed | number | Non | Graine d’échantillonnage au mieux ; la reproductibilité dépend du modèle amont |
user | string | Non | Identifiant d’utilisateur final, transmis aux services amont qui le prennent en charge |
tools | array | Non | Définitions d’outils |
tool_choice | string/object | Non | Stratégie de sélection d’outil |
response_format | object | Non | JSON mode ou JSON Schema |
stream_options | object | Non | Options 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.
Format de messages
Section intitulée « Format de messages »[ { "role": "system", "content": "Tu es un assistant technique rigoureux." }, { "role": "user", "content": "Explique ce qu'est une passerelle API." }]Rôles courants :
| Role | Description |
|---|---|
system | Prompt système |
user | Entrée utilisateur |
assistant | Réponse historique du modèle |
tool | Ré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.
Exemple de réponse
Section intitulée « Exemple de réponse »{ "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).
Streaming
Section intitulée « Streaming »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.
Configuration des SDK
Section intitulée « Configuration des SDK »Les SDK OpenAI officiels fonctionnent sans modification une fois la clé API et l’URL de base pointées vers RouteAPI.
SDK Python OpenAI
Section intitulée « SDK Python OpenAI »pip install openaiimport osfrom 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)SDK Node.js OpenAI
Section intitulée « SDK Node.js OpenAI »npm install openaiimport 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);LangChain et LiteLLM
Section intitulée « LangChain et LiteLLM »Les deux bibliothèques acceptent un point de terminaison compatible OpenAI personnalisé :
import osfrom 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 osimport 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",)Autres clients compatibles
Section intitulée « Autres clients compatibles »Tout client acceptant une URL de base OpenAI personnalisée peut se connecter avec les trois mêmes réglages :
- Clé API — une clé API RouteAPI commençant par
sk-. - URL de base —
https://api.routeapi.ai/v1. - 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.
Différences avec l’API OpenAI officielle
Section intitulée « Différences avec l’API OpenAI officielle »Une gamme de modèles plus large
Section intitulée « Une gamme de modèles plus large »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.
Facturation et limites gérées par RouteAPI
Section intitulée « Facturation et limites gérées par RouteAPI »- 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.
Les capacités dépendent du modèle choisi
Section intitulée « Les capacités dépendent du modèle choisi »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.
Valeurs nulles explicites
Section intitulée « Valeurs nulles explicites »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.
Erreurs amont
Section intitulée « Erreurs amont »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.
Notes de compatibilité
Section intitulée « Notes de compatibilité »- 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_formatoustream_options, vérifiez d’abord que le modèle choisi prend en charge la capacité correspondante. - Les paramètres optionnels transmis explicitement avec
0oufalsedoivent ê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.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- 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.