openai-python 3.50.0 and openai-node 7.56.0: reasoning input transformations (input_transformations) on Responses
The 2026-11-12 SDK pair: python v3.50.0 and node v7.56.0 add input_transformations to the Responses API response object - withheld reasoning inputs, reported in input order, on both the stable and beta shapes. Request-side types untouched.
openai-python v3.50.0 and openai-node v7.56.0 were released within a minute of each other on 2026-11-12 (python GitHub release 19:26:07Z, node 19:26:48Z), and their feature entries point at the same change: landing "reasoning input transformations on responses" on the Responses API response object - a new optional array, input_transformations, that reports in input order which reasoning inputs the server withheld and never delivered to the model. Every fact in this article was checked on release day against the PR diffs and the v3.50.0 / v7.56.0 tag sources, with an adjacent-version baseline (v3.49.0 / v7.55.0) confirming the field is genuinely new. A note on the verification channel: developers.openai.com returned 403 to this site throughout this batch's working window, so current-state claims about the docs domain are anchored to the successful fetch of 2026-11-12.
1. Versions and registry timeline
| Package | GitHub release | Registry | Release notes composition |
|---|---|---|---|
| openai-python v3.50.0 | 2026-11-12T19:26:07Z | PyPI latest=3.50.0, published 2026-11-12T19:26:52Z (45 seconds after GitHub) | #4268 (feature) + #4261 (CI dependency bump) + #4266 (docs) |
| openai-node v7.56.0 | 2026-11-12T19:26:48Z | npm latest=7.56.0, published 2026-11-12T19:37:47Z (about 11 minutes after GitHub) | #3145 (feature) + #3127/#3131 (ecosystem-tests dev-dependency bumps) + #3142 (docs) |
The two release-notes feature titles differ but describe one change: python says api: expose reasoning input transformations on responses, node says api: type reasoning input transformations on responses - "expose" versus "type", matching the pydantic response model on one side and the TypeScript interface on the other.
2. The change itself: Response.input_transformations
The new field hangs off the Response object (stable and beta shapes). At the OpenAPI layer (api_reference/openapi.transformed.yml, committed with the PRs), two schemas are added:
- InputRemovalReason: a string enum with five values -
organization_mismatch,end_user_mismatch,model_mismatch,prefix_mismatch,turn_boundary; - ReasoningInputTransformation: an object with four required fields -
type(fixedreasoning),id(The original reasoning item ID.),action(fixedremoved), andreason(a reference to InputRemovalReason). The beta side getsBetaInputRemovalReasonandBetaReasoningInputTransformationtwins of identical shape.
The new array field on the response object, quoted verbatim from the OpenAPI source:
input_transformations:
type: array
description: Reasoning inputs withheld from the model, in input order.
items:
$ref: '#/components/schemas/ReasoningInputTransformation'
The description is a single sentence: Reasoning inputs withheld from the model, in input order. None of the three surfaces - OpenAPI schema, python class, node interface - describes the five reason values individually. Literal translations (organization mismatch / end-user mismatch / model mismatch / prefix mismatch / turn boundary) are for searchability only; this article does not infer their semantics. What triggers a withhold, and when the field is omitted, are likewise not stated anywhere in this release's checkable sources.
3. Python side: the InputTransformation class and field (v3.50.0 tag, verbatim)
class InputTransformation(BaseModel):
id: str
"""The original reasoning item ID."""
action: Literal["removed"]
reason: Literal["organization_mismatch", "end_user_mismatch", "model_mismatch", "prefix_mismatch", "turn_boundary"]
type: Literal["reasoning"]
One optional field on each of Response and BetaResponse (same tag, verbatim):
input_transformations: Optional[List[InputTransformation]] = None
"""Reasoning inputs withheld from the model, in input order."""
InputTransformation is also added to the module __all__ export list (one added entry in each of the two export lists visible in the diff). Both action and type are single-value Literals - the only action value currently is removed, and the only object type is reasoning. That is the type-level fact and nothing more.
4. Node side: the InputTransformation interface (v7.56.0 tag, verbatim)
export interface InputTransformation {
/**
* The original reasoning item ID.
*/
id: string;
action: 'removed';
reason:
| 'organization_mismatch'
| 'end_user_mismatch'
| 'model_mismatch'
| 'prefix_mismatch'
| 'turn_boundary';
type: 'reasoning';
}
The field side (identical in the stable and beta responses.ts files, under the Response and BetaResponse namespaces respectively):
/**
* Reasoning inputs withheld from the model, in input order.
*/
input_transformations?: Array<Response.InputTransformation>;
5. Scope and baseline: response-side types only, stable and beta both
The diff's file list is the scope boundary: python touches only src/openai/types/responses/response.py and src/openai/types/beta/beta_response.py; node touches only src/resources/responses/responses.ts and src/resources/beta/responses/responses.ts; everything else is api_reference/openapi.transformed.yml, castiron codegen statistics, and generated-files.json hashes. Zero request-side or param-side type changes - input_transformations is a readable field on the response object, not a new parameter.
| Comparison | v3.49.0 / v7.55.0 (previous) | v3.50.0 / v7.56.0 (this batch) |
|---|---|---|
| python response.py / beta_response.py | 0 occurrences | 3 / 3 occurrences |
| node responses.ts / beta responses.ts | 0 occurrences | 2 / 2 occurrences |
Counting method: grep -c 'InputTransformation\|input_transformations' against the same-path files at each tag (raw.githubusercontent.com), measured by this site on 2026-11-13. Zero-to-present across adjacent versions confirms the feature is new in this pair (the comparison covers the immediately preceding version only).
6. The rest of the release, and how this was verified
- Docs: one commit per package, "simplify review handoff instructions" (python #4266, node #3142) - repository collaboration docs, unrelated to the API.
- Dependencies: python #4261 bumps the CI action astral-sh/setup-uv from 10.3.0 to 10.3.3; node #3127 and #3131 are dev-dependency bumps in two ecosystem-tests directories (@cloudflare/workers-types, webpack) - all in deps / deps-dev territory, no runtime dependency changes.
- Verification method: release objects and PR diffs fetched through an authenticated gh api channel (the anonymous GitHub API quota was exhausted during this batch); type facts checked line by line against the v3.50.0 / v7.56.0 tag files, with the baseline taken from the same-path files at v3.49.0 / v7.55.0.
7. Common mistakes and troubleshooting
- Looking for it among request parameters:
input_transformationslives on the response object; the batch's diffs changed no request types, so there is no matching input item to construct. - Assuming the five reasons are officially explained: for now there are only enum literals. Wait for official documentation before writing migration logic against the literal translations in this article.
- Wrong versions: the field requires openai-python >= 3.50.0 / openai-node >= 7.56.0; the type layer of v3.49.0 / v7.55.0 has zero occurrences, so the field is not there to read.
- Beta versus stable naming: the OpenAPI schema names carry a Beta prefix on the beta side (BetaReasoningInputTransformation / BetaInputRemovalReason); the python class name is identical in both shapes (InputTransformation, defined separately in response.py and beta_response.py); the node interfaces nest under the
ResponseandBetaResponsenamespaces.
Next steps
- The previous SDK pair (3.49.0 / 7.55.0): openai-python 3.49.0 and openai-node 7.55.0: typed async function tools for the Agents API.
- Existing agent session settings - compaction, review, spend controls: openai-python 3.42.0 and openai-node 7.46/7.47: agent compaction and review settings, external keys, SIP DTMF.
- Every OpenAI release node on one timeline: OpenAI Models Release Notes (2026, Living Document).
Key points
- Versions and registries (checked 2026-11-13 by this site via gh api and the registries): python v3.50.0 GitHub release at 2026-11-12T19:26:07Z, PyPI latest=3.50.0 published at 19:26:52Z (45 seconds after GitHub); node v7.56.0 GitHub release at 19:26:48Z, npm latest=7.56.0 published at 19:37:47Z (about 11 minutes after GitHub)
- python #4268 (release notes title 'api: expose reasoning input transformations on responses') touches exactly two type files: src/openai/types/responses/response.py and src/openai/types/beta/beta_response.py - Response and BetaResponse each gain input_transformations: Optional[List[InputTransformation]] = None with the docstring 'Reasoning inputs withheld from the model, in input order.'; of the four InputTransformation fields, action and type are single-value Literals
- node #3145 (release notes title 'api: type reasoning input transformations on responses') likewise touches exactly two files: src/resources/responses/responses.ts and src/resources/beta/responses/responses.ts - each interface gains input_transformations?: Array<...InputTransformation> plus an InputTransformation declaration (action: 'removed', type: 'reasoning', a five-value reason union)
- OpenAPI layer (api_reference/openapi.transformed.yml, committed with the PRs): a new InputRemovalReason five-value enum and a ReasoningInputTransformation object schema; the beta side gets the BetaInputRemovalReason and BetaReasoningInputTransformation twins
- Baseline check (grep counts, measured by this site on 2026-11-13): zero occurrences in the v3.49.0 response.py and v7.55.0 responses.ts versus 3 and 2 occurrences in the v3.50.0 / v7.56.0 files - the feature is genuinely new in this pair; the diffs touch no request-side or param-side types
- The rest: one docs commit per package (simplify review handoff instructions, #4266/#3142); one CI dependency bump in python (astral-sh/setup-uv 10.3.0 to 10.3.3, #4261); two ecosystem-tests dev-dependency bumps in node (@cloudflare/workers-types #3127, webpack #3131) - no runtime dependency changes
Frequently asked questions
Official references
- Changelogopenai-python v3.50.0 release notes (verified by this site via the same resource on gh api)
- Changelogopenai-node v7.56.0 release notes (verified by this site via the same resource on gh api)
- Docsopenai-python PR #4268: expose reasoning input transformations on responses
- Docsopenai-node PR #3145: type reasoning input transformations on responses
- Docsopenai-python v3.50.0 response.py (tag source)
- Docsopenai-node v7.56.0 responses.ts (tag source)
Related articles
openai-python 3.49.0 and openai-node 7.55.0: typed async function tools for the Agents API
The 2026-11-10 SDK pair: python v3.49.0 and node v7.55.0 add typed support for the existing async setting on beta Agents function-tool shapes; python also fixes Microphone WAV encoding. Verified against tag sources.
Read articleopenai-python 3.48.0 and openai-node 7.54.0: agent session event-stream obfuscation padding and stream_options
The 2026-11-09 SDK pair: python v3.48.0 adds obfuscation switches for agent session streams (stream_options, include_obfuscation, 33 event types); node v7.54.0 adds rosalind types and scheduling retention. Verified against tag sources.
Read articleopenai-node 7.46–7.50: Five Releases, 12-Hour Caching and Service Tiers Land in the SDK (2026)
Five openai-node releases shipped between October 31 and November 3, carrying 12-hour Responses caching, project service tiers, workload identity providers, and a Live Responses expansion into the TypeScript layer.
Read articleSubscribe to GPTMap Weekly
One email every Monday: curated OpenAI updates, deep dives, and best practices. No ads, unsubscribe anytime.
Submitting opens Buttondown in a new tab to confirm your subscription.