Guide 21 · updated 2026-10-25

OpenAI Responses API lost instructions: resend policy with previous_response_id

Chaining response context does not reapply the preceding top-level instructions. Put stable policy in every request and verify the actual payload before blaming the model or switching plans.

By 차도녀 gpt may · Reviewed:

Symptoms

A multi-turn assistant follows the application language or answer-style policy on the first turn, but a later request sends only new input and previous_response_id. The missing top-level instructions is a concrete payload defect to investigate; changed output alone does not prove this cause. The task is conversational continuation without silently losing the application policy.

Interest and integration difficulty are separate: the official Node SDK repository displayed approximately 11.2k stars and 1.6k forks on 2026-10-25. These are repository-interest proxies, not Responses user counts or market share. Difficulty comes from the documented distinction between inherited response context and per-request instructions, not a claim that the service is broken.

Cause

The official SDK guide and request types distinguish previous response context from the next request’s top-level policy. previous_response_id does not automatically reapply the earlier instructions. This is a documented request contract, not an API bug.

The migration guide consequently tells applications to send stable instructions again. This differs from commentary/final-answer parsing: the boundary here is the outgoing request, not selecting a field from a successful response.

Safe resolution

Keep stable application instructions in a shared request builder and supply them for the first request and every continuation. Inspect a redacted outgoing payload, not just the conversation UI. The following deliberately text-only JavaScript example builds a request without sending it; choose a model available to your application and pass the actual prior response ID only for continuation.

function buildResponseRequest({ model, instructions, input, previousResponseId }) {
  if (typeof model !== "string" || !model.trim()) {
    throw new TypeError("model is required");
  }
  if (typeof instructions !== "string" || !instructions.trim()) {
    throw new TypeError("stable instructions are required on every turn");
  }
  if (typeof input !== "string" || !input.trim()) {
    throw new TypeError("this text-only example requires input");
  }
  const request = { model, instructions, input };
  if (previousResponseId !== undefined) {
    if (typeof previousResponseId !== "string" || !previousResponseId.trim()) {
      throw new TypeError("previousResponseId must be a nonempty response ID");
    }
    request.previous_response_id = previousResponseId;
  }
  return request; // Build only: no SDK call, credentials, or network.
}

Use the returned object with your existing SDK transport. The builder cannot validate ownership, retention or existence of a response ID. It also does not establish that a model obeyed a policy. Do not combine previous_response_id and conversation; the SDK guide describes them as mutually exclusive. If instead managing history manually, preserve required ordered output items, including reasoning/tool items rather than only assistant text.

The inspected Node SDK is v7.43.0, released on 2026-10-22. This is the reviewed documentation version, not the release that introduced instruction semantics or a claimed bug-fix version. A retry, model switch or plan upgrade does not restore an omitted field.

Verification

Source review on 2026-10-25 of the official Responses guide, SDK request types and release. No OpenAI request or live model test was performed. The separate offline example test checks application payload construction only.

For local regression controls, inspect the first-turn payload with instructions and no previous ID, the second-turn payload with the same instructions and the actual prior ID, and a deliberately changed policy that replaces the prior value. Reject missing/blank instructions, empty model/input and malformed continuation ID in this application helper. Compare against a broken manually constructed second-turn payload that lacks instructions. These are synthetic payload checks, not observations of provider responses.

An authorized live evaluation would additionally compare policy adherence across multiple turns and retain a redacted request receipt, SDK/model versions and expected output criteria. That evaluation was not run. Repository content and link validation likewise cannot prove live model behavior.

Limitations

This case is limited to previous_response_id with top-level instructions; it does not describe all state-management mechanisms or guarantee perfect instruction following. The complete affected application population, individual model access, account settings, pricing and plan requirements were not tested. There is no evidence here that upgrading a paid plan is necessary. Other causes of language or format drift require separate diagnosis.

No GetBeta production fix is claimed: related code that omits previous_response_id in a different request is not proof of this repair. The OpenAI provider profile and LLM selection guide supply adjacent context. Search terms are intent candidates without measured search volume or ranking. Post-deploy Search Console URL inspection, indexing and performance remain unverified.

Sources and verification scope

Source review on 2026-10-25 of the official Responses guide, SDK request types and release. No OpenAI request or live model test was performed. The separate offline example test checks application payload construction only.

Related providers