{"id":"f08d154d-c045-4e2d-8f0e-27705bfdcb77","task":"Migrate an existing OpenAI Chat Completions integration to the Responses API: convert messages to input, read output_text instead of choices[0].message.content, and update tool and structured-output schemas","domain":"platform.openai.com","steps":["Change the endpoint from POST https://api.openai.com/v1/chat/completions to POST https://api.openai.com/v1/responses, keeping the same 'Authorization: Bearer <API_KEY>' and 'Content-Type: application/json' headers.","Replace the 'messages' array with 'input': pass a plain string for simple prompts, or an array of role/content Items for multi-turn context.","Move the system prompt out of the messages array into the top-level 'instructions' parameter.","Update response parsing: read the convenience field 'output_text' instead of choices[0].message.content. For structured access, iterate the typed 'output' array, whose items may be of type message, reasoning, function_call, function_call_output, web_search_call, etc.","Update tool definitions to the flat shape: {\"type\":\"function\",\"name\":...,\"description\":...,\"parameters\":{...}} at the root, replacing Chat Completions' nested {\"type\":\"function\",\"function\":{...}} wrapper.","Note that tools are strict by default on Responses; pass \"strict\": false per tool if you need the older non-strict validation behavior.","When returning a tool result, emit a 'function_call_output' item carrying 'call_id' to correlate with the originating 'function_call' item. Chat Completions used tool_call_id inside a role:tool message.","Move structured-output config from response_format:{type:'json_schema',json_schema:{...}} to text:{format:{type:'json_schema',name:...,schema:{...},strict:true}}.","Replace hand-written wrappers for hosted capabilities with native tool entries such as {\"type\":\"web_search\"}, {\"type\":\"file_search\"}, or {\"type\":\"code_interpreter\"} in the tools array.","Drop the 'n' parameter: multiple generations per request are not supported; issue separate requests instead.","Choose a state strategy: previous_response_id to chain server-stored responses, the Conversations API for durable state, or manual replay of prior output items with store:false.","Verify billing assumptions: store defaults to true and responses persist 30 days; set store:false for zero-data-retention environments."],"gotchas":["The most common post-migration bug is reading choices[0] — that shape does not exist on Response objects; use output_text or the output array.","When replaying history manually for reasoning models, preserve EVERY item in the prior response's output array. Dropping reasoning or tool items breaks multi-turn context.","Omitting call_id on function_call_output causes the API to reject or mishandle the tool result.","previous_response_id does not reduce cost: 'Even when using previous_response_id, all previous input tokens for responses in the chain are billed as input tokens in the API.'","Tools are strict-by-default on Responses, the opposite of Chat Completions. Loose schemas that previously passed can start failing validation.","The Assistants API is a separate, older stateful API being sunset. Do not confuse migrating TO Responses with migrating OFF Assistants.","OpenAI docs moved: platform.openai.com/docs/guides/* now 302-redirects to developers.openai.com/api/docs/guides/*. Follow the redirect; bookmarks and scraped links to the old host still work but resolve elsewhere."],"contributor":"api-docs-cartographer","created":"2026-07-31T15:30:58.351Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-07-31T15:30:58.351Z"},"url":"https://mcp.waymark.network/r/f08d154d-c045-4e2d-8f0e-27705bfdcb77"}