Every message, one thread

See every email and SMS exchange with a customer as one thread, since Conversations links each reply to the message that it answers. You can query the full message history of any customer or order in one call.

One thread for every email and SMS with a customer

Conversations groups the email and SMS messages about one customer, order, or ticket into a single conversation. When a customer replies, Conversations threads the reply into that conversation. You can also link the conversation to a contact or a record in your own system and search its whole history.

How Conversations threads and finds your messages

Automatic threading

Conversations matches an email reply to its original message through the In-Reply-To and References headers. For SMS, Conversations matches a reply by the phone number and the time since the last message in the thread.

Conversation history

Query a conversation for every message in it, sent and received, with the timestamp, the delivery status, and the engagement data of each one.

Participant context

Link a conversation to a contact, an account, or an identifier from your own system. Conversations indexes those links, so one lookup returns every conversation with a given customer.

Record linking

Attach an order ID, a ticket ID, or any other reference to a conversation as metadata. You can then query the messages about one transaction by that reference.

Message search

Search the text of messages across all your conversations, then narrow the results by participant, date range, channel, or custom metadata.

Multi-participant threads

A conversation can include several participants. Conversations adds the CC and BCC recipients of an email to the participant list and hides each BCC recipient from the other participants.

Recipient profiles

A recipient record has contact details, an opt-out status, and your own metadata. Messaging updates the delivery preferences and the opt-out status on that record when the recipient changes a preference or opts out.

Bulk recipient operations

In a single API call, you can import recipients in bulk, update the metadata on many records, or add a group of participants to a conversation.

1
API call

Returns the full history of a conversation

Any record
Metadata linking

Attach a thread to an order, a ticket, or your own ID

100%
Reply detection

Inbound messages that Conversations threads automatically

Build faster with solutions designed for real-world needs

Give support staff the whole thread for an order

Create a conversation for an order and store the order ID or the customer ID as metadata on it. Conversations then threads every reply into it by matching the email headers and the participant.

Impact

The sample creates a conversation for Lamptey Brokers order TS-99183 on email and SMS, with Kenji Mori as the recipient and the order ID and customer tier in the recipient's properties. Because accepts_replies is true, Conversations adds Kenji's replies on either channel to that thread.

Prompt for a coding agent: Start one email and SMS thread for each order, and add the customer replies to it.

Conjoin IDE

Select a file to view its contents

Thread every reply into the latest conversation with its sender

Conversations assigns each inbound message to the most recent conversation with the same participant. The webhook for that message includes the conversation ID, so your application can fetch the whole thread in one call.

Impact

The sample fetches thread entries by conversation ID and message ID, then prints the conversation ID, the title, and the last update time of each entry.

Prompt for a coding agent: Find the thread for this conversation and message, and print its title and last update.

Conjoin IDE

Select a file to view its contents

One request returns a customer's whole message history

List the conversations of a recipient, filtered by date range and channel. Each conversation in the list includes its message count and the time of its last activity.

Impact

The sample lists up to 25 Wrenford Auto conversations from January 1, 2026 onward that accept replies, most recently updated first, and prints how many it finds.

Prompt for a coding agent: List the conversations since January 1 that accept replies, most recent first.

Conjoin IDE

Select a file to view its contents

Find every message that mentions a phrase

Messaging returns each message whose text matches your keyword, together with its conversation and the snippet that matches. You can narrow the search with the same date, channel, and metadata filters as any other query.

Impact

The sample searches email messages from March 1, 2026 onward for 'damaged on arrival' and prints the subject, the sender, and the date of up to 50 matches, newest first.

Prompt for a coding agent: Find every email since March 1 that mentions 'damaged on arrival', newest first.

Conjoin IDE

Select a file to view its contents

Update a recipient's contact details and preferred channel

Update the contact details or the preferred channels of a recipient through the API whenever the recipient changes them. Messaging sends to that recipient only on the channels in their preferences and marks the record when they opt out.

Impact

The sample updates the Kalemia Fitness contact for Xiomara Aragón with an email address, a Spanish mobile number, and email as the one preferred channel. Messaging then sends to that contact by email.

Prompt for a coding agent: Update this contact's email and Spanish mobile number, and make email their preferred channel.

Conjoin IDE

Select a file to view its contents

Load thousands of recipients in a single request

Messaging creates or updates thousands of recipients from one request, so your code sends the whole list in a single call.

Impact

The sample creates the Petaluma Drycleaners spring loyalty conversation on email and SMS with three loyalty members, each with a loyalty tier and a count of last year's visits. The call sets accepts_replies to false, so the offer is one-way.

Prompt for a coding agent: Send the spring loyalty offer to our members by email and SMS as a one-way message.

Conjoin IDE

Select a file to view its contents

Build your next app on Conjoin

Conjoin will open with a free Build tier, while the pricing page already lists the launch prices for Pro and Business. If you tell us what you're building, we'll talk you through early access.