Assistants API shuts down 26 August 2026: what OpenAI's migration guide leaves out

The Assistants API sunsets 26 August 2026. Here is the object mapping, the corrected code, and what OpenAI's guide does not cover.

Read time
15 min
Word count
2.4K
Sections
12
FAQs
8
Share
Diagram of OpenAI Assistants API objects rerouting to Responses and Conversations before the 26 August 2026 shutdown
The Assistants API shuts down on 26 August 2026; threads and runs must move to conversations and responses.
On this page · 12 sections
  1. What actually shuts down, and what does not
  2. The four object mappings
  3. Runs to responses: the polling loop disappears
  4. Threads to conversations, and the backfill nobody will do for you
  5. The part that is not feature parity
  6. What OpenAI's migration guide does not cover
  7. What this does to your token bill
  8. A 36-day plan
  9. India-specific considerations
  10. FAQ
  11. How eCorpIT can help
  12. References

Summary. OpenAI's Assistants API stops working on 26 August 2026, which is 36 days from 21 July 2026. OpenAI announced the deprecation on 26 August 2025 with a 12-month runway, and the shutdown date is now published on the official deprecations page. Four object types change: Assistants become Prompts, Threads become Conversations, Runs become Responses, and Run steps become Items. Three of those swaps are mechanical. One is not: prompts can only be created in the OpenAI dashboard, so any application that creates assistants programmatically has no like-for-like replacement. OpenAI has also confirmed in writing that it will not ship a tool to move your data: "We will not provide an automated tool for migrating Threads to Conversations." Budget for the token bill too. On GPT-5.5 the API costs $5.00 per 1M input tokens against $0.50 per 1M cached input tokens, and OpenAI states that chaining with previous_response_id still bills every prior input token in the chain. OpenAI claims a 40% to 80% improvement in cache utilisation on Responses versus Chat Completions in internal tests. This article covers the object mapping, working code for each swap, the four areas OpenAI's own migration guide does not document, and a 36-day plan.

What actually shuts down, and what does not

Two deprecations are running at once and they get confused constantly.

The Assistants API is being shut down. OpenAI's deprecations page records it plainly: "On August 26th, 2025, we notified developers using the Assistants API of its deprecation and removal from the API one year later, on August 26, 2026." The replacement listed against that shutdown date is the Responses API and the Conversations API.

Chat Completions is not being shut down. OpenAI's migrate-to-responses guide says the opposite twice: "While Chat Completions remains supported, Responses is recommended for all new projects" and "Chat Completions remains supported, so you can migrate one user flow at a time." If your team has been putting off a Chat Completions migration, that clock is not the one running out.

The announcement came from Edwin Arbus, posting OpenAI's official notice in the Announcements category of the OpenAI developer forum on 26 August 2025: "We're winding down the Assistants API beta. It will sunset one year from now, August 26, 2026." The same post explains the reasoning: "Based on your feedback, we've folded the best parts of Assistants into Responses, including code interpreter and persistent conversations." It also claims the Responses API "has already overtaken Chat Completions in token activity."

One more wrinkle sits in the migration guide and is easy to miss. The recommended replacement for assistant objects is itself already deprecated. OpenAI writes: "Reusable prompt objects are also being deprecated. If you use this migration path, review the prompts deprecation timeline before adopting prompt objects in a long-lived integration." No shutdown date for prompt objects is published. If you are choosing an architecture this month, that sentence should push you toward holding your configuration in your own source control rather than in OpenAI's prompt objects.

The four object mappings

This is the mapping table exactly as OpenAI publishes it in the Assistants migration guide, with the engineering consequence added.

Assistants API object Responses API replacement What it means for your code
Assistants Prompts Configuration moves to a dashboard-created, versioned object. There is no API to create one.
Threads Conversations Server-side state survives, but stores items rather than only messages. No automated migration.
Runs Responses The async run lifecycle disappears. You send input items and get output items back.
Run steps Items Steps become a union type covering messages, tool calls, tool outputs and more.
Server-managed tool loop Your orchestration code OpenAI states tool call loops are "explicitly managed" by your application.

The last row is the one that costs the most engineering time and it is the one teams underestimate. OpenAI's own framing is blunt: "Your application code now handles orchestration (history pruning, tool loop, retries) while your prompt focuses on high-level behavior and constraints."

Runs to responses: the polling loop disappears

Under the Assistants API you created a run against a thread and then polled it. OpenAI's guide shows this shape:


            thread_id = "thread_CrXtCzcyEQbkAcXuNmVSKFs1"
assistant_id = "asst_8fVY45hU3IM6creFkVi5MBKB"

run = openai.beta.threads.runs.create(
    thread_id=thread_id,
    assistant_id=assistant_id,
)

while run.status in ("queued", "in_progress"):
    time.sleep(1)
    run = openai.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run.id)
          

The Responses equivalent has no loop. One call returns output:


            response = openai.responses.create(
    model="gpt-5.5",
    input=[{"role": "user", "content": "What are the 5 Ds of dodgeball?"}],
    conversation="conv_689667905b048191b4740501625afd940c7533ace33a2dab",
)

print(response.output_text)
          

Worth knowing before you copy from the docs: the Responses block as published in OpenAI's migration guide omits the comma after the input=[...] line and writes conversation: with a colon where a Python keyword argument needs =. The example above is that code corrected. The Assistants block in the same guide defines assistant_id and then passes assistant.id, and leaves the while body unindented. Treat the published snippets as pseudocode.

The response object also renames fields you are probably logging. Diffing the run and response payloads in OpenAI's guide shows usage.prompt_tokens and usage.completion_tokens becoming usage.input_tokens and usage.output_tokens, max_completion_tokens and max_prompt_tokens collapsing into max_output_tokens, truncation_strategy becoming truncation, and object: "thread.run" becoming object: "response". Anything parsing those keys in your billing dashboards or alerting breaks silently rather than loudly.

Threads to conversations, and the backfill nobody will do for you

Creating state is close to identical. Threads:


            thread = openai.beta.threads.create(
    messages=[{"role": "user", "content": "what are the 5 Ds of dodgeball?"}],
    metadata={"user_id": "peter_le_fleur"},
)
          

Conversations:


            conversation = openai.conversations.create(
    items=[{"role": "user", "content": "what are the 5 Ds of dodgeball?"}],
    metadata={"user_id": "peter_le_fleur"},
)
          

The difference is what they hold. OpenAI: "Threads could only store messages. Conversations store items, which can include messages, tool calls, tool outputs, and other data."

Moving existing history is your job. OpenAI's guide states: "We will not provide an automated tool for migrating Threads to Conversations. Instead, we recommend migrating new user threads onto conversations and backfilling old ones as necessary." That is the correct strategy for most products. Point new sessions at conversations now, and backfill on demand when a user opens an old session, rather than attempting a big-bang export of every thread you have ever created.

OpenAI publishes a backfill sketch. As published it never initialises messages before using +=, and the image branch reads item_content + [...] with no assignment, so image content is silently dropped. Corrected:


            thread_id = "thread_EIpHrTAVe0OzoLQg3TXfvrkG"

messages = []
pages = openai.beta.threads.messages.list(thread_id=thread_id, order="asc")
for page in pages.iter_pages():
    messages += page.data

items = []
for m in messages:
    item_content = []
    for content in m.content:
        if content.type == "text":
            content_type = "input_text" if m.role == "user" else "output_text"
            item_content.append({"type": content_type, "text": content.text.value})
        elif content.type == "image_url":
            item_content.append({
                "type": "input_image",
                "image_url": content.image_url.url,
                "detail": content.image_url.detail,
            })
    items.append({"role": m.role, "content": item_content})

conversation = openai.conversations.create(items=items)
          

Note the asymmetry the text branch encodes: user text becomes input_text, assistant text becomes output_text. Get that backwards and the model reads its own prior answers as user instructions.

Retention differs between the two new objects, and the distinction matters for anyone with a data policy to satisfy. OpenAI's documentation, quoted in the developer forum thread on the deprecation, states that response objects are saved for 30 days by default and can be disabled with store: false, while "Conversation objects and items in them are not subject to the 30 day TTL." A forum participant pushed back on that phrasing directly, asking OpenAI to "say what exact TTL you apply rather than which one you don't." As of 21 July 2026 that clarification has not been published.

The part that is not feature parity

OpenAI's position is that Responses reached feature parity before the deprecation was announced. On one specific point, developers disputed that on OpenAI's own forum the same week, and the objection still stands.

Assistants were created through the API. Prompts are not. OpenAI's guide: "Their replacement, prompts, can only be created in the dashboard, where you can version them as you develop your product." The prescribed migration step is a manual click: "Find these in the dashboard and click Create prompt."

Peter Harrison, a developer posting in that announcement thread on 27 August 2025, put the problem in one line: "My application is dynamically creating Assistants. I'm not sure how this is 'feature parity'. Is there a API way to create Prompts?" Another forum member, posting as _j, listed the same gap plus a second one: "There is no API to create a 'prompt' equivalent to what you could do with Assistants" and Assistants "had a working 'truncation' method that at least worked for a number of turns to limit the length of a conversation."

If your product creates an assistant per customer, per workspace or per document set, plan for this now. The workable pattern is to stop treating OpenAI as the store of record for configuration: keep instructions, tool schemas and model choice in your own database or repository, and pass them on each Responses call rather than referencing a prompt ID. That also sidesteps the fact that prompt objects are themselves deprecated. The real cost here is usually the config migration, not the request rewrite.

What OpenAI's migration guide does not cover

The Assistants migration guide is short. Four things that a production Assistants integration almost certainly depends on are not in it at all.

Area Covered in the Assistants migration guide? Where the answer actually is
file_search and vector stores No mention anywhere in the guide File search tool guide
code_interpreter Not in the guide; confirmed folded into Responses in OpenAI's forum announcement Code interpreter guide
Streaming events Not in the guide Streaming responses guide
Function calling and submit_tool_outputs Not in the guide beyond "explicitly managed" Function calling guide

On streaming, the Chat Completions migration guide does give the shape, and it applies: "Chat Completions streaming returns incremental chunks with a delta field. Responses streaming uses typed server-sent events. Update stream consumers to branch on each event's type." It names response.created, response.output_text.delta, response.completed and error for text, plus response.function_call_arguments.delta and response.function_call_arguments.done for function calls. Any handler written against Assistants stream events needs rewriting, not adapting.

On function definitions, the same guide documents two changes that will bite immediately. Function definitions move from externally tagged to internally tagged, meaning the name, description and parameters keys move up out of a nested function object. And strictness flips: "In Chat Completions, functions are non-strict by default. In Responses, omitting strict attempts strict mode; if the schema cannot be made compatible, Responses falls back to non-strict, best-effort function calling and returns the resolved tool with strict: false."

Tool calls and their results are now correlated explicitly: "In Responses, tool calls and their outputs are two distinct types of Items that are correlated using a call_id." OpenAI lists "Sending a function result without the matching call_id" among the most common migration errors.

What this does to your token bill

Migration changes your cost profile, not just your code. These are OpenAI's published list prices as of 21 July 2026, taken from the API pricing page.

Model Input per 1M tokens Cached input per 1M tokens Output per 1M tokens
GPT-5.5 $5.00 $0.50 $30.00
GPT-5.4 $2.50 $0.25 $15.00
GPT-5.4 mini $0.75 $0.075 $4.50

Cached input is a tenth of the price of uncached input across all three tiers. That is why OpenAI's claim about caching is a cost claim rather than a performance one: it reports "lower costs due to improved cache utilization (40% to 80% improvement when compared to Chat Completions in internal tests)." OpenAI also reports "a 3% improvement in SWE-bench with same prompt and setup" for reasoning models on Responses. Both figures are OpenAI's internal tests, not independent benchmarks, and should be treated that way in a business case.

The trap is state. OpenAI states it twice, including in its list of common migration errors: "Assuming previous_response_id removes billing for prior context. Previous input tokens in the response chain are still billed as input tokens." Server-side state saves you code, not money. Long-running conversations grow their own bill linearly, and the only lever that changes the slope is history pruning, which is now your code's responsibility rather than the run object's truncation_strategy. Teams that had been relying on that setting to cap conversation length have to rebuild it. If you are modelling this ahead of a migration, our breakdown of GPT-5.6 inference costs for enterprise AI covers how the per-turn arithmetic compounds.

Batch processing takes 50% off inputs and outputs for asynchronous jobs. The hosted web search tool is billed at $10.00 per 1,000 calls, with search content tokens free.

A 36-day plan

There are 36 days between 21 July 2026 and the shutdown. That is enough for a staged migration and not enough for a rewrite, so stage it.

Week 1. Inventory. Count your assistant objects, thread volume, and which tools each assistant declares. Separate assistants created by hand from assistants created programmatically, because only the second group has a design problem. Move your instructions and tool schemas into source control.

Week 2. Rewrite the request path for one low-risk flow. Change the endpoint, replace the polling loop with a single Responses call, and read response.output_text instead of walking messages. Decide per flow whether state comes from a conversation object, from previous_response_id, or from replaying items yourself.

Week 3. Rebuild the tool loop and the streaming consumer. This is the largest block of work in most codebases. Verify every function result carries the matching call_id, and branch stream handling on event type. Do not port your Assistants stream handler.

Week 4. Backfill and cut over. Point new sessions at conversations, backfill old threads lazily when a user reopens one, and keep the Assistants path behind a flag until the traffic has moved. OpenAI's own rollout checklist ends with a sensible instruction: "Compare behavior, latency, token usage, and errors before routing more traffic to Responses." Instrument that comparison before you need it, not after; the same discipline applies to any model change, which is why evaluation and observability belongs in the migration rather than after it.

Days 29 to 36. Buffer. Something in the tool loop will surprise you.

India-specific considerations

For teams in India building on the Assistants API, two points deserve attention beyond the code.

The first is data retention under the Digital Personal Data Protection Act 2023. Responses are stored by default, and conversation items sit outside the documented 30-day TTL with no published retention period in its place. If your processing record says conversation content is retained for a defined period, a migration to conversation objects changes the factual basis of that statement. Setting store: false and replaying items yourself keeps retention under your control. Teams working through this in detail will find the ground rules in our DPDP engineering playbook for Indian startups.

The second is Zero Data Retention. OpenAI documents a specific path: "For ZDR organizations, OpenAI enforces store: false automatically," with encrypted reasoning items passed back on each request so that reasoning context survives without server-side storage. That path forecloses conversation objects entirely, so ZDR teams should plan on manual item replay from day one rather than migrating twice.

Both routes push you toward holding conversation state in your own infrastructure. That is more code, and it is the version of the architecture that survives the next deprecation, including the one already announced for prompt objects. The same reasoning applies to protocol churn elsewhere in the agent stack, as with the stateless MCP specification migration.

FAQ

How eCorpIT can help

eCorpIT builds and migrates production LLM integrations for teams in India and abroad, and an Assistants API cutover is a well-defined piece of work with a fixed deadline. Our senior engineering teams handle the parts that consume the schedule: rebuilding server-managed tool loops in application code, rewriting streaming consumers against typed events, and designing conversation state that satisfies DPDP and Zero Data Retention constraints. If you are running the Assistants API in production with 36 days left, talk to us about scoping the migration.

References

  1. Deprecations, OpenAI API documentation
  1. Assistants migration guide, OpenAI API documentation
  1. Migrate to the Responses API, OpenAI API documentation
  1. Assistants API beta deprecation, August 26, 2026 sunset, OpenAI Developer Community
  1. API pricing, OpenAI
  1. Function calling guide, OpenAI API documentation
  1. Streaming responses guide, OpenAI API documentation
  1. File search tool guide, OpenAI API documentation
  1. Code interpreter tool guide, OpenAI API documentation
  1. Conversation state guide, OpenAI API documentation
  1. Reusable prompts deprecation notice, OpenAI API documentation
  1. Responses streaming events reference, OpenAI API documentation

Last updated: 21 July 2026.

Frequently asked

Quick answers.

01 When exactly does the Assistants API stop working?
OpenAI's deprecations page gives the shutdown date as 26 August 2026. The deprecation was announced on 26 August 2025, giving developers a 12-month migration window. The replacement listed against that date is the Responses API together with the Conversations API. No staged read-only period has been published.
02 Does OpenAI provide a tool to migrate my threads?
No. The Assistants migration guide states directly that OpenAI will not provide an automated tool for migrating threads to conversations. The recommended approach is to point new user sessions at conversation objects immediately and backfill older threads as needed. OpenAI publishes a code sketch for that backfill.
03 Can I still create the replacement objects through the API?
Not for prompts. OpenAI's guide says prompts can only be created in the dashboard, and the documented migration step is clicking Create prompt against each existing assistant. Applications that create assistants dynamically have no equivalent API call, which developers raised on OpenAI's forum in August 2025.
04 Is the Chat Completions API being shut down too?
No. OpenAI states that Chat Completions remains supported and recommends Responses for new projects rather than as a forced replacement. That lets you migrate one user flow at a time. Only the Assistants API carries a published shutdown date, which is 26 August 2026.
05 Will conversation state reduce my token costs?
No. OpenAI lists that assumption among its common migration errors, stating that previous input tokens in a response chain are still billed as input tokens even when you use previous_response_id. State management saves orchestration code, not spend. Cached input is priced at $0.50 per 1M tokens on GPT-5.5.
06 What happens to my file_search and code_interpreter tools?
The Assistants migration guide does not document either one. OpenAI's forum announcement confirms code interpreter was folded into the Responses API. For file search behaviour you need the separate file search tool guide, since vector stores are not mentioned anywhere in the migration guide itself.
07 How long does a typical migration take?
That depends on your tool loop, not your request count. Swapping endpoints and reading output_text is a small change. Rebuilding server-managed tool orchestration, history pruning and streaming consumers in your own code is the bulk of the work, and OpenAI confirms that orchestration now sits in your application.
08 Should I adopt prompt objects as my new configuration store?
Be careful. OpenAI's own migration guide notes that reusable prompt objects are also being deprecated and advises reviewing that timeline before using them in a long-lived integration. Holding instructions and tool schemas in your source control and passing them per request avoids a second migration later.

About the author

Manu Shukla

Founder & Director

Founder of eCorpIT. Hands-on engineer leading senior-only delivery for AI apps, custom software, and cloud systems for global clients.

Subscribe

One engineering note a week. No fluff, no spam.

Senior-architect playbooks on AI agents, mobile apps, cloud, security, data, and marketing — delivered every Wednesday.

Past the reading

Read enough. Let's build something.

A senior architect responds in 24 working hours with scope, indicative cost, and a timeline. NDA before any technical conversation.