One section per release, oldest first. Start below the version you have and read down to the one you are moving to. Each section lists what breaks, the compiler errors it raises and what Emendant patches.
- 7.2.0: chat completion service_tier accepts fast 2 breaking, 0 deprecations
- 7.5.0: Videos is deprecated ahead of the Sora shutdown 0 breaking, 1 deprecation
- 7.6.0: ClientOptions adds dataResidency and X.509 workload identity 2 breaking, 0 deprecations
- 7.8.0: X509WorkloadIdentity takes refreshBufferSeconds, refreshBufferMs deprecated 1 breaking, 0 deprecations
- 7.12.1: image quality accepts xhigh and max for GPT Image 2.5 4 breaking, 0 deprecations
OpenAI Node SDK 7.2.0: chat completion service_tier accepts fast
openai@7.2.0 adds Fast mode to chat completion requests. service_tier accepts 'fast' beside the five values it already took, and its documentation says a response reports priority whether fast or priority was requested. Requests written for 7.1.0 keep compiling. Code that reads service_tier back from a ChatCompletionCreateParams object and expects one of the old values is what breaks.
What changed
service_tieraccepts'fast'. OnChatCompletionCreateParamsNonStreamingandChatCompletionCreateParamsStreaming, the member was'auto' | 'default' | 'flex' | 'scale' | 'priority' | nulland is now'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null. The changelog lists it as “fast tier”.- The response types take the same value.
service_tieron the completion and chunk types in the same file gains'fast'too. The feed’s rows cover the two params types only.
Before and after
The affected type is imported from this module:
import type { ChatCompletionCreateParamsNonStreaming } from 'openai/resources';The member as openai@7.1.0 declared it:
service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null;And as 7.2.0 declares it:
service_tier?: 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null;Migration guidance and its limits
Both findings carry an assisted fix at medium confidence. Name a model provider on the command line or in emendant.json and emendant fix tries them. Without one, they are reported with their guidance and nothing is sent anywhere. Review whether the changed members affect your code before applying a patch. Code that only builds requests may need no edit. Emendant checks each patch in a copy of your repository at 7.2.0 and withholds patches that fail. Read the patch header to see which checks passed.
Where code switches over params.service_tier exhaustively, or assigns it to a variable typed with the old values, add 'fast'.
The scan reports the two names in a type position when they are imported from openai/resources. A service_tier read from a response object is not a finding, although its type widened the same way. A clean scan says no file names these types from openai/resources, and nothing more about the release.
What Emendant detects, fixes and verifies
2 changes in openai 7.2.0. 0 automatic fixes, 2 fixes requiring a model provider you choose, 0 report only. Each patch states which checks passed. Understand patch evidence.
| Change | Severity | Detects | Fix | Verified by |
|---|---|---|---|---|
Changed the members of ChatCompletionCreateParamsNonStreamingopenai-npm-7.2.0-resources-chat-completion-create-params-non-streaming-members-changed | Breaking medium confidence |
| Patch, only when you name a model provider | Your typecheck and tests |
Changed the members of ChatCompletionCreateParamsStreamingopenai-npm-7.2.0-resources-chat-completion-create-params-streaming-members-changed | Breaking medium confidence |
| Patch, only when you name a model provider | Your typecheck and tests |
emendant explain <change-id> prints any row's entry, guidance and sources at the terminal.
Requires emendant@0.3.0 or later. Feed entry feed/npm/openai/7.2.0.json, snapshot 2026-09-23.4.
Primary sources
OpenAI Node SDK 7.5.0: Videos is deprecated ahead of the Sora shutdown
openai 7.5.0 marks the whole Videos resource class deprecated, along with every one of its methods. The published type definitions give a reason and a date: the Sora API is scheduled to permanently shut down on September 24, 2026. Nothing about the resource’s shape changed. Code that imports Videos from openai/resources, or calls it through client.videos, still compiles and still runs; it now carries a deprecation notice pointing at that shutdown date.
What changed
Videosis deprecated, not removed.create,retrieve,list,delete,createCharacter,downloadContent,edit,extend,getCharacterandremixare all still exported and unchanged in signature. Each one, and the class itself, now carries@deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.in the type declarations. The release’s own changelog entry for this line is “deprecate Sora video APIs”.
Before and after
The import a scan reports, on a client held in a variable:
import { Videos } from 'openai/resources';
export { Videos };There is no rewrite to show after it. openai@7.5.0 marks Videos deprecated and ships no replacement resource; the class and its methods work exactly as before until the API behind them goes away. The change is in the type declarations only: the deprecation notice on the class and on each of its ten methods, not a new call to switch to.
Migration guidance and its limits
This release adds one change and no patch. The finding is report only, because there is nothing to rewrite: the resource keeps its name, its shape and its behaviour, and the fix would be to stop calling the Sora API, which is a decision about your product rather than a mechanical edit.
Naming a model provider will not change this. fix has nothing to offer for a deprecation with no replacement API, and none is queued.
The scan finds Videos imported from openai/resources. It does not follow a call through client.videos.create(...) back to the OpenAI constructor, so a repository that only ever reaches the resource off a client instance, without importing the Videos type directly, will not be flagged by this entry. Treat September 24, 2026 as the date that matters, and plan the removal of any Sora usage before then regardless of what a scan here reports.
What Emendant detects, fixes and verifies
1 change in openai 7.5.0. 0 automatic fixes, 0 fixes requiring a model provider you choose, 1 report only. Each patch states which checks passed. Understand patch evidence.
| Change | Severity | Detects | Fix | Verified by |
|---|---|---|---|---|
Deprecated Videosopenai-npm-7.5.0-resources-videos-deprecated | Deprecation |
| Report only | Not applicable |
emendant explain <change-id> prints any row's entry, guidance and sources at the terminal.
Requires emendant@0.1.0 or later. Feed entry feed/npm/openai/7.5.0.json, snapshot 2026-08-28.1.
Primary sources
OpenAI Node SDK 7.6.0: ClientOptions adds dataResidency and X.509 workload identity
openai@7.6.0 adds two ways to configure a client. dataResidency selects a regional OpenAI endpoint by name, and workload identity can now authenticate with an X.509 client certificate. Clients constructed as in 7.5.0 keep compiling. Code that reads workloadIdentity back from a ClientOptions object and treats it as the old WorkloadIdentity type is what breaks.
What changed
workloadIdentitymay be anX509WorkloadIdentity. The member wasWorkloadIdentity | undefinedand is nowWorkloadIdentity | X509WorkloadIdentity | undefined. The new type hastype: 'x509', anidentityProviderIdand aserviceAccountId, and declaresproviderandclientIdasnever.x509Transportis new. It is optional, typedX509Transport, and is needed only for X.509 workload identity.dataResidencyis new. It is optional, typedDataResidency | null | undefined, whereDataResidencyis'global' | 'us' | 'eu' | 'ae'. Its documentation says it overrides an inherited or environment base URL, cannot be combined with an explicitbaseURL, and performs no fallback.- Both modules export the type.
ClientOptionscomes fromopenaiand fromopenai/client, and the feed has a row for each.
Before and after
The affected type is imported from this module:
import type { ClientOptions } from 'openai';The member as openai@7.5.0 declared it:
workloadIdentity?: WorkloadIdentity | undefined;And the members as 7.6.0 declares them:
workloadIdentity?: WorkloadIdentity | X509WorkloadIdentity | undefined; x509Transport?: X509Transport | undefined;Migration guidance and its limits
Both findings carry an assisted fix at medium confidence. Name a model provider on the command line or in emendant.json and emendant fix tries them. Without one, they are reported with their guidance and nothing is sent anywhere. Review whether the changed members affect your code before applying a patch. Code that only builds options may need no edit. Emendant checks each patch in a copy of your repository at 7.6.0 and withholds patches that fail. Read the patch header to see which checks passed.
Where code reads options.workloadIdentity and uses a member that only WorkloadIdentity declares, check type first. Code that wraps ClientOptions in its own configuration type may want to pass the two new options through.
The scan reports ClientOptions in a type position when it is imported from openai or openai/client. The release’s Realtime WebRTC and ChatCompletionChunk additions are not covered. A clean scan says no file names ClientOptions from those two modules, and nothing more about the release.
What Emendant detects, fixes and verifies
2 changes in openai 7.6.0. 0 automatic fixes, 2 fixes requiring a model provider you choose, 0 report only. Each patch states which checks passed. Understand patch evidence.
| Change | Severity | Detects | Fix | Verified by |
|---|---|---|---|---|
Changed the members of ClientOptionsopenai-npm-7.6.0-client-options-members-changed | Breaking medium confidence |
| Patch, only when you name a model provider | Your typecheck and tests |
Changed the members of ClientOptionsopenai-npm-7.6.0-client-client-options-members-changed | Breaking medium confidence |
| Patch, only when you name a model provider | Your typecheck and tests |
emendant explain <change-id> prints any row's entry, guidance and sources at the terminal.
Requires emendant@0.3.0 or later. Feed entry feed/npm/openai/7.6.0.json, snapshot 2026-09-23.4.
Primary sources
OpenAI Node SDK 7.8.0: X509WorkloadIdentity takes refreshBufferSeconds, refreshBufferMs deprecated
openai@7.8.0 aligns the X.509 workload identity with the other workload identity credentials. X509WorkloadIdentity.refreshBufferSeconds was typed never in 7.7.0, so it could not be set, and is now an optional number. refreshBufferMs, which did the same job in milliseconds, is deprecated. Configurations written for 7.7.0 keep compiling. Code that reads refreshBufferSeconds from an X509WorkloadIdentity and relies on it being absent is what breaks.
What changed
refreshBufferSecondsis anumber. Its documentation says refresh begins that many seconds before expiry, and defaults to 1,200 seconds. TheWorkloadIdentitymember of the same name says the buffer is capped at half of the token’s lifetime, which the changelog lists as “clamp the workload-identity refresh buffer to the token lifetime”.refreshBufferMsis deprecated. It is still declared, with a@deprecatedtag pointing torefreshBufferSeconds.X509Credentialis new.auth/types.d.tsadds an interface with an asyncclose(). It is not a change to the type the feed describes.
Before and after
The affected type is imported from this module:
import type { X509WorkloadIdentity } from 'openai/auth';The members as openai@7.7.0 declared them:
refreshBufferMs?: number; refreshBufferSeconds?: never;And as 7.8.0 declares them:
refreshBufferSeconds?: number; /** @deprecated Use refreshBufferSeconds to match other workload-identity credentials. */ refreshBufferMs?: number;Migration guidance and its limits
The finding carries an assisted fix at medium confidence. Name a model provider on the command line or in emendant.json and emendant fix tries it. Without one, it is reported with its guidance and nothing is sent anywhere. Review whether the changed members affect your code before applying a patch. Emendant checks each patch in a copy of your repository at 7.8.0 and withholds patches that fail. Read the patch header to see which checks passed.
Where code sets refreshBufferMs, move to refreshBufferSeconds with the value divided by 1,000. Code that narrows between the two identity types by testing for refreshBufferSeconds must test type instead.
The scan reports X509WorkloadIdentity in a type position when it is imported from openai/auth. An X.509 configuration passed inline to the client constructor is not a finding. A clean scan says no file names X509WorkloadIdentity from openai/auth, and nothing more about the release.
What Emendant detects, fixes and verifies
1 change in openai 7.8.0. 0 automatic fixes, 1 fixes requiring a model provider you choose, 0 report only. Each patch states which checks passed. Understand patch evidence.
| Change | Severity | Detects | Fix | Verified by |
|---|---|---|---|---|
Changed the members of X509WorkloadIdentityopenai-npm-7.8.0-auth-x509-workload-identity-members-changed | Breaking medium confidence |
| Patch, only when you name a model provider | Your typecheck and tests |
emendant explain <change-id> prints any row's entry, guidance and sources at the terminal.
Requires emendant@0.3.0 or later. Feed entry feed/npm/openai/7.8.0.json, snapshot 2026-09-23.4.
Primary sources
OpenAI Node SDK 7.12.1: image quality accepts xhigh and max for GPT Image 2.5
openai@7.12.1 adds the GPT Image 2.5 models, gpt-image-2.5-sunburst and gpt-image-2.5-flare, and two quality levels for them. quality on image generation and edit requests accepts 'xhigh' and 'max'. Requests written for 7.10.0 keep compiling. Code that reads quality back from a params object and expects one of the old values is what breaks.
What changed
qualityaccepts'xhigh'and'max'. OnImageGenerateParamsNonStreamingandImageGenerateParamsStreaming, the member was'standard' | 'hd' | 'low' | 'medium' | 'high' | 'auto' | nulland gains the two values. OnImageEditParamsNonStreamingandImageEditParamsStreamingit gains them too. The documentation says only the two GPT Image 2.5 models, and their2026-09-08snapshots, support them.ImageModellists the new models. It gains'gpt-image-2.5-sunburst','gpt-image-2.5-flare'and their dated snapshots.- The change is in 7.12.0. The changelog lists “add GPT Image 2.5 models and image options” under 7.12.0 and 7.12.1. The registry has neither 7.11.0 nor 7.12.0, so the feed compares 7.12.1 with 7.10.0.
Before and after
The affected type is imported from this module:
import type { ImageGenerateParamsNonStreaming } from 'openai/resources';The member on the generate params as openai@7.10.0 declared it:
quality?: 'standard' | 'hd' | 'low' | 'medium' | 'high' | 'auto' | null;And as 7.12.1 declares it:
quality?: 'standard' | 'hd' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | 'auto' | null;Migration guidance and its limits
All four findings carry an assisted fix at medium confidence. Name a model provider on the command line or in emendant.json and emendant fix tries them. Without one, they are reported with their guidance and nothing is sent anywhere. Review whether the changed members affect your code before applying a patch. Code that only builds requests may need no edit. Emendant checks each patch in a copy of your repository at 7.12.1 and withholds patches that fail. Read the patch header to see which checks passed.
Where code switches over params.quality exhaustively, or maps it to a type keyed by the old values, add 'xhigh' and 'max'. The compiler accepts the two values with any model, so code that lets a user choose them should check the model too.
The scan reports the four names in a type position when they are imported from openai/resources. The quality fields on image response and stream event types, which gained the same values, are not a finding. A clean scan says no file names these types from openai/resources, and nothing more about the release.
What Emendant detects, fixes and verifies
4 changes in openai 7.12.1. 0 automatic fixes, 4 fixes requiring a model provider you choose, 0 report only. Each patch states which checks passed. Understand patch evidence.
| Change | Severity | Detects | Fix | Verified by |
|---|---|---|---|---|
Changed the members of ImageEditParamsNonStreamingopenai-npm-7.12.1-resources-image-edit-params-non-streaming-members-changed | Breaking medium confidence |
| Patch, only when you name a model provider | Your typecheck and tests |
Changed the members of ImageEditParamsStreamingopenai-npm-7.12.1-resources-image-edit-params-streaming-members-changed | Breaking medium confidence |
| Patch, only when you name a model provider | Your typecheck and tests |
Changed the members of ImageGenerateParamsNonStreamingopenai-npm-7.12.1-resources-image-generate-params-non-streaming-members-changed | Breaking medium confidence |
| Patch, only when you name a model provider | Your typecheck and tests |
Changed the members of ImageGenerateParamsStreamingopenai-npm-7.12.1-resources-image-generate-params-streaming-members-changed | Breaking medium confidence |
| Patch, only when you name a model provider | Your typecheck and tests |
emendant explain <change-id> prints any row's entry, guidance and sources at the terminal.
Requires emendant@0.3.0 or later. Feed entry feed/npm/openai/7.12.1.json, snapshot 2026-09-23.5.
Primary sources
Scan your repository
Find affected code without editing your files.
npx emendant scanThen npx emendant fix writes the patches the tables say exist. Run emendant feed update first to get the latest coverage. The getting started guide covers the flags and the patch grades.
Related release pages
- OpenAI Node SDK 6.x breaking changes: 6.3.0 to 6.49.0
- OpenAI Node SDK 5.x breaking changes: 5.4.0 to 5.18.0
- OpenAI Node SDK 5.0.0: what breaks when you upgrade openai from 4.x
The OpenAI Node SDK migration guide lists every release page and says which to read for your upgrade.