Microsoft announced in September 2026 that ACS Chat retires on 30 September 2028, and that after that date the data goes with it.
This page is about the part the migration guidance covers least: getting your messages out, in a form you can still use afterwards, whatever you migrate to.
Everything here is sourced from Microsoft’s retirement and breaking changes guide, which describes itself as “the authoritative documentation outlining Azure Communication Services retirement timelines and impacted services”. Where this page quotes it, the quotes are exact. Where it draws a conclusion, that is clearly this project’s opinion and not Microsoft’s.
| Announced | September 2026 |
| New sign-ups close | 23 October 2026 — new customers can no longer sign up for the retiring services |
| Chat continues to work | until 30 September 2028 |
| Chat history retained | “according to your storage policies until the retirement date” |
| After the retirement date | “the supporting data and telemetry for retired and standalone services will be decommissioned” |
Two years is less than it sounds for a data migration that needs identity decisions, legal sign-off, and a cutover.
Existing resources created before 23 October 2026 keep working through the transition period. If you are already on ACS Chat, that date does not lock you out of your own estate — it closes the door behind you.
Read that last row again, because it is the one that has a deadline attached:
After the retirement date, the supporting data and telemetry for retired and standalone services will be decommissioned.
Your chat history is not migrated for you and it does not persist somewhere for collection later. If it matters to your business — a care conversation, a support thread, anything you might be asked to produce in two years — it has to leave ACS before the service does.
Microsoft’s stated replacement for ACS Chat is the Microsoft Graph Chat APIs, which the retirement guide lists as requiring a Teams license.
That is a genuinely good fit for a large set of customers: if your chat is between people who already have Microsoft 365 identities, and you are content for Teams to own the conversation experience and its governance, the official path is the one to take. This page is not an argument against it.
The retirement guide is unusually direct about this:
Workloads that require anonymous or application-defined identities, a white-label embedded client, or consumer-scale chat outside Teams should evaluate other communication providers or redesign the experience.
If you are reading that sentence and recognising your own product, you are in the group with the most work to do and the least guidance. Worth being concrete about who that is:
For these workloads the destination is an open question. The extraction is not. Whatever you choose, the messages have to come out of ACS first, and that work is the same in every case.
This is where most of the surprise lives, and it is worth knowing before you scope the work.
There is no “export my chat history” button. There is no bulk export API. Getting your estate out means walking the REST API thread by thread.
ACS identities are scoped to the resource that created them. They look like
8:acs:<resourceGuid>_<userGuid>. The resource GUID is part of the identity, so
an identity does not survive its resource. Any identity you have stored in your
own database becomes unusable the moment the resource does — which, in 2028, is
all of them. If your users table stores ACS ids as the link between a person
and their messages, that link is on a timer.
You can only list threads an identity participates in. There is no administrative “list all threads” call. If no identity you control is a participant in a thread, you cannot enumerate it — so part of extraction is working out who can see what.
It is long enough to fail partway. A real estate is thousands of threads and tens of thousands of messages, with throttling. Any extraction you write needs paging, retries and the ability to resume, because it will not finish on the first attempt.
None of this is exotic. It is all just work that has to be done correctly once, under a deadline, usually by a team that has other plans for those weeks.
Step 2 before step 3 is the whole point. Choosing a destination first makes the data migration part of a much larger project, all of it racing the same date.
Threadvault is an open-source CLI (Apache-2.0) that does steps 1, 2 and 4. It exists because its author lived through a smaller version of this problem — an ACS resource move that left 7,022 messages attributed to the wrong person and 649 stored identities unusable — and wrote the recovery afterwards, so nobody else has to write it at 2am.
It is deliberately not a chat platform and not a Teams migration tool.
threadvault doctor |
Audits your estate for five failure modes, read-only. Never reads a message body. Start here — it takes seconds and gives you a number. |
threadvault mirror backfill |
Copies threads, participants and messages into your own Postgres, keyed to your user ids, preserving original timestamps. Re-running repairs rather than duplicates. |
threadvault migrate extract / plan |
A portable JSONL dump and a report of what a replay would do. --no-bodies writes every field except message text, so the analysis can run where the content cannot leave. |
threadvault migrate verify |
Reads a replayed estate back and proves it matches the source: counts, attribution, timestamps. |
What it does not do: it will not move your history into Teams. Its replay target is another ACS resource, which is useful today for a resource move and will stop being a destination when ACS Chat retires. The part with a future is the mirror — your messages in your database, under your ids, where the next decision is yours rather than a vendor’s.
Every command has been run against real infrastructure rather than test doubles; what is verified lists which command against what, and what each run found.
npx threadvault doctor
Read-only, takes seconds, never reads a message body, and tells you how much of your estate is already in trouble before the deadline gets involved.
If you run it, say what it found — including if the answer was nothing. That is genuinely the most useful thing anyone can contribute.
This page is maintained by the Threadvault project and is not affiliated with or endorsed by Microsoft. Dates and quotations were accurate as of 26 September 2026; the retirement guide is the authoritative source and may change.