Teams error 404 ConversationNotFound: ConversationNotFound - conversation missing or deleted
Last verified against Microsoft Learn - Status codes from bot conversational APIs
Conversation not found.What error 404 ConversationNotFound means
The conversation ID in your request path does not correspond to any live conversation. The status table documents ConversationNotFound as "Conversation wasn't found as it doesn't exist or is deleted," with retry No and the action "Check if conversation ID sent is an expected value. Remove the ID if it was cached." The sibling code ActivityNotFoundInConversation covers the case where the conversation is fine but the message inside it is gone.
For Teams bots this is overwhelmingly a stale conversation reference problem, and proactive messaging is where it bites. The recommended pattern is to create a conversation once and "store the resulting conversationId for future proactive messages" - but stored references age: chats are deleted, teams are archived or rebuilt, users leave the tenant, threads move. A reference written at install time and replayed a year later can point at nothing. The other production classic is environment bleed: conversation IDs from a test tenant replayed against production, or vice versa, since IDs are meaningless outside the tenant and cloud they were minted in.
Malformed IDs land here too. Teams conversation IDs are long, contain @thread markers and message-ID suffixes (;messageid=), and survive neither truncation in a database column nor careless URL encoding. If the send path built the ID by string concatenation, suspect the plumbing before the platform.
What it looks like
{
"error": {
"code": "ConversationNotFound",
"message": "Conversation not found."
}
}Why it happens
- A cached conversation reference points at a chat, thread, or team that was deleted, archived, or recreated.
- The conversation ID was truncated (database column length) or mangled by double URL encoding before use.
- IDs from one tenant or environment were replayed in another after a data copy or migration.
- A channel thread reference includes a ;messageid= suffix for a root message that no longer exists.
- The user left the org, taking their 1:1 conversation with them.
How to fix Teams error 404 ConversationNotFound
- 1Log the exact conversation ID sent and compare it byte-for-byte with a fresh one captured from a live inbound activity in the same context.
- 2Follow the documented action: evict the ID from your cache so scheduled jobs stop replaying it.
- 3For proactive 1:1 messaging, recreate the conversation (POST /v3/conversations with the user and tenant ID) and store the new ID.
- 4For channels, re-fetch the team's channel list and rebuild references rather than resurrecting old ones.
- 5Add a dead-reference sweep: any reference that 404s twice gets quarantined and recreated on next genuine user contact.
How to stop it recurring
Store complete conversation references (ID, serviceUrl, tenant) written only by conversation events, and treat them as expirable cache, not permanent truth. Keep environments' data strictly separated so IDs cannot cross tenants. Validate column widths for conversation IDs - they are longer than people guess. Bots that also handle installationUpdate removals (see BotNotInConversationRoster) rarely accumulate dead references in the first place.
Official reference: Microsoft Learn - Status codes from bot conversational APIs. See all Teams error codes or the Teams limits and quotas.
Related codes
- 404 ActivityNotFoundInConversation: ActivityNotFoundInConversation - message missing or deletedConversation not found.
- 403 BotNotInConversationRoster: BotNotInConversationRoster - bot removed from conversationThe agent isn't part of the conversation roster.
- 403 ForbiddenOperationException: ForbiddenOperationException - app not installed in personal scopeAgent isn't installed in user's personal scope
- 400 Bad Argument: Bad Argument - invalid request payload*scenario specific
Error 404 ConversationNotFound - quick answers
What does Teams error 404 ConversationNotFound mean?
The conversation ID in your request path does not correspond to any live conversation. The status table documents ConversationNotFound as "Conversation wasn't found as it doesn't exist or is deleted," with retry No and the action "Check if conversation ID sent is an expected value.
How do I fix Teams error 404 ConversationNotFound?
1. Log the exact conversation ID sent and compare it byte-for-byte with a fresh one captured from a live inbound activity in the same context. 2. Follow the documented action: evict the ID from your cache so scheduled jobs stop replaying it. 3. For proactive 1:1 messaging, recreate the conversation (POST /v3/conversations with the user and tenant ID) and store the new ID. 4. For channels, re-fetch the team's channel list and rebuild references rather than resurrecting old…
Should I retry after error 404 ConversationNotFound?
No. Retrying the same request produces the same error; the condition has to be fixed first. Treat it as a permanent failure for that message and surface it, rather than looping.
Stop debugging Teams by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.