---
title: "API chat completions hébergée en Europe · compatible OpenAI"
description: "Envoyez vos messages à des modèles open-weight au format chat completions d'OpenAI. Traitement dans des centres de données de l'UE, sans entraînement."
canonical: "https://inference.eu/fr/api/chat-completions/"
language: "fr"
---

POST /v1/chat/completions

# API chat completions : compatible OpenAI et traitée dans l'UE

Le point de terminaison chat completions est la façon principale de générer du texte avec l'API inference.eu. Vous envoyez une liste de messages, vous choisissez un modèle open-weight et vous recevez la réponse dans le même format JSON que l'API d'OpenAI. Votre code et vos SDK fonctionnent dès que vous changez l'URL de base et la clé, et chaque requête est traitée dans des centres de données européens.

[Contacter l'équipe](https://inference.eu/fr/contact/)[Exemple de requête](#example)

1.  01Format d'API: OpenAI
2.  02Centres de données dans l'UE
3.  03Couvert par un seul DPA

POST /v1/chat/completions

```
curl https://api.inference.eu/v1/chat/completions \
  -H "Authorization: Bearer $INFERENCE_EU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-oss-120b",
    "messages": [
      {"role": "system", "content": "You answer questions about EU employment law in plain English."},
      {"role": "user", "content": "How long is the minimum paid annual leave in the EU?"}
    ],
    "temperature": 0.3,
    "max_tokens": 400
  }'
```

## Ce que fait le point de terminaison

`POST /v1/chat/completions` reçoit une conversation et renvoie le message suivant de l'assistant. La conversation est une liste de messages, chacun avec un `role` (`system`, `user`, `assistant` ou `tool`) et un `content`. Le modèle relit toute la liste à chaque appel : l'API ne conserve rien. Pour poursuivre un échange, ajoutez la réponse et la nouvelle question, puis renvoyez la liste.

Comme le format est celui d'OpenAI, les SDK officiels Python et JavaScript, LangChain, LlamaIndex et la plupart des frameworks d'agents l'appellent sans adaptateur. Le champ `model` désigne le modèle : en changer revient à modifier une chaîne.

## Les champs essentiels de la requête

Seuls `model` et `messages` sont obligatoires. `max_tokens` limite la longueur de la réponse, tandis que `temperature` et `top_p` règlent sa variabilité : une valeur basse pour l'extraction ou la classification, plus élevée pour la rédaction. `stop` interrompt la génération sur une chaîne donnée et `seed` rend les résultats plus reproductibles.

Avec `stream: true`, les tokens arrivent au fur et à mesure. `tools` permet au modèle d'appeler vos fonctions et `response_format` impose un JSON conforme à un schéma. Avec un modèle de vision, les images passent dans `content` sous forme de parties `image_url`. Un paramètre non pris en charge est ignoré ou refusé avec un message explicite.

## La structure de la réponse

Une requête réussie renvoie un objet avec un `id`, le `model` qui a répondu et un tableau `choices`. Le texte se trouve dans `choices[0].message.content`. Si le modèle choisit d'appeler un outil, `message.tool_calls` contient à la place le nom de la fonction et ses arguments JSON.

`finish_reason` indique pourquoi la génération s'est arrêtée : `stop` pour une fin naturelle, `length` quand `max_tokens` est atteint, `tool_calls` quand le modèle attend le résultat de vos outils. L'objet `usage` donne `prompt_tokens`, `completion_tokens` et `total_tokens` : c'est la base de facturation, et ce que vous devriez journaliser pour suivre vos coûts par fonctionnalité.

## Un schéma éprouvé pour vos fonctionnalités

La plupart des fonctionnalités suivent la même structure : un message système fixe qui pose le ton et les règles, quelques passages de contexte récupérés, puis la question de l'utilisateur. Gardez ce message système identique d'une requête à l'autre pour que le cache de prompts puisse le réutiliser, et placez le contenu variable à la fin.

Lorsque le résultat est lu par un programme (étiquettes, routage, champs extraits), associez une `temperature` basse à `response_format` pour obtenir un JSON valide plutôt que du texte libre. Pour une interface de chat, diffusez la réponse en streaming et résumez les anciens échanges avant d'atteindre la fenêtre de contexte du modèle.

## Erreurs et cas particuliers

Les erreurs reprennent le format d'OpenAI : un statut HTTP et un objet `error` avec `message`, `type` et `code`. Un 400 signale le plus souvent un champ invalide ou un prompt qui dépasse la fenêtre de contexte. Un 401 indique une clé absente ou erronée, un 404 un identifiant de modèle inconnu, un 429 une limite de votre offre atteinte.

Vérifiez `finish_reason` à chaque réponse. Avec `length`, la réponse est tronquée : augmentez `max_tokens` ou demandez une réponse plus courte. Réessayez les erreurs 429 et 5xx avec un délai exponentiel, en respectant l'en-tête `Retry-After` lorsqu'il est présent.

## Chat completions

Endpoint

POST /v1/chat/completions

Catégorie

Endpoints

Format d'API

OpenAI

Base URL

api.inference.eu/v1

Traitement

Centres de données dans l'UE

Entraînement sur vos données

Jamais

## Chat completions : questions fréquentes

Les questions que nous posent le plus les achats, les développeurs et les juristes. Il en manque une ? Posez-la-nous directement.

Oui. Le corps de la requête, la réponse, le format de streaming et la structure des erreurs suivent l'API chat completions d'OpenAI. Il suffit de pointer le SDK OpenAI vers l'URL de base d'inference.eu, d'utiliser votre clé inference.eu et de choisir un modèle open-weight de notre catalogue. Certains champs propres aux modèles d'OpenAI peuvent ne pas être disponibles.

Les prompts et les réponses sont traités dans des centres de données situés dans l'Union européenne. En cas de panne d'un site, le trafic bascule vers un autre site européen, jamais vers un fournisseur hors de l'UE. Vos requêtes servent uniquement à produire la réponse et ne sont jamais utilisées pour entraîner des modèles.

Tous les modèles de chat, de raisonnement, de code ou de vision de notre catalogue, par exemple \`gpt-oss-120b\`. Appelez \`GET /v1/models\` pour obtenir les identifiants exacts ouverts à votre clé, puis indiquez-en un dans le champ \`model\`. Chaque modèle est décrit en détail sur sa page.

Le point de terminaison ne stocke aucune conversation. C'est votre application qui garde la liste des messages et l'envoie à chaque requête, en y ajoutant la dernière réponse et la nouvelle question. Pour les longues discussions, supprimez ou résumez les anciens échanges afin de rester dans la fenêtre de contexte.

Le modèle s'est arrêté parce qu'il a atteint \`max\_tokens\` ou la fin de sa fenêtre de contexte : la réponse est donc incomplète. Augmentez \`max\_tokens\`, raccourcissez le prompt ou demandez une réponse plus concise. Pour les modèles de raisonnement, la réflexion compte aussi dans cette limite.

Oui. Les deux frameworks proposent des classes de chat compatibles OpenAI qui acceptent une URL de base et une clé personnalisées. Indiquez l'URL de l'API inference.eu, lisez la clé depuis \`INFERENCE\_EU\_API\_KEY\` et précisez l'identifiant du modèle. L'appel d'outils et le streaming passent par les mêmes classes.

Les limites dépendent de votre offre et du modèle appelé. Nous les définissons avec vous à l'ouverture du compte et pouvons les relever pour un trafic de production. En cas de dépassement, l'API renvoie un HTTP 429 et votre client doit réessayer après le délai indiqué dans \`Retry-After\`.

Non. Ce que vous envoyez sert uniquement à répondre à la requête. Les prompts et les réponses ne sont utilisés pour aucun entraînement ni ajustement de modèle, chez nous comme ailleurs. Si vous avez besoin de précisions sur la journalisation et la conservation dans votre contrat, nous vous les confirmons par écrit.

Chat completions est sans état et attend une liste de messages, ce qu'utilise la plupart du code existant. L'API Responses prend \`input\` et \`instructions\`, renvoie des éléments de sortie typés et prend en charge des outils intégrés comme la recherche web et les serveurs MCP distants. Les deux donnent accès aux mêmes modèles.

[Poser une question](https://inference.eu/fr/contact/)

## Pages liées

[Présentation de l'API](https://inference.eu/fr/api/)

-   [StreamingRecevez les tokens des modèles ouverts au fil de la génération, en server-sent events aux formats OpenAI et Anthropic. Exemples, fragments et erreurs.Guides](https://inference.eu/fr/api/streaming/)
-   [Tool callingLaissez des modèles ouverts appeler vos fonctions et vos API grâce à l'appel d'outils compatible OpenAI. Définir les outils, gérer la boucle, dans l'UE.Guides](https://inference.eu/fr/api/tool-calling/)
-   [Structured outputsObtenez des modèles ouverts un JSON valide conforme à votre schéma grâce aux sorties structurées compatibles OpenAI. Mode JSON, json\_schema, strict, pièges.Guides](https://inference.eu/fr/api/structured-outputs/)
-   [List modelsListez avec GET /v1/models, au format OpenAI, tous les modèles open-weight accessibles à votre clé inference.eu, du chat aux embeddings et à la voix.Endpoints](https://inference.eu/fr/api/models/)

## Faites passer vos charges IA sur une infrastructure européenne

Dites-nous quels modèles vous utilisez et votre volume approximatif. Nous répondons sous un jour ouvré avec un tarif et la suite.

-   Réponse sous un jour ouvré
-   Tarif adapté à votre volume
-   DPA prêt à signer
