> ## Documentation Index > Fetch the complete documentation index at: https://openrouter.ai/docs/llms.txt > Use this file to discover all available pages before exploring further. # GPT-5.4 Migration Guide > Support the phase field for GPT-5.3 Codex, GPT-5.4, GPT-5.4 Pro, GPT-5.5, and GPT-5.5 Pro ## What's New GPT-5.3 Codex, GPT-5.4, GPT-5.4 Pro, GPT-5.5, and GPT-5.5 Pro all use the `phase` field on assistant messages. This field is critical for multi-turn agentic workflows — it tells the model whether an assistant message is intermediate commentary or the final answer. OpenRouter supports `phase` in the [Responses API](/docs/api/api-reference/responses/create-a-response). `phase` is **not available** in the Chat Completions API. The Chat Completions format cannot represent multiple output items with distinct phases in a single response. Use the Responses API for full `phase` support. ## The `phase` Field `phase` appears on assistant output messages and has three possible values: | Value | Meaning | | ---------------- | ------------------------------ | | `null` | No phase specified (default) | | `"commentary"` | Intermediate assistant message | | `"final_answer"` | The final closeout message | `phase` is only valid on **assistant** messages. Do not add `phase` to user or system messages. ## Why It Matters For models like `gpt-5.3-codex`, `gpt-5.4`, `gpt-5.4-pro`, `gpt-5.5`, and `gpt-5.5-pro`, correctly preserving `phase` on assistant messages is **required** for optimal performance. If `phase` metadata is dropped when reconstructing conversation history, significant performance degradation can occur — including early stopping on longer-running tasks. ## Usage ### Responses API When using the Responses API, assistant output items include `phase`. You must persist these items verbatim and pass them back in subsequent requests. ```json lines theme={null} { "model": "openai/gpt-5.4", "input": [ { "type": "message", "role": "user", "content": [ { "type": "input_text", "text": "Refactor the auth module" } ] } ] } ``` The response will include `phase` on assistant output messages: ```json expandable lines theme={null} { "output": [ { "type": "message", "role": "assistant", "content": [ { "type": "output_text", "text": "I'll start by analyzing..." } ], "phase": "commentary" }, { "type": "message", "role": "assistant", "content": [ { "type": "output_text", "text": "Here's the refactored code..." } ], "phase": "final_answer" } ] } ``` For follow-up requests, include the assistant output items with their `phase` intact: ```json expandable lines theme={null} { "model": "openai/gpt-5.4", "input": [ { "type": "message", "role": "user", "content": [ { "type": "input_text", "text": "Refactor the auth module" } ] }, { "type": "message", "role": "assistant", "content": [ { "type": "output_text", "text": "I'll start by analyzing..." } ], "phase": "commentary" }, { "type": "message", "role": "assistant", "content": [ { "type": "output_text", "text": "Here's the refactored code..." } ], "phase": "final_answer" }, { "type": "message", "role": "user", "content": [ { "type": "input_text", "text": "Now add unit tests" } ] } ] } ``` ### Chat Completions API The Chat Completions API does **not** support `phase` in responses. A single chat completion response can only contain one message per choice, so there is no way to represent the separate commentary and final answer output items that models like GPT-5.4 produce. If you need `phase` support for multi-turn agentic workflows, use the [Responses API](/docs/api/api-reference/responses/create-a-response) instead. ## Implementation Pattern When building an integration with the Responses API, persist your output items verbatim, including `phase` on assistant messages: ### Key Rules 1. **Preserve phase on assistant messages** — When you receive a response with `phase`, store it and send it back on subsequent requests. 2. **Do not add phase to user messages** — `phase` is only valid on assistant messages. The Responses API will silently ignore `phase` on user messages. 3. **Do not drop phase** — Omitting `phase` from assistant messages in multi-turn conversations will degrade model performance. 4. **Use the Responses API** — `phase` requires the Responses API. The Chat Completions API cannot represent multi-phase output. ## Supported Models | Model | `phase` Support | | ---------------------- | ------------------------------- | | `openai/gpt-5.5` | Supported | | `openai/gpt-5.5-pro` | Supported | | `openai/gpt-5.4` | Supported | | `openai/gpt-5.4-pro` | Supported | | `openai/gpt-5.3-codex` | Supported | | Other OpenAI models | Silently ignored (safe to pass) | | Non-OpenAI models | Not applicable | Passing `phase` to OpenAI models that don't support it (like `gpt-4o`) is safe — OpenAI silently ignores the field. You do not need to filter `phase` based on the model. ## Breaking Changes None. The `phase` field is additive: * Existing requests without `phase` continue to work on all models * Models that don't support `phase` silently ignore it * No changes are required unless you want to take advantage of improved multi-turn performance with GPT-5.3 Codex, GPT-5.4, GPT-5.4 Pro, GPT-5.5, and GPT-5.5 Pro ## Resources * [Prompt Guidance for GPT-5.4](https://developers.openai.com/api/docs/guides/prompt-guidance/) — OpenAI's official guide covering prompt patterns and migration tips for GPT-5.4, including completeness checks, verification loops, tool persistence, and structured outputs. * [OpenAI Responses API Reference](https://developers.openai.com/api/reference/resources/responses/methods/create) * [Codex CLI Integration Guide](/docs/cookbook/coding-agents/codex-cli) * [OpenRouter API Documentation](/docs/api_reference/overview) * [OpenRouter Codex Models](https://openrouter.ai/models?q=codex)