L’API Responses est notre nouvelle primitive d’API. Cette évolution de Chat Completions simplifie vos intégrations et leur apporte de puissantes primitives agentiques.
Chat Completions reste pris en charge, mais Responses est recommandé pour tous les nouveaux projets.
À propos de l’API Responses
L’API Responses est une interface unifiée qui permet de créer des applications puissantes fonctionnant comme des agents. Elle propose :
Des interactions fluides sur plusieurs tours, qui vous permettent de transmettre les réponses précédentes pour obtenir des résultats de raisonnement plus précis.
Une prise en charge multimodale native du texte et des images.
Avantages de Responses
L’API Responses présente plusieurs avantages par rapport à Chat Completions :
De meilleures performances : les modèles de raisonnement, comme GPT-5, font preuve d’une plus grande intelligence avec Responses qu’avec Chat Completions. Nos évaluations internes montrent une amélioration de 3 % sur SWE-bench, avec le même prompt et la même configuration.
Un fonctionnement agentique par défaut : l’API Responses fonctionne comme une boucle agentique, permettant au modèle d’appeler plusieurs outils, comme web_search, image_generation, file_search, code_interpreter et des serveurs MCP distants, ainsi que vos propres fonctions personnalisées, au cours d’une seule requête API.
Des coûts réduits : une meilleure utilisation du cache réduit les coûts (amélioration de 40 % à 80 % par rapport à Chat Completions lors de tests internes).
Un contexte avec état : utilisez store: true pour maintenir l’état d’un tour à l’autre, en préservant le contexte du raisonnement et des outils.
Des entrées flexibles : transmettez une chaîne avec input ou une liste de messages ; utilisez instructions pour les consignes au niveau système.
Un raisonnement chiffré : désactivez la conservation de l’état tout en bénéficiant d’un raisonnement avancé.
Une API conçue pour l’avenir : prête pour les modèles à venir.
Capacités
API Chat Completions
API Responses
Génération de texte
Audio
Bientôt disponible
Vision
Sorties structurées
Appel de fonction
Recherche web
Recherche de fichiers
Utilisation de l’ordinateur
Interpréteur de code
MCP
Génération d’images
Résumés du raisonnement
Exemples
Comparez l’API Responses à l’API Chat Completions dans des scénarios précis.
Messages et éléments
Les deux API permettent de générer facilement des sorties à partir de nos modèles. L’entrée et le résultat d’un appel à Chat Completions prennent la forme d’un tableau de messages, tandis que
l’API Responses utilise des éléments. Un élément est une union de plusieurs types, qui représentent l’ensemble des actions possibles
du modèle. Un message est un type d’élément, tout comme un function_call ou un function_call_output. Contrairement à un message Chat Completions, où
plusieurs responsabilités sont regroupées dans un même objet, les éléments sont distincts les uns des autres et représentent mieux l’unité de base du contexte du modèle.
De plus, Chat Completions peut renvoyer plusieurs générations parallèles sous forme de choices, à l’aide du paramètre n. Dans Responses, nous avons supprimé ce paramètre : une seule génération est possible.
API Chat Completions
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15from openai import OpenAIclient = OpenAI()completion = client.chat.completions.create(model="gpt-6-astra",messages=[ {"role": "user","content": "Write a one-sentence bedtime story about a unicorn.", } ],)print(completion.choices[0].message.content)
1
2
3
4
5
6
7
8
9
10
11
12
13require "openai"client = OpenAI::Client.newcompletion = client.chat.completions.create( model: "gpt-6-astra", messages: [ { role: :user, content: "Write a one-sentence bedtime story about a unicorn." } ])puts(completion.choices.fetch(0).message.content)
API Responses
Python
1
2
3
4
5
6
7
8
9
10from openai import OpenAIclient = OpenAI()response = client.responses.create(model="gpt-6-astra",input="Write a one-sentence bedtime story about a unicorn.",)print(response.output_text)
1
2
3
4
5
6
7
8require "openai"client = OpenAI::Client.newresponse = client.responses.create( model: "gpt-6-astra", input: "Write a one-sentence bedtime story about a unicorn.")puts(response.output_text)
Les champs de la réponse renvoyée par l’API Responses diffèrent légèrement.
Au lieu d’un message, vous recevez un objet response typé avec son propre id.
Les réponses de Responses sont stockées par défaut. Celles de Chat Completions sont stockées par défaut pour les nouveaux comptes.
Pour désactiver le stockage dans l’une ou l’autre API, définissez store: false.
Les objets renvoyés par ces API diffèrent légèrement. Avec Chat Completions, vous recevez un tableau de
choices, chacun contenant un message. Avec Responses, vous recevez un tableau d’éléments nommé output.
API Chat Completions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19{"id": "chatcmpl-C9EDpkjH60VPPIB86j2zIhiR8kWiC","object": "chat.completion","created": 1756315657,"model": "gpt-5.5","choices": [ {"index": 0,"message": {"role": "assistant","content": "Under a blanket of starlight, a sleepy unicorn tiptoed through moonlit meadows, gathering dreams like dew to tuck beneath its silver mane until morning.","refusal": null,"annotations": [] },"finish_reason": "stop" } ],...}
API Responses
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29{"id": "resp_68af4030592c81938ec0a5fbab4a3e9f05438e46b5f69a3b","object": "response","created_at": 1756315696,"model": "gpt-5.5","output": [ {"id": "rs_68af4030baa48193b0b43b4c2a176a1a05438e46b5f69a3b","type": "reasoning","content": [],"summary": [] }, {"id": "msg_68af40337e58819392e935fb404414d005438e46b5f69a3b","type": "message","status": "completed","content": [ {"type": "output_text","annotations": [],"logprobs": [],"text": "Under a quilt of moonlight, a drowsy unicorn wandered through quiet meadows, brushing blossoms with her glowing horn so they sighed soft lullabies that carried every dreamer gently to sleep." } ],"role": "assistant" } ],...}
Autres différences
Les réponses de Responses sont stockées par défaut. Celles de Chat Completions sont stockées par défaut pour les nouveaux comptes. Pour désactiver le stockage dans l’une ou l’autre API, définissez store: false.
Les modèles de raisonnement bénéficient de fonctionnalités plus riches dans l’API Responses, avec une meilleure utilisation des outils. À partir de GPT-5.4, Chat Completions ne prend pas en charge les appels d’outils lorsque reasoning_effort a une valeur autre que none.
La structure de l’API pour les sorties structurées est différente. Dans Responses, utilisez text.format au lieu de response_format. Pour en savoir plus, consultez le guide des sorties structurées.
La structure de l’API pour les appels de fonctions est différente, tant pour la configuration des fonctions dans la requête que pour les appels de fonctions renvoyés dans la réponse. Consultez le guide des appels de fonctions pour connaître toutes les différences.
Le SDK Responses dispose d’un utilitaire output_text, absent du SDK Chat Completions.
Avec Chat Completions, vous devez gérer manuellement l’état de la conversation. L’API Responses est compatible avec l’API Conversations pour les conversations persistantes et permet aussi de transmettre un previous_response_id pour enchaîner facilement les réponses.
Migration depuis Chat Completions
Abordez la migration comme trois changements liés : envoyez les requêtes à /v1/responses, lisez les sorties dans un tableau output typé et choisissez comment votre application conservera l’état entre les tours.
1. Mettez à jour les points de terminaison de génération
Commencez par remplacer vos points de terminaison de génération post /v1/chat/completions par post /v1/responses.
Si vous n’utilisez ni fonctions ni entrées multimodales, les messages simples fournis en entrée sont compatibles d’une API à l’autre :
Chat Completions utilise messages en entrée comme en sortie. Responses utilise des tableaux input et output d’éléments typés. message est un type d’élément, au même titre que reasoning, function_call et function_call_output.
Concept dans Chat Completions
Équivalent dans Responses
messages[]
input, sous forme de chaîne ou de tableau d’éléments d’entrée
Instructions système ou développeur
instructions au premier niveau, ou des éléments de type message compatibles si vous devez conserver un historique de conversation existant
Message utilisateur
Un élément d’entrée de type message avec role: "user"
Message de l’assistant
Un élément de sortie de type message dans response.output ; transmettez-le à nouveau dans input si vous gérez l’état manuellement
Appel d’outil ou de fonction
Un élément de sortie de type function_call
Résultat d’un outil ou d’une fonction
Un élément d’entrée de type function_call_output, associé à l’appel par call_id
Générations multiples avec n
Non disponible dans Responses ; envoyez des requêtes distinctes si vous avez besoin de plusieurs sorties candidates
Si vous avez uniquement besoin du texte final, utilisez l’utilitaire output_text du SDK. Si votre workflow utilise le raisonnement, des outils ou des sorties multimodales, parcourez response.output et traitez chaque élément selon son type.
3. Adaptez les conversations à plusieurs tours
Si votre application propose des conversations à plusieurs tours, adaptez votre logique de gestion du contexte. Responses offre trois options courantes pour gérer l’état :
Utilisez previous_response_id si vous souhaitez qu’OpenAI gère le contexte des réponses précédentes. Renvoyez les mêmes instructions à chaque requête, car previous_response_id ne reprend pas les instructions de premier niveau de la réponse précédente.
Transmettez à nouveau les éléments output précédents dans la requête suivante si vous devez gérer ou réduire vous-même le contexte.
Utilisez l’API Conversations si vous avez besoin d’un objet de conversation persistant.
Chat Completions
Avec Chat Completions, vous stockez l’historique de la conversation et envoyez à chaque requête
le tableau messages contenant tous les messages accumulés.
Conversation à plusieurs tours
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16let messages = [ { role: "system", content: "You are a helpful assistant." }, { role: "user", content: "What is the capital of France?" },];constres1=await client.chat.completions.create({ model: "gpt-6-astra", messages,});messages = messages.concat([res1.choices[0].message]);messages.push({ role: "user", content: "And its population?" });constres2=await client.chat.completions.create({ model: "gpt-6-astra", messages,});
1
2
3
4
5
6
7
8
9
10messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What is the capital of France?"},]res1 = client.chat.completions.create(model="gpt-6-astra", messages=messages)messages += [res1.choices[0].message]messages += [{"role": "user", "content": "And its population?"}]res2 = client.chat.completions.create(model="gpt-6-astra", messages=messages)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.models.chat.completions.ChatCompletionCreateParams;var params = ChatCompletionCreateParams.builder() .model("gpt-6-astra") .addSystemMessage("You are a helpful assistant.") .addUserMessage("What is the capital of France?") .build();var first = client.chat().completions().create(params);var second = client .chat() .completions() .create( params.toBuilder() .addAssistantMessage(first.choices().get(0).message().content().orElseThrow()) .addUserMessage("And its population?") .build());second.choices().stream() .flatMap(choice -> choice.message().content().stream()) .forEach(System.out::println);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18using OpenAI.Chat;string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;string model = "gpt-6-astra";ChatClient client = new(model, key);List<ChatMessage> messages =[ new SystemChatMessage("You are a helpful assistant."), new UserChatMessage("What is the capital of France?"),];ChatCompletion first = await client.CompleteChatAsync(messages);messages.Add(new AssistantChatMessage(first));messages.Add(new UserChatMessage("And its population?"));ChatCompletion second = await client.CompleteChatAsync(messages);Console.WriteLine(second.Content[0].Text);
Avec Responses, vous pouvez transmettre manuellement les sorties d’une réponse
en entrée d’une autre.
Conversation à plusieurs tours
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import { toResponseInputItems } from"openai/lib/responses/ResponseInputItems";let context = [{ role: "user", content: "What is the capital of France?" }];constres1=await client.responses.create({ model: "gpt-6-astra", input: context,});// Append the first response’s output to contextcontext = context.concat(toResponseInputItems(res1.output));// Add the next user messagecontext.push({ role: "user", content: "And its population?" });constres2=await client.responses.create({ model: "gpt-6-astra", input: context,});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16context = [{"role": "user", "content": "What is the capital of France?"}]res1 = client.responses.create( model="gpt-6-astra", input=context,)# Append the first response's output to contextcontext += res1.output# Add the next user messagecontext += [{"role": "user", "content": "And its population?"}]res2 = client.responses.create( model="gpt-6-astra", input=context,)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17using OpenAI.Responses;#pragma warning disable OPENAI001string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;ResponsesClient client = new(key);ResponseResult first = await client.CreateResponseAsync( "gpt-6-astra", "What is the capital of France?");ResponseResult second = await client.CreateResponseAsync( "gpt-6-astra", "And its population?", previousResponseId: first.Id);Console.WriteLine(second.GetOutputText());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18require "openai"client = OpenAI::Client.newfirst = client.responses.create( model: "gpt-6-astra", input: "What is the capital of France?", store: true)second = client.responses.create( model: "gpt-6-astra", previous_response_id: first.id, input: "And its population?", store: true)puts(second.output_text)
Même si vous utilisez previous_response_id, tous les tokens d’entrée précédents des réponses de la chaîne sont facturés comme tokens d’entrée dans l’API.
4. Déterminez quand conserver l’état
Les réponses de Responses sont stockées par défaut. Celles de Chat Completions le sont par défaut pour les nouveaux comptes. Pour désactiver le stockage dans l’une ou l’autre API, définissez store: false.
Certaines organisations, notamment celles soumises à une politique de non-conservation des données (ZDR), ne peuvent pas utiliser l’API Responses avec conservation de l’état en raison d’exigences de conformité ou de politiques de conservation des données. Pour répondre à ces besoins, OpenAI propose des éléments de raisonnement chiffrés, qui permettent de garder un workflow sans état tout en bénéficiant des éléments de raisonnement.
Pour désactiver la conservation de l’état tout en bénéficiant du raisonnement :
Conservez et retransmettez chaque élément de raisonnement renvoyé. Chaque élément inclut encrypted_content par défaut lorsque vous créez une réponse.
L’API renvoie alors une version chiffrée des tokens de raisonnement, que vous pouvez retransmettre dans les requêtes suivantes comme des éléments de raisonnement ordinaires.
Pour les organisations soumises à la ZDR, OpenAI impose automatiquement store: false. Lorsqu’une requête inclut encrypted_content, ce contenu est déchiffré en mémoire, utilisé pour générer la réponse suivante, puis supprimé de manière sécurisée. Tous les nouveaux tokens de raisonnement sont immédiatement chiffrés et vous sont renvoyés, ce qui garantit qu’aucun état intermédiaire n’est conservé.
5. Mettez à jour les définitions et les sorties des fonctions
La définition des fonctions présente deux différences mineures, mais notables, entre Chat Completions et Responses.
Dans Chat Completions, les définitions de fonctions utilisent un étiquetage externe. Dans Responses, elles utilisent un étiquetage interne.
Dans Chat Completions, les fonctions ne sont pas strictes par défaut. Dans Responses, si vous omettez strict, l’API tente d’utiliser le mode strict ; si le schéma ne peut pas être rendu compatible, Responses se rabat sur un appel de fonction non strict, sans garantie de conformité au schéma, et renvoie l’outil après résolution avec strict: false. Pour conserver explicitement le comportement non strict dans Responses, définissez strict: false.
L’exemple de fonction de l’API Responses à droite est fonctionnellement équivalent à celui de Chat Completions à gauche.
Dans Responses, les appels d’outils et leurs sorties sont deux types d’éléments distincts, associés au moyen d’un call_id. Consultez
la documentation sur l’appel de fonction pour en savoir plus sur le fonctionnement des appels de fonction dans Responses.
6. Mettez à jour les définitions des sorties structurées
Dans l’API Responses, les définitions des sorties structurées sont passées de response_format à text.format :
La diffusion en continu de Chat Completions renvoie des fragments incrémentaux contenant un champ delta. Celle de Responses utilise des événements typés envoyés par le serveur. Mettez à jour le code qui traite les flux pour qu’il adapte le traitement au type de chaque événement et gère les événements nécessaires à votre interface ou à votre couche d’orchestration.
Pour la diffusion de texte en continu, écoutez des événements tels que :
Si certains cas d’utilisation de votre application peuvent bénéficier des outils natifs d’OpenAI, vous pouvez modifier vos appels d’outils pour utiliser directement ces outils prêts à l’emploi.
Chat Completions
Avec Chat Completions, vous ne pouvez pas utiliser nativement les outils hébergés par OpenAI et devez
écrire votre propre intégration d’outils.
Cet exemple utilise GPT-5.6, car GPT-6 Astra nécessite l’API Responses
pour les appels d’outils.
Outil de recherche web
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24asyncfunctionweb_search(query) {constres=awaitfetch(`https://api.example.com/search?q=${query}`);constdata=await res.json();return data.results;}constcompletion=await client.chat.completions.create({ model: "gpt-5.6", messages: [ { role: "system", content: "You are a helpful assistant." }, { role: "user", content: "Who is the current president of France?" }, ], functions: [ { name: "web_search", description: "Search the web for information", parameters: { type: "object", properties: { query: { type: "string" } }, required: ["query"], }, }, ],});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26import requestsdef web_search(query): r = requests.get(f"https://api.example.com/search?q={query}") return r.json().get("results", [])completion = client.chat.completions.create( model="gpt-5.6", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who is the current president of France?"}, ], functions=[ { "name": "web_search", "description": "Search the web for information", "parameters": { "type": "object", "properties": {"query": {"type": "string"}}, "required": ["query"], }, } ],)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34package mainimport ( "context" "fmt" "github.com/openai/openai-go/v3" "github.com/openai/openai-go/v3/shared")func main() { client := openai.NewClient() completion, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{ Model: "gpt-5.6", Messages: []openai.ChatCompletionMessageParamUnion{ openai.SystemMessage("You are a helpful assistant."), openai.UserMessage("Who is the current president of France?"), }, Functions: []openai.ChatCompletionNewParamsFunction{{ Name: "web_search", Description: openai.String("Search the web for information"), Parameters: map[string]any{ "type": "object", "properties": map[string]any{"query": map[string]any{"type": "string"}}, "required": []string{"query"}, }, }}, ReasoningEffort: shared.ReasoningEffortNone, }) if err != nil { panic(err) } fmt.Println(completion.Choices[0].Message)}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.core.JsonValue;import com.openai.models.FunctionParameters;import com.openai.models.ReasoningEffort;import com.openai.models.chat.completions.ChatCompletionCreateParams;import java.util.List;import java.util.Map;ChatCompletionCreateParams params = ChatCompletionCreateParams.builder() .model("gpt-5.6") .reasoningEffort(ReasoningEffort.NONE) .addSystemMessage("You are a helpful assistant.") .addUserMessage("Who is the current president of France?") .addFunction( ChatCompletionCreateParams.Function.builder() .name("web_search") .description("Search the web for information") .parameters( FunctionParameters.builder() .putAdditionalProperty("type", JsonValue.from("object")) .putAdditionalProperty( "properties", JsonValue.from(Map.of("query", Map.of("type", "string")))) .putAdditionalProperty("required", JsonValue.from(List.of("query"))) .build()) .build()) .build();client.chat().completions().create(params).choices().stream() .map(choice -> choice.message()) .forEach(System.out::println);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31require "openai"client = OpenAI::Client.newcompletion = client.chat.completions.create( model: "gpt-5.6", reasoning_effort: :none, messages: [ { role: :system, content: "You are a helpful assistant." }, { role: :user, content: "Who is the current president of France?" } ], functions: [ { name: "web_search", description: "Search the web for information", parameters: { type: "object", properties: { query: { type: "string" } }, required: ["query"] } } ])puts(completion.choices.fetch(0).message)
Avec Responses, vous pouvez spécifier les outils que vous souhaitez que le modèle utilise.
Outil de recherche web
JavaScript
1
2
3
4
5
6
7constanswer=await client.responses.create({ model: "gpt-6-astra", input: "Who is the current president of France?", tools: [{ type: "web_search" }],});console.log(answer.output_text);
1
2
3
4
5
6
7answer = client.responses.create( model="gpt-6-astra", input="Who is the current president of France?", tools=[{"type": "web_search"}],)print(answer.output_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.models.responses.ResponseCreateParams;import com.openai.models.responses.WebSearchTool;ResponseCreateParams params = ResponseCreateParams.builder() .model("gpt-6-astra") .input("Who is the current president of France?") .addTool(WebSearchTool.builder().type(WebSearchTool.Type.WEB_SEARCH).build()) .build();client.responses().create(params).output().stream() .flatMap(item -> item.message().stream()) .flatMap(message -> message.content().stream()) .flatMap(content -> content.outputText().stream()) .forEach(text -> System.out.println(text.text()));
1
2
3
4
5
6
7
8
9
10
11
12
13
14using OpenAI.Responses;#pragma warning disable OPENAI001string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;ResponsesClient client = new(key);CreateResponseOptions options = new() { Model = "gpt-6-astra" };options.Tools.Add(ResponseTool.CreateWebSearchTool());options.InputItems.Add( ResponseItem.CreateUserMessageItem("Who is the current president of France?"));ResponseResult response = await client.CreateResponseAsync(options);Console.WriteLine(response.GetOutputText());
1
2
3
4
5
6
7
8
9
10
11require "openai"client = OpenAI::Client.newresponse = client.responses.create( model: "gpt-6-astra", input: "Who is the current president of France?", tools: [{ type: :web_search }])puts(response.output_text)
1
2
3
4
5
6
7
8curl https://api.openai.com/v1/responses \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "gpt-6-astra", "input": "Who is the current president of France?", "tools": [{"type": "web_search"}] }'
9. Vérifiez les erreurs de migration courantes
Faites attention aux erreurs suivantes lors du passage de votre code de Chat Completions à Responses :
Lire choices[0].message.content au lieu de response.output_text ou de response.output.
Traiter chaque entrée de output comme un message. Le raisonnement, les appels d’outils et les appels de fonction correspondent à des types d’éléments distincts.
Omettre les éléments de raisonnement, d’appel de fonction ou de sortie d’appel de fonction lors de la transmission manuelle du contexte à la réponse suivante.
Envoyer le résultat d’une fonction sans le call_id correspondant.
Utiliser response_format dans une requête Responses au lieu de text.format.
Réutiliser le code qui traite les fragments de diffusion en continu de Chat Completions sans gérer les événements typés de Responses.
Supposer que previous_response_id supprime la facturation du contexte antérieur. Les tokens d’entrée précédents de la chaîne de réponses restent facturés comme des tokens d’entrée.
Liste de contrôle pour un déploiement progressif
Chat Completions reste pris en charge : vous pouvez donc migrer un parcours utilisateur à la fois.
Commencez par un workflow simple de génération de texte.
Mettez à jour le point de terminaison, le corps de la requête et le traitement des sorties.
Choisissez si le workflow utilise previous_response_id, le renvoi manuel des éléments ou l’API Conversations.
Si le workflow est sans état ou soumis à la politique ZDR, ajoutez store: false et incluez les éléments de raisonnement chiffrés lorsque le contexte de raisonnement doit être conservé d’un tour à l’autre.
Migrez les définitions de fonctions et vérifiez que les sorties des appels de fonction contiennent le bon call_id.
Déplacez les schémas de sorties structurées de response_format vers text.format.
Mettez à jour le code qui traite les flux pour qu’il gère les événements typés de Responses.
Remplacez l’orchestration personnalisée par des outils hébergés par OpenAI lorsqu’ils conviennent au workflow.
Comparez le comportement, la latence, la consommation de tokens et les erreurs avant d’acheminer davantage de trafic vers Responses.
Nous recommandons de migrer progressivement tous les workflows vers l’API Responses pour profiter des dernières fonctionnalités et améliorations d’OpenAI.
API Assistants
À partir des retours des développeurs sur la version bêta de l’API Assistants, nous avons apporté des améliorations majeures à l’API Responses pour la rendre plus flexible, plus rapide et plus facile à utiliser. L’API Responses est la voie d’avenir pour créer des agents sur OpenAI.
L’API Assistants a été officiellement arrêtée le 26 août 2026 et n’est plus disponible. Suivez le guide de migration pour adapter votre intégration à l’API Responses.