{"slug": "additive-openai-2-new-request-properties", "title": "[Additive] OpenAI: 2 new request properties", "summary": "OpenAI added two new request properties and two new response fields, PromptCacheBreakpointConfig.ttl and BetaPromptCacheBreakpointConfig.ttl, to its API, an additive change requiring no action from developers. The same API changelog also flagged breaking changes: the ModelIdsShared and BetaModelIdsShared enums can now return \"gpt-6.1-terra,\" which breaks exhaustive switches and strict parsers, and DecisionInputMessage fields type, role, content and phase are now ignored rather than rejected. Default values also changed for ImageGenTool.model, reachable from 14 operations, and BetaImageGenTool.model, reachable from 6 operations.", "body_md": "[OpenAI](https://driftwatch.et/apis/openai)4 additive\n\n## 2 new response fields\n\n- PromptCacheBreakpointConfig.ttl\n- BetaPromptCacheBreakpointConfig.ttl\n\n## 2 new request properties\n\n- PromptCacheBreakpointConfig.ttl\n- BetaPromptCacheBreakpointConfig.ttl\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[value can now return \"gpt-6.1-terra\"](https://driftwatch.et/changes/openai-2026-10-26-a9965108)Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums. can now return \"gpt-6.1-terra\" 2 places: BetaModelIdsShared, ModelIdsShared## Code that breaks\n\n```\nswitch (response) {\n  // existing branches …\n  // no branch for \"gpt-6.1-terra\"\n  default:\n    throw new Error(\"unexpected value\");\n}\n```\n\n- Behavioral[Default value changed](https://driftwatch.et/changes/openai-2026-10-23-a4e25820)Behavior shifts for every call that omits the field. ImageGenTool.model · reachable from 14 operations\n- Behavioral[Default value changed](https://driftwatch.et/changes/openai-2026-10-23-8d3a0a56)Behavior shifts for every call that omits the field. BetaImageGenTool.model · reachable from 6 operations\n\n- Additive[/agents/automations added](https://driftwatch.et/changes/openai-2026-10-23-b2f47f23)No action needed. /agents/automations\n- Additive[/agents/automations/{automation_id}/invocations added](https://driftwatch.et/changes/openai-2026-10-23-3e55c4da)No action needed. /agents/automations/{automation_id}/invocations\n- Additive[/agents/automations/{automation_id}/invocations/{invocation_id} added](https://driftwatch.et/changes/openai-2026-10-23-5ccffe70)No action needed. /agents/automations/{automation_id}/invocations/{invocation_id}\n- Additive[/agents/automations/{automation_id} added](https://driftwatch.et/changes/openai-2026-10-23-9561d6fc)No action needed. /agents/automations/{automation_id}\n- Additive[/agents/automations/{automation_id}/pause added](https://driftwatch.et/changes/openai-2026-10-23-96cc224c)No action needed. /agents/automations/{automation_id}/pause\n- Additive[/agents/automations/{automation_id}/resume added](https://driftwatch.et/changes/openai-2026-10-23-a3553161)No action needed. /agents/automations/{automation_id}/resume\n\n- Breakingdirection flip: their tools call this safe[type is no longer accepted](https://driftwatch.et/changes/openai-2026-10-22-b82c52fa)Usually ignored rather than rejected, so the call succeeds and does something subtly different. DecisionInputMessage.type · reachable from 1 operation## Code that breaks\n\n```\nawait client.post(\"/…\", {\n  // type is now ignored, not rejected\n  type: value,\n});\n```\n\n- Breakingdirection flip: their tools call this safe[role is no longer accepted](https://driftwatch.et/changes/openai-2026-10-22-2da3ff9c)Usually ignored rather than rejected, so the call succeeds and does something subtly different. DecisionInputMessage.role · reachable from 1 operation## Code that breaks\n\n```\nawait client.post(\"/…\", {\n  // role is now ignored, not rejected\n  role: value,\n});\n```\n\n- Breakingdirection flip: their tools call this safe[content is no longer accepted](https://driftwatch.et/changes/openai-2026-10-22-9c66bcd9)Usually ignored rather than rejected, so the call succeeds and does something subtly different. DecisionInputMessage.content · reachable from 1 operation## Code that breaks\n\n```\nawait client.post(\"/…\", {\n  // content is now ignored, not rejected\n  content: value,\n});\n```\n\n- Breakingdirection flip: their tools call this safe[phase is no longer accepted](https://driftwatch.et/changes/openai-2026-10-22-2abec8de)Usually ignored rather than rejected, so the call succeeds and does something subtly different. DecisionInputMessage.phase · reachable from 1 operation## Code that breaks\n\n```\nawait client.post(\"/…\", {\n  // phase is now ignored, not rejected\n  phase: value,\n});\n```\n\n- Behavioral[Status code no longer documented](https://driftwatch.et/changes/openai-2026-10-22-c6a81ff4)Dead branch, or an undocumented response you still receive. POST /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys\n\n- Additive[/audio/voices/{voice_id} added](https://driftwatch.et/changes/openai-2026-10-21-6bc18955)No action needed. /audio/voices/{voice_id}\n\n- PromptCacheBreakpointParam.ttl\n- InputImageContentParamAutoParam.prompt_cache_breakpoint.ttl\n- InputFileContentParam.prompt_cache_breakpoint.ttl\n- InputTextContentParam.prompt_cache_breakpoint.ttl\n- BetaInputTextContentParam.prompt_cache_breakpoint.ttl\n- BetaInputFileContentParam.prompt_cache_breakpoint.ttl\n- BetaInputImageContentParamAutoParam.prompt_cache_breakpoint.ttl\n- BetaPromptCacheBreakpointParam.ttl\n\n- PromptCacheBreakpointParam.ttl\n- InputFileContentParam.prompt_cache_breakpoint.ttl\n- InputImageContentParamAutoParam.prompt_cache_breakpoint.ttl\n- InputTextContentParam.prompt_cache_breakpoint.ttl\n- BetaInputFileContentParam.prompt_cache_breakpoint.ttl\n- BetaInputImageContentParamAutoParam.prompt_cache_breakpoint.ttl\n- BetaInputTextContentParam.prompt_cache_breakpoint.ttl\n- BetaPromptCacheBreakpointParam.ttl\n\n- UsageCompletionsResult.input_cache_write_30m_tokens\n- DecisionsUsageResult.input_cache_write_30m_tokens\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- ImageEditCompletedEvent.safety_identifier\n- ImageGenCompletedEvent.safety_identifier\n\n- EditImageBodyJsonParam.safety_identifier\n- CreateImageEditRequest.safety_identifier\n- CreateImageRequest.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/sessions/{session_id}/artifacts · 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) 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[service_tier 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: CreateAgentParams.service_tier, ServiceTierParam, SessionAgentConfigParam.service_tier, UpdateAgentParams.service_tier, UpdateSessionAgentParam.service_tier## Code that breaks\n\n```\n// sending \"ultrafast\" for service_tier 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", "url": "https://wpnews.pro/news/additive-openai-2-new-request-properties", "canonical_source": "https://driftwatch.et/apis/openai#cmvpuhjd5000737jdvelsh6bp-request-fields", "published_at": "2026-10-26 20:31:32+00:00", "updated_at": "2026-10-26 23:13:42.487373+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-products", "developer-tools", "large-language-models"], "entities": ["OpenAI", "PromptCacheBreakpointConfig.ttl", "BetaPromptCacheBreakpointConfig.ttl", "gpt-6.1-terra", "ModelIdsShared", "BetaModelIdsShared", "DecisionInputMessage", "ImageGenTool.model"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/additive-openai-2-new-request-properties", "markdown": "https://wpnews.pro/news/additive-openai-2-new-request-properties.md", "text": "https://wpnews.pro/news/additive-openai-2-new-request-properties.txt", "jsonld": "https://wpnews.pro/news/additive-openai-2-new-request-properties.jsonld"}}