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.

  1. 7.2.0: chat completion service_tier accepts fast 2 breaking, 0 deprecations
  2. 7.5.0: Videos is deprecated ahead of the Sora shutdown 0 breaking, 1 deprecation
  3. 7.6.0: ClientOptions adds dataResidency and X.509 workload identity 2 breaking, 0 deprecations
  4. 7.8.0: X509WorkloadIdentity takes refreshBufferSeconds, refreshBufferMs deprecated 1 breaking, 0 deprecations
  5. 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 released Published Updated

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_tier accepts 'fast'. On ChatCompletionCreateParamsNonStreaming and ChatCompletionCreateParamsStreaming, the member was 'auto' | 'default' | 'flex' | 'scale' | 'priority' | null and is now 'auto' | 'default' | 'flex' | 'scale' | 'priority' | 'fast' | null. The changelog lists it as “fast tier”.
  • The response types take the same value. service_tier on 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.

ChangeSeverityDetectsFixVerified by
Changed the members of ChatCompletionCreateParamsNonStreaming
openai-npm-7.2.0-resources-chat-completion-create-params-non-streaming-members-changed
Breaking
medium confidence
  • ChatCompletionCreateParamsNonStreaming imported from openai/resources, named in any type position
Patch, only when you name a model providerYour typecheck and tests
Changed the members of ChatCompletionCreateParamsStreaming
openai-npm-7.2.0-resources-chat-completion-create-params-streaming-members-changed
Breaking
medium confidence
  • ChatCompletionCreateParamsStreaming imported from openai/resources, named in any type position
Patch, only when you name a model providerYour 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 released Published

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

  • Videos is deprecated, not removed. create, retrieve, list, delete, createCharacter, downloadContent, edit, extend, getCharacter and remix are 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.

ChangeSeverityDetectsFixVerified by
Deprecated Videos
openai-npm-7.5.0-resources-videos-deprecated
Deprecation
  • Videos imported from openai/resources
Report onlyNot 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 released Published Updated

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

  • workloadIdentity may be an X509WorkloadIdentity. The member was WorkloadIdentity | undefined and is now WorkloadIdentity | X509WorkloadIdentity | undefined. The new type has type: 'x509', an identityProviderId and a serviceAccountId, and declares provider and clientId as never.
  • x509Transport is new. It is optional, typed X509Transport, and is needed only for X.509 workload identity.
  • dataResidency is new. It is optional, typed DataResidency | null | undefined, where DataResidency is 'global' | 'us' | 'eu' | 'ae'. Its documentation says it overrides an inherited or environment base URL, cannot be combined with an explicit baseURL, and performs no fallback.
  • Both modules export the type. ClientOptions comes from openai and from openai/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.

ChangeSeverityDetectsFixVerified by
Changed the members of ClientOptions
openai-npm-7.6.0-client-options-members-changed
Breaking
medium confidence
  • ClientOptions imported from openai, named in any type position
Patch, only when you name a model providerYour typecheck and tests
Changed the members of ClientOptions
openai-npm-7.6.0-client-client-options-members-changed
Breaking
medium confidence
  • ClientOptions imported from openai/client, named in any type position
Patch, only when you name a model providerYour 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 released Published Updated

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

  • refreshBufferSeconds is a number. Its documentation says refresh begins that many seconds before expiry, and defaults to 1,200 seconds. The WorkloadIdentity member 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”.
  • refreshBufferMs is deprecated. It is still declared, with a @deprecated tag pointing to refreshBufferSeconds.
  • X509Credential is new. auth/types.d.ts adds an interface with an async close(). 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.

ChangeSeverityDetectsFixVerified by
Changed the members of X509WorkloadIdentity
openai-npm-7.8.0-auth-x509-workload-identity-members-changed
Breaking
medium confidence
  • X509WorkloadIdentity imported from openai/auth, named in any type position
Patch, only when you name a model providerYour 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 released Published Updated

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

  • quality accepts 'xhigh' and 'max'. On ImageGenerateParamsNonStreaming and ImageGenerateParamsStreaming, the member was 'standard' | 'hd' | 'low' | 'medium' | 'high' | 'auto' | null and gains the two values. On ImageEditParamsNonStreaming and ImageEditParamsStreaming it gains them too. The documentation says only the two GPT Image 2.5 models, and their 2026-09-08 snapshots, support them.
  • ImageModel lists 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.

ChangeSeverityDetectsFixVerified by
Changed the members of ImageEditParamsNonStreaming
openai-npm-7.12.1-resources-image-edit-params-non-streaming-members-changed
Breaking
medium confidence
  • ImageEditParamsNonStreaming imported from openai/resources, named in any type position
Patch, only when you name a model providerYour typecheck and tests
Changed the members of ImageEditParamsStreaming
openai-npm-7.12.1-resources-image-edit-params-streaming-members-changed
Breaking
medium confidence
  • ImageEditParamsStreaming imported from openai/resources, named in any type position
Patch, only when you name a model providerYour typecheck and tests
Changed the members of ImageGenerateParamsNonStreaming
openai-npm-7.12.1-resources-image-generate-params-non-streaming-members-changed
Breaking
medium confidence
  • ImageGenerateParamsNonStreaming imported from openai/resources, named in any type position
Patch, only when you name a model providerYour typecheck and tests
Changed the members of ImageGenerateParamsStreaming
openai-npm-7.12.1-resources-image-generate-params-streaming-members-changed
Breaking
medium confidence
  • ImageGenerateParamsStreaming imported from openai/resources, named in any type position
Patch, only when you name a model providerYour 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 scan

Then 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.

The OpenAI Node SDK migration guide lists every release page and says which to read for your upgrade.