Chat Completions

Utilisez l’endpoint Chat Completions compatible OpenAI pour générer du texte à partir de messages.

POST https://getrouter.ai/v1/chat/completions

Requête de base

curl https://getrouter.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "messages": [
      {"role": "system", "content": "Answer clearly and concisely."},
      {"role": "user", "content": "What is an API gateway?"}
    ]
  }'

Une réponse sans streaming contient le contenu généré sous :

choices[0].message.content

Le nombre de tokens utilisés, lorsqu’il est indiqué par le modèle, est renvoyé dans l’objet usage.

Python

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://getrouter.ai/v1",
)

response = client.chat.completions.create(
    model="MODEL_ID",
    messages=[
        {"role": "system", "content": "Answer clearly and concisely."},
        {"role": "user", "content": "What is an API gateway?"},
    ],
)

print(response.choices[0].message.content)

Node.js / TypeScript

import OpenAI from 'openai'

const client = new OpenAI({
  apiKey: 'YOUR_API_KEY',
  baseURL: 'https://getrouter.ai/v1',
})

const response = await client.chat.completions.create({
  model: 'MODEL_ID',
  messages: [
    { role: 'system', content: 'Answer clearly and concisely.' },
    { role: 'user', content: 'What is an API gateway?' },
  ],
})

console.log(response.choices[0]?.message.content)

Rôles des messages

Le schéma de l’API prend en charge les rôles suivants :

RôleUtilité
systemComportement général ou contexte
developerInstructions du développeur pour les modèles prenant en charge ce rôle
userEntrée de l’utilisateur final
assistantSortie précédente de l’assistant
toolRésultat renvoyé pour un appel d’outil

Champs de requête courants

ChampDescription
modelID de modèle obligatoire
messagesMessages de conversation ordonnés obligatoires
streamRenvoie des fragments au fil de leur génération lorsque la valeur est true
temperatureContrôle de l’échantillonnage pris en charge par le modèle sélectionné
top_pContrôle de l’échantillonnage par noyau
max_tokensNombre maximal de tokens générés pour les modèles compatibles
max_completion_tokensLimite de complétion utilisée par les modèles compatibles
toolsDéfinitions d’outils pour les modèles prenant en charge les appels d’outils
tool_choiceContrôle la sélection des outils
response_formatConfiguration de réponse structurée pour les modèles compatibles
reasoning_effortlow, medium ou high pour les modèles de raisonnement compatibles

N’envoyez pas de champs facultatifs si le modèle sélectionné ne les prend pas en charge.

Entrée multimodale

Le schéma du contenu des messages prend en charge des parties de contenu typées, telles que du texte, des URL d’images, de l’audio en entrée, des fichiers et des URL de vidéos. Leur disponibilité dépend du modèle.

Exemple d’entrée avec une image :

{
  "model": "MODEL_ID",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "Describe this image."},
        {
          "type": "image_url",
          "image_url": {"url": "https://example.com/image.jpg"}
        }
      ]
    }
  ]
}

Appels d’outils

Lorsqu’un modèle compatible renvoie tool_calls, exécutez la fonction demandée dans votre application, puis ajoutez un message tool avec le tool_call_id correspondant. La prise en charge des outils et leur comportement exact dépendent du modèle.

Streaming

Définissez stream sur true et lisez le texte dans choices[0].delta.content pour chaque fragment. Consultez Streaming pour des exemples complets.

Erreurs

  • 400 — champs de requête non valides ou valeurs non prises en charge
  • 401 — clé API absente ou non valide
  • 429 — limitation de débit, quota ou restriction de capacité
  • Erreurs de modèle — ID de modèle incorrect ou endpoint incompatible

Étapes suivantes