{"slug": "additive-openai-2-new-response-fields", "title": "[Additive] OpenAI: 2 new response fields", "summary": "OpenAI added two additive response fields, UsageCompletionsResult.input_cache_write_30m_tokens and DecisionsUsageResult.input_cache_write_30m_tokens, to its API, according to an API change tracker. The same tracker lists breaking changes shipped alongside them, including the removal of the spend_control response field and the spend_control parameter no longer being accepted in CreateAgentSessionParams and UpdateAgentSessionParams, plus new enum values such as \"prompt\" for VoiceResource.type and \"degraded\" for ExternalStorageStatus that break exhaustive switches and strict parsers. WebSearchActionFind.url and BetaWebSearchActionFind.url are no longer guaranteed present and can now be null.", "body_md": "[OpenAI](https://driftwatch.et/apis/openai)2 additive\n\n## 2 new response fields\n\n- UsageCompletionsResult.input_cache_write_30m_tokens\n- DecisionsUsageResult.input_cache_write_30m_tokens\n\n[APIs](https://driftwatch.et/providers) / OpenAI\n\nBreaking changes, deprecations and new fields in the OpenAI API, as they ship.\n\n- Breakingdirection flip: their tools call this safe[spend_control is no longer accepted](https://driftwatch.et/changes/openai-2026-10-16-dd257ddb)Usually ignored rather than rejected, so the call succeeds and does something subtly different. 2 places: CreateAgentSessionParams.spend_control, UpdateAgentSessionParams.spend_control## Code that breaks\n\n```\nawait client.post(\"/…\", {\n  // spend_control is now ignored, not rejected\n  spend_control: value,\n});\n```\n\n- Breaking[Response field spend_control removed](https://driftwatch.et/changes/openai-2026-10-16-35e44462)Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call. SessionResource.spend_control · reachable from 5 operations## Code that breaks\n\n``` js\n// response.spend_control is now undefined\nconst spend_control = response.spend_control;\n```\n\n- Breakingdirection flip: their tools call this safe[type can now return \"prompt\"](https://driftwatch.et/changes/openai-2026-10-16-08a1b1f2)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. VoiceResource.type · reachable from 1 operation## Code that breaks\n\n```\nswitch (response.type) {\n  // existing branches …\n  // no branch for \"prompt\"\n  default:\n    throw new Error(\"unexpected type\");\n}\n```\n\n- Additive[Response field prompt added](https://driftwatch.et/changes/openai-2026-10-16-4d61e329)No action needed unless you validate responses against a closed schema. VoiceResource.prompt · reachable from 1 operation\n\n- Breakingdirection flip: their tools call this safe[value can now return \"degraded\"](https://driftwatch.et/changes/openai-2026-10-16-cf106caa)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. ExternalStorageStatus · reachable from 4 operations## Code that breaks\n\n```\nswitch (response) {\n  // existing branches …\n  // no branch for \"degraded\"\n  default:\n    throw new Error(\"unexpected value\");\n}\n```\n\n- Breakingdirection flip: their tools call this safe[Response field url is no longer guaranteed](https://driftwatch.et/changes/openai-2026-10-15-a8bd6f1b)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. no longer guaranteed present; can now be null 2 places: BetaWebSearchActionFind.url, WebSearchActionFind.url## Code that breaks\n\n``` js\n// response.url may now be absent or null\nconst url = response.url ?? fallback;\n```\n\n- WebSearchActionFind.url\n- BetaWebSearchActionFind.url\n\n- ImagesResponse.safety_identifier\n- ImageGenCompletedEvent.safety_identifier\n- ImageEditCompletedEvent.safety_identifier\n\n- CreateImageEditRequest.safety_identifier\n- CreateImageRequest.safety_identifier\n- EditImageBodyJsonParam.safety_identifier\n\n- Additive[Request property phase added](https://driftwatch.et/changes/openai-2026-10-15-24c50cb9)No action needed unless it is required. DecisionInputMessage.phase · reachable from 1 operation\n\n- Error-2.param\n- Error-2.type\n- VideoResource.error.param\n- VideoResource.error.type\n- BetaResponseError.param\n- BetaResponseError.type\n- ResponseError.param\n- ResponseError.type\n\n- Breakingdirection flip: their tools call this safe[value can now return \"AU_STORAGE_PROCESSING\", \"IN_STORAGE_PROCESSING\", \"JP_STORAGE_PROCESSING\"](https://driftwatch.et/changes/openai-2026-10-14-673db448)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. PublicProjectResidency · reachable from 5 operations## Code that breaks\n\n```\nswitch (response) {\n  // existing branches …\n  // no branch for \"AU_STORAGE_PROCESSING\"\n  // no branch for \"IN_STORAGE_PROCESSING\"\n  // no branch for \"JP_STORAGE_PROCESSING\"\n  default:\n    throw new Error(\"unexpected value\");\n}\n```\n\n- Additive[Request property scopes added](https://driftwatch.et/changes/openai-2026-10-14-0d1fb9cc)No action needed unless it is required. UpdateProjectApiKeyBody.scopes · reachable from 1 operation\n\n- ImageGenToolCall.error\n- BetaImageGenToolCall.error\n\n- Additive[POST /organization/projects/{project_id}/api_keys/{api_key_id} added](https://driftwatch.et/changes/openai-2026-10-13-65364adb)No action needed. POST /organization/projects/{project_id}/api_keys/{api_key_id}\n\n- Additive[/organization/usage/decisions added](https://driftwatch.et/changes/openai-2026-10-09-275974de)No action needed. /organization/usage/decisions\n\n- Breakingdirection flip: their tools call this safe[value can now return \"suspended\"](https://driftwatch.et/changes/openai-2026-10-08-4a7c1371)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. EnvironmentStatusResource · reachable from 3 operations## Code that breaks\n\n```\nswitch (response) {\n  // existing branches …\n  // no branch for \"suspended\"\n  default:\n    throw new Error(\"unexpected value\");\n}\n```\n\n- Breakingdirection flip: their tools call this safe[value can now return \"expired\", \"suspended\"](https://driftwatch.et/changes/openai-2026-10-08-c7102a8f)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. SessionEnvironmentStatusResource · reachable from 2 operations## Code that breaks\n\n```\nswitch (response) {\n  // existing branches …\n  // no branch for \"expired\"\n  // no branch for \"suspended\"\n  default:\n    throw new Error(\"unexpected value\");\n}\n```\n\n- Additive[Response field detailed_explanation added](https://driftwatch.et/changes/openai-2026-10-08-4e4137cb)No action needed unless you validate responses against a closed schema. SafetyAlertResource.detailed_explanation · reachable from 1 operation\n\n- Breakingdirection flip: their tools call this safe[value can now return \"ready\"](https://driftwatch.et/changes/openai-2026-10-08-3c4525d9)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. EnvironmentStatusResource · reachable from 3 operations## Code that breaks\n\n```\nswitch (response) {\n  // existing branches …\n  // no branch for \"ready\"\n  default:\n    throw new Error(\"unexpected value\");\n}\n```\n\n- Additive[/agents/environments added](https://driftwatch.et/changes/openai-2026-10-08-6bbce226)No action needed. /agents/environments\n- Additive[Request property environment_id added](https://driftwatch.et/changes/openai-2026-10-08-9178d58c)No action needed unless it is required. EnvironmentParamOpenaiHosted.environment_id · reachable from 1 operation\n\n- Additive[Response field spend_control added](https://driftwatch.et/changes/openai-2026-10-08-04d767ea)No action needed unless you validate responses against a closed schema. SessionResource.spend_control · reachable from 5 operations\n\n- CreateAgentSessionParams.spend_control\n- UpdateAgentSessionParams.spend_control\n\n- Breaking[limit changed type](https://driftwatch.et/changes/openai-2026-10-08-2e11d1d1)Serialization mismatch. Integer-to-string moves are the usual cause and the usual outage. GET /agents · limit · 5 call sites## Code that breaks\n\n```\n// payload.limit\n// was: integer|null\n// now: integer\n```\n\n- Breaking[after changed type](https://driftwatch.et/changes/openai-2026-10-08-fd21b283)Serialization mismatch. Integer-to-string moves are the usual cause and the usual outage. GET /agents/sessions/{session_id}/artifacts · after## Code that breaks\n\n```\n// payload.after\n// was: null|string\n// now: string\n```\n\n- Breakingdirection flip: their tools call this safe[Response values are no longer constrained](https://driftwatch.et/changes/openai-2026-10-08-3ab40de9)The documented set of values is gone, so anything can appear. Every exhaustive switch and generated enum over this field is now incomplete. VoiceResource.type · reachable from 1 operation\n\n- Breaking[voice no longer accepts \"shitan\"](https://driftwatch.et/changes/openai-2026-10-07-ac28513e)A value you may have hardcoded is now rejected. LiveInitialSessionAudioOutputParam.voice · reachable from 2 operations## Code that breaks\n\n```\n// sending \"shitan\" for voice is now rejected\n```\n\n- Breakingdirection flip: their tools call this safe[value can now return \"billing_not_active\"](https://driftwatch.et/changes/openai-2026-10-06-9f7b5d71)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. SessionTurnErrorCodeResource · reachable from 6 operations## Code that breaks\n\n```\nswitch (response) {\n  // existing branches …\n  // no branch for \"billing_not_active\"\n  default:\n    throw new Error(\"unexpected value\");\n}\n```\n\n- Behavioral[429 is now documented on /agents/environments/{environment_id}/files](https://driftwatch.et/changes/openai-2026-10-06-d1da5762)An unhandled branch in your error handling. POST /agents/environments/{environment_id}/files · 2 call sites\n\n- Breaking[Response field compute_units removed](https://driftwatch.et/changes/openai-2026-10-06-64c9db86)Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call. ResponseUsageResource.compute_units · reachable from 1 operation## Code that breaks\n\n``` js\n// response.compute_units is now undefined\nconst compute_units = response.compute_units;\n```\n\n- Additive[metadata is now optional](https://driftwatch.et/changes/openai-2026-10-06-88f529d4)No action needed. GET /vaults · metadata · 2 call sites\n- Additive[POST /vaults/{vault_id} added](https://driftwatch.et/changes/openai-2026-10-06-aa14b04b)No action needed. POST /vaults/{vault_id}\n\n- Additive[/decisions added](https://driftwatch.et/changes/openai-2026-10-06-7d856756)No action needed. /decisions\n- Additive[Response field cache_write_tokens added](https://driftwatch.et/changes/openai-2026-10-06-9eb48b0f)No action needed unless you validate responses against a closed schema. InputTokensDetailsResource.cache_write_tokens · reachable from 1 operation\n\n- Breaking[environment changed type](https://driftwatch.et/changes/openai-2026-10-06-2c55ed5d)Serialization mismatch. Integer-to-string moves are the usual cause and the usual outage. LiveHostedShellToolInputParam.environment · reachable from 3 operations## Code that breaks\n\n```\n// payload.environment\n// was: null|object\n// now: null\n```\n\n- MisalignmentErrorDetailsResource.review_target\n- BetaMisalignmentErrorDetailsResource.review_target\n\n- Additive[Request field now accepts null](https://driftwatch.et/changes/openai-2026-10-06-f83267a6)A relaxation. Existing payloads are unaffected. LiveHostedShellToolInputParam.environment · reachable from 3 operations\n\n- Breakingdirection flip: their tools call this safe[Response field bytes is no longer guaranteed](https://driftwatch.et/changes/openai-2026-10-06-46bcd119)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. can now be null 2 places: OpenAIFile.bytes, Upload.file.bytes## Code that breaks\n\n``` js\n// response.bytes may now be absent or null\nconst bytes = response.bytes ?? fallback;\n```\n\n- Breakingdirection flip: their tools call this safe[Response field finish_reason is no longer guaranteed](https://driftwatch.et/changes/openai-2026-10-06-abbdcd05)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. CreateChatCompletionStreamResponse.choices[].finish_reason · reachable from 1 operation## Code that breaks\n\n``` js\n// response.choices[0].finish_reason may now be absent or null\nconst finish_reason = response.choices[0].finish_reason ?? fallback;\n```\n\n- Additive[Response field audio added](https://driftwatch.et/changes/openai-2026-10-06-c63cc849)No action needed unless you validate responses against a closed schema. ChatCompletionStreamResponseDelta.audio · reachable from 1 operation\n\n- Breaking[voice no longer accepts \"aube\"](https://driftwatch.et/changes/openai-2026-10-05-c76c343c)A value you may have hardcoded is now rejected. LiveInitialSessionAudioOutputParam.voice · reachable from 2 operations## Code that breaks\n\n```\n// sending \"aube\" for voice is now rejected\n```\n\n- Behavioral[201 is now documented on /organization/invites](https://driftwatch.et/changes/openai-2026-10-03-428f1138)An unhandled branch in your error handling. POST /organization/invites · 4 call sites\n\n- Breakingdirection flip: their tools call this safe[value can now return \"organization_spend_limit_exceeded\", \"organization_usage_limit_exceeded\", \"project_spend_limit_exceeded\"](https://driftwatch.et/changes/openai-2026-10-02-1a3a14dc)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. SessionTurnErrorCodeResource · reachable from 6 operations## Code that breaks\n\n```\nswitch (response) {\n  // existing branches …\n  // no branch for \"organization_spend_limit_exceeded\"\n  // no branch for \"organization_usage_limit_exceeded\"\n  // no branch for \"project_spend_limit_exceeded\"\n  default:\n    throw new Error(\"unexpected value\");\n}\n```\n\n- Additive[Response field user_id added](https://driftwatch.et/changes/openai-2026-10-02-ac4c7218)No action needed unless you validate responses against a closed schema. CostsResult.user_id · reachable from 11 operations\n\n- Additive[/agents/sessions/{session_id}/turns/{turn_id}/items added](https://driftwatch.et/changes/openai-2026-10-02-f3ef76e7)No action needed. /agents/sessions/{session_id}/turns/{turn_id}/items\n\n- UsageWebSearchCallsResult.api_source\n- CostsResult.api_source\n- UsageCompletionsResult.api_source\n\n- Breaking[type no longer accepts \"consent\"](https://driftwatch.et/changes/openai-2026-10-01-5e5bddbe)A value you may have hardcoded is now rejected. CreateVoiceFromConsentRequest.type · reachable from 1 operation## Code that breaks\n\n```\n// sending \"consent\" for type is now rejected\n```\n\n- Behavioral[Default value changed](https://driftwatch.et/changes/openai-2026-10-01-dc584209)Behavior shifts for every call that omits the field. CreateVoiceFromConsentRequest.type · reachable from 1 operation\n- Additive[Response field type added](https://driftwatch.et/changes/openai-2026-10-01-065ca125)No action needed unless you validate responses against a closed schema. VoiceResource.type · reachable from 1 operation\n\n- Breakingdirection flip: their tools call this safe[Response field refusal is no longer guaranteed](https://driftwatch.et/changes/openai-2026-10-01-c1ca1489)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. ChatCompletionResponseMessage.refusal · reachable from 4 operations## Code that breaks\n\n``` js\n// response.refusal may now be absent or null\nconst refusal = response.refusal ?? fallback;\n```\n\n- Breakingdirection flip: their tools call this safe[Response field first_id is no longer guaranteed](https://driftwatch.et/changes/openai-2026-10-01-61bc1937)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. ChatCompletionList.first_id · reachable from 1 operation## Code that breaks\n\n``` js\n// response.first_id may now be absent or null\nconst first_id = response.first_id ?? fallback;\n```\n\n- Breakingdirection flip: their tools call this safe[Response field last_id is no longer guaranteed](https://driftwatch.et/changes/openai-2026-10-01-b7e3dc08)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. ChatCompletionList.last_id · reachable from 1 operation## Code that breaks\n\n``` js\n// response.last_id may now be absent or null\nconst last_id = response.last_id ?? fallback;\n```\n\n- Breakingdirection flip: their tools call this safe[audio_sample is no longer accepted](https://driftwatch.et/changes/openai-2026-10-01-de6dea06)Usually ignored rather than rejected, so the call succeeds and does something subtly different. CreateVoiceRequest.audio_sample · reachable from 1 operation## Code that breaks\n\n```\nawait client.post(\"/…\", {\n  // audio_sample is now ignored, not rejected\n  audio_sample: value,\n});\n```\n\n- Breakingdirection flip: their tools call this safe[consent is no longer accepted](https://driftwatch.et/changes/openai-2026-10-01-1be14473)Usually ignored rather than rejected, so the call succeeds and does something subtly different. CreateVoiceRequest.consent · reachable from 1 operation## Code that breaks\n\n```\nawait client.post(\"/…\", {\n  // consent is now ignored, not rejected\n  consent: value,\n});\n```\n\n- Breakingdirection flip: their tools call this safe[name is no longer accepted](https://driftwatch.et/changes/openai-2026-10-01-9b7060f5)Usually ignored rather than rejected, so the call succeeds and does something subtly different. CreateVoiceRequest.name · reachable from 1 operation## Code that breaks\n\n```\nawait client.post(\"/…\", {\n  // name is now ignored, not rejected\n  name: value,\n});\n```\n\n- Breaking[value no longer accepts \"ultrafast\"](https://driftwatch.et/changes/openai-2026-10-01-eecd749d)A value you may have hardcoded is now rejected. no longer accepts \"ultrafast\" 5 places: ServiceTierParam, CreateAgentParams.service_tier, SessionAgentConfigParam.service_tier, UpdateAgentParams.service_tier, UpdateSessionAgentParam.service_tier## Code that breaks\n\n```\n// sending \"ultrafast\" for undefined is now rejected\n```\n\n- Breaking[model is now required](https://driftwatch.et/changes/openai-2026-09-30-24f4bbee)Partial payloads are rejected. 2 places: CreateImageEditRequest.model, CreateImageRequest.model## Code that breaks\n\n```\nawait client.post(\"/…\", {\n  // …\n  model: /* now required */,\n});\n```\n\n- Deprecation[POST /images/variations deprecated](https://driftwatch.et/changes/openai-2026-09-30-47293aa2)Still works today. This is the earliest warning you will get before it is removed. POST /images/variations\n- Behavioral[Default value changed](https://driftwatch.et/changes/openai-2026-09-30-8ae860a5)Behavior shifts for every call that omits the field. CreateImageEditRequest.size · reachable from 1 operation\n- Behavioral[Default value changed](https://driftwatch.et/changes/openai-2026-09-30-84eaa692)Behavior shifts for every call that omits the field. EditImageBodyJsonParam.model · reachable from 1 operation\n\n- Breaking[POST /evals/{eval_id}/runs/{run_id} removed](https://driftwatch.et/changes/openai-2026-09-30-5e4cd2c7)This verb now 405s. The path still resolves, so a health check on the URL will not catch it. POST /evals/{eval_id}/runs/{run_id}## Code that breaks\n\n```\n// Was:\nawait client.request(\"POST\", \"/evals/{eval_id}/runs/{run_id}\");\n// Now: 405\n```\n\n- Additive[/evals/{eval_id}/runs/{run_id}/cancel added](https://driftwatch.et/changes/openai-2026-09-30-7492acd1)No action needed. /evals/{eval_id}/runs/{run_id}/cancel\n\n- Behavioral[502 is now documented on /live/sessions](https://driftwatch.et/changes/openai-2026-09-30-23cbb44c)An unhandled branch in your error handling. POST /live/sessions\n- Behavioral[504 is now documented on /live/sessions](https://driftwatch.et/changes/openai-2026-09-30-e5384bba) POST /live/sessions\n\n- Additive[Response field input_cache_write_12h_tokens added](https://driftwatch.et/changes/openai-2026-09-30-0d80c0fa)No action needed unless you validate responses against a closed schema. UsageCompletionsResult.input_cache_write_12h_tokens · reachable from 11 operations\n\n- Additive[/agents/sessions/{session_id}/traces added](https://driftwatch.et/changes/openai-2026-09-30-6333742a)No action needed. /agents/sessions/{session_id}/traces\n\n- Breakingdirection flip: their tools call this safe[Response field model is no longer guaranteed](https://driftwatch.et/changes/openai-2026-09-29-0b8f9e75)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. EvalRun.model · reachable from 4 operations## Code that breaks\n\n``` js\n// response.model may now be absent or null\nconst model = response.model ?? fallback;\n```\n\n- Breakingdirection flip: their tools call this safe[Response field name is no longer guaranteed](https://driftwatch.et/changes/openai-2026-09-29-0dd028d5)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. EvalRun.name · reachable from 4 operations## Code that breaks\n\n``` js\n// response.name may now be absent or null\nconst name = response.name ?? fallback;\n```\n\n- Breakingdirection flip: their tools call this safe[Response field per_model_usage is no longer guaranteed](https://driftwatch.et/changes/openai-2026-09-29-6e07444c)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. EvalRun.per_model_usage · reachable from 4 operations## Code that breaks\n\n``` js\n// response.per_model_usage may now be absent or null\nconst per_model_usage = response.per_model_usage ?? fallback;\n```\n\n- Breakingdirection flip: their tools call this safe[Response field per_testing_criteria_results is no longer guaranteed](https://driftwatch.et/changes/openai-2026-09-29-b8930d6c)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. EvalRun.per_testing_criteria_results · reachable from 4 operations## Code that breaks\n\n``` js\n// response.per_testing_criteria_results may now be absent or null\nconst per_testing_criteria_results = response.per_testing_criteria_results ?? fallback;\n```\n\n- Breaking[token_usage changed type](https://driftwatch.et/changes/openai-2026-09-29-18c44c4d)Parse failure, or silent coercion depending on your client. RunGraderResponse.metadata.token_usage · reachable from 1 operation## Code that breaks\n\n```\n// payload.metadata.token_usage\n// was: integer|null\n// now: null|object\n```\n\n- Breakingdirection flip: their tools call this safe[Response field finish_reason is no longer guaranteed](https://driftwatch.et/changes/openai-2026-09-29-e58403fa)Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date. CreateCompletionResponse.choices[].finish_reason · reachable from 1 operation## Code that breaks\n\n``` js\n// response.choices[0].finish_reason may now be absent or null\nconst finish_reason = response.choices[0].finish_reason ?? fallback;\n```\n\n- RunGraderResponse.metadata.token_usage.completion_tokens\n- RunGraderResponse.metadata.token_usage.cached_tokens\n- RunGraderResponse.metadata.token_usage.total_tokens\n- RunGraderResponse.metadata.token_usage.prompt_tokens\n\n- EnvironmentResourceOpenaiHosted.desktop\n- EnvironmentTemplateResource.desktop\n\n- NetworkPolicyParam.blocked_domains\n- EnvironmentParamOpenaiHosted.network.blocked_domains\n- CreateEnvironmentTemplateParams.desktop\n- UpdateEnvironmentTemplateParams.network.blocked_domains\n- UpdateEnvironmentTemplateParams.desktop\n- CreateEnvironmentTemplateParams.network.blocked_domains\n- EnvironmentParamOpenaiHosted.desktop\n\n- Breakingdirection flip: their tools call this safe[value can now return \"gpt-6.1-sol\"](https://driftwatch.et/changes/openai-2026-09-29-57bcdfd1)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. can now return \"gpt-6.1-sol\" 2 places: BetaModelIdsShared, ModelIdsShared## Code that breaks\n\n```\nswitch (response) {\n  // existing branches …\n  // no branch for \"gpt-6.1-sol\"\n  default:\n    throw new Error(\"unexpected value\");\n}\n```\n\n- Additive[Response field container_size added](https://driftwatch.et/changes/openai-2026-09-29-72d27112)No action needed unless you validate responses against a closed schema. EnvironmentResourceOpenaiHosted.container_size · reachable from 5 operations\n- Additive[Request property container_size added](https://driftwatch.et/changes/openai-2026-09-29-b6896b6e)No action needed unless it is required. EnvironmentParamOpenaiHosted.container_size · reachable from 1 operation", "url": "https://wpnews.pro/news/additive-openai-2-new-response-fields", "canonical_source": "https://driftwatch.et/apis/openai#cmvfa562o00010ci9lt6j1s3p-fields", "published_at": "2026-10-19 05:35:43+00:00", "updated_at": "2026-10-19 17:16:35.694236+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-products", "developer-tools", "ai-agents"], "entities": ["OpenAI", "UsageCompletionsResult", "DecisionsUsageResult", "CreateAgentSessionParams", "UpdateAgentSessionParams", "VoiceResource", "ExternalStorageStatus", "WebSearchActionFind"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/additive-openai-2-new-response-fields", "markdown": "https://wpnews.pro/news/additive-openai-2-new-response-fields.md", "text": "https://wpnews.pro/news/additive-openai-2-new-response-fields.txt", "jsonld": "https://wpnews.pro/news/additive-openai-2-new-response-fields.jsonld"}}