> ## Documentation Index
> Fetch the complete documentation index at: https://docs.custral.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How threading works

> How Custral decides which messages join a conversation and which start a new one.

## Overview

Every message your team exchanges (email, SMS, voice, or chat) belongs to one running **Conversation**. Threading is how Custral decides what joins an existing conversation and what opens a new one, so a back-and-forth stays in a single place instead of scattering into loose messages.

## The conversation lifecycle

<Steps>
  <Step title="A message arrives">An inbound email (or SMS, call, or chat) reaches a connected **Channel**.</Step>

  <Step title="It's matched to a conversation">
    Custral matches the message to an existing Conversation by its Message-ID / reply headers and participants. No match
    opens a new Conversation.
  </Step>

  <Step title="It's assigned and replied to">
    The Conversation has an owner (personal channel) or is routed to a team (shared channel). Replies go out on the same
    channel and stay on the thread.
  </Step>

  <Step title="It's resolved">A **disposition** or outcome wraps the Conversation up, which feeds reporting.</Step>
</Steps>

## One conversation, every channel

Because email, SMS, voice, and chat share the same Conversation model, a thread isn't email-specific: a call or text with the same contact links onto the record's timeline alongside the email. Assignment, dispositions, and timeline events apply across the whole Conversation, not per message.

## When a message joins vs starts a thread

| Signal                        | Joins the existing thread                          | Starts a new conversation                                                 |
| ----------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------- |
| Email reply headers           | `In-Reply-To` / `References` match a known message | No matching headers                                                       |
| Forward                       | —                                                  | Forwarding creates a new thread (it inherits the source's linked records) |
| Same participant, new subject | Handled within the thread's context                | A genuinely new subject with no reply linkage                             |
| Different channel (SMS, call) | Linked on the shared record's timeline             | Its own Conversation if no record link exists                             |

<Note>
  Threading is automatic. There's nothing to configure. If replies are starting new threads unexpectedly, see
  [Troubleshooting](/comms/email/troubleshooting).
</Note>

## See also

* [Get started with Email](/comms/email/getting-started): send your first message.
* [Threads](/comms/email/threads): reading, replying, and linking in the thread view.
* [Conversations & threading](/comms/conversations/overview): the cross-channel model in depth.


## Related topics

- [Slack](/integrations/slack.md)
- [Troubleshooting](/comms/email/troubleshooting.md)
- [Email](/dev/webhooks/events/email.md)
- [Get started with Email](/comms/email/getting-started.md)
- [Stages & Rules](/comms/conversations/stages.md)
