Freshdesk: Forward an Email to an Existing Ticket (How & Fixes)
Forwarding an email into an existing Freshdesk ticket — or getting a customer's reply to land back on the right one — comes down to a single rule: Freshdesk reads the subject line for a ticket ID wrapped in square brackets, like [#123]. Put that marker in the subject and the message attaches to that ticket as a note; leave it out, or send from an address Freshdesk doesn't recognise, and you get a brand-new ticket instead. That one rule explains almost every "why did my reply fork into a duplicate?" complaint. This guide walks through how to forward or append an email to an existing ticket, how Freshdesk's threading actually decides where a message goes, and the exact settings to change when it keeps getting it wrong.
The one rule that decides everything: [#ID] in the subject
The mechanism is refreshingly simple once you see it. Freshdesk scans the subject line of every inbound email for a ticket ID in the format [#123] — the hash and the ticket number, inside square brackets. Per Freshworks' email threading documentation, you can place that tag anywhere in the subject and the email will be appended to the matching ticket rather than opening a new one.
This is what makes manual forwarding work. If a customer emails you at a personal address, or a teammate gets a support question in their own inbox, you can pull it into the right ticket by hand: forward the message to your support address and make sure [#123] appears in the subject.
How to forward an email into an existing ticket
The manual method is a three-step move. Say the conversation already lives on ticket #772 and a related email just landed somewhere else:
- Open the stray email in whatever inbox received it (an agent's personal mailbox, a shared alias, etc.).
- Forward it to your Freshdesk support address — the same address that normally converts email into tickets.
- Edit the subject to include the ticket ID, e.g.
Fwd: shipping question [#772]. The bracketed tag can sit at the start, the end, or the middle — Freshdesk only cares that it's present.
When it arrives, Freshdesk matches the [#772] marker and attaches the forwarded message to ticket #772 as a note. A genuinely useful detail here: the original customer no longer has to be part of the ticket thread for this to work. As long as the ticket ID tag is in the subject, the forwarded email gets appended — so an agent can quietly pull context onto a ticket without looping the requester into the forward.
How Freshdesk threading actually works (three markers, not one)
The subject-line ID is the marker you control, but it isn't the only one Freshdesk checks. Understanding all three is what turns "threading is flaky" into "oh, that's why." According to Freshdesk, an inbound email is matched to an existing ticket using any of:
- The ticket ID in the subject — the
[#{{ticket.id}}]tag described above. This is the one you can add or edit manually. - The Message-ID headers — the hidden
In-Reply-ToandReferencesheaders that email clients set when someone hits Reply. This is why a normal reply threads even without a visible ticket number. - A hidden identifier in the email body — Freshdesk stamps a unique marker inside a hidden
div(span) tag in outbound mail; the customer's client quotes it back on reply.
If any of those match, the message threads. On top of the markers, Freshdesk runs a requester check: the sender's email must be one of the requester, an agent on the ticket, an address in the ticket's CC, or an address the ticket was forwarded to. When both a marker and the requester check line up, the message threads cleanly. When neither does, you get a new ticket.
Why replies fork into new tickets (and the fixes)
Now the failure modes. A reply "should" thread but spawns a duplicate whenever both the marker check and the requester check fail. The common culprits:
- The subject lost its ticket ID. Some mail clients, ticketing bridges, or overly aggressive "clean up subject" rules strip the
[#123]tag. Fix: configure a ticket ID prefix (below) and make sure it's in your agent reply template so every outbound subject carries the marker reliably. - Message-ID headers were stripped. Plain-text replies, certain distribution lists, or gateways can drop the
In-Reply-To/Referencesheaders and mangle the hidden div identifier. Fix: don't rely on headers alone — keep the subject-line ID present as a fallback. - The reply came from a different address. A customer replies from their phone's secondary account, or a colleague forwards from an address that isn't on the ticket, so the requester check fails. Fix: add the address to the ticket's CC, or enable use original sender as requester for forwarded emails so the true customer is recorded rather than the forwarder.
- The email hit a different support address. A message CC'd to two of your support mailboxes can create separate tickets. Fix: consolidate where possible, or use the ID tag to force-append.
Set a ticket ID prefix so threading is bulletproof
The single most reliable fix for forking is to stamp a ticket ID prefix on every outgoing subject. Instead of a bare [#123], Freshdesk can emit [#yourcompany-123], which is far less likely to collide with another vendor's ticket numbers in the same inbox and easier to spot in rules.
Per the advanced email settings documentation, you set this under Admin → Channels → Email → Advanced Settings → Configure prefix for ticket ID, where you provide a name that gets appended to the ticket ID — producing the [#prefix-{{ticket.id}}] format. This threading setting is available across current plans, from Free through Enterprise.
One step people miss: saving the prefix isn't enough on its own. You also have to make sure the prefix appears in the subject of your outgoing email templates — most importantly the agent reply template at Admin → Email Notifications → Templates → Agent Reply — plus any automation rules that send email. If the prefix isn't in the outbound subject, the customer's reply won't carry it back, and threading falls back to the (strippable) headers. For a broader tour of these controls, see how to configure email in Freshdesk.
The threading toggles worth knowing
The same Advanced Settings page holds a few switches that quietly change threading behaviour:
- Create a new ticket for each customer response — off by default; turning it on deliberately breaks threading so every reply is its own ticket (and its own SLA). Rarely what you want.
- Ignore the ticket IDs in the subject line while threading — when on, Freshdesk threads on the Message-ID and hidden span tags instead of the subject. Useful when a subject-line ID keeps getting mangled, but it removes your ability to force-append with
[#123]. - Use original sender as requester for forwarded emails — makes a forwarded email create the ticket under the customer's name instead of the forwarding agent. Essential if colleagues forward customer complaints in.
- Use reply-to email address to create requester contacts — recognises alternative reply-to addresses when matching or creating a contact.
Where native forwarding-and-threading stops
Credit where it's due: Freshdesk's threading is genuinely well-designed. Three overlapping markers plus a requester check means a normal reply threads without anyone thinking about it, and the [#ID] tag gives agents a clean manual override for the edge cases. For most teams this is all the threading logic they'll ever need, and none of what follows is a knock on it.
But be clear about what threading is: it's routing. It gets the right email onto the right ticket. It's rule-based, so it will always have seams — a stripped subject, a reply from an unknown address, a gateway that mangles headers — and each of those forks a conversation that a human then has to notice and merge. More to the point, correctly threading an email doesn't move it one inch closer to being answered. A perfectly threaded ticket still lands on an agent who has to read it and type the reply.
That reading-and-answering gap is where an AI layer fits — and it's worth weighing the build-versus-buy tradeoff before you add one. The category of AI agents for customer service exists to do the reasoning the routing can't. Macha is one such layer: it runs on top of the Freshdesk you already use as a native connector — it does not replace your help desk, your mailboxes, or your threading rules. You connect Macha to Freshdesk with your subdomain and API key, and it works on the same email-to-ticket conversations your threading already assembles: reading each new message, drafting a grounded reply, triaging by intent, and looking up order or account status through a custom tool that turns a REST API into something the agent can call. (Macha's connector is for Freshdesk specifically — not Freshchat, Freshservice, or Freshcaller. Credits are consumed per AI action, not per resolution — see the pricing breakdown.) For how that's wired end to end, how to automate Freshdesk with AI walks through it.
The clean division of labour: let Freshdesk own where mail goes — the ID tag, the prefix, the requester check — and layer an agent on top for the part routing can't do, which is answering what lands on the ticket. And if threading is misbehaving in the first place, why Freshdesk email isn't working covers the mailbox-level checks worth ruling out first.
FAQ
How do I forward an email into an existing Freshdesk ticket? Forward the email to your Freshdesk support address and include the ticket ID in the subject, wrapped in square brackets with a hash — for example [#772]. The tag can go anywhere in the subject. Freshdesk matches it and appends the forwarded email to that ticket as a note; the customer doesn't need to be part of the thread for this to work.
Why does a customer's reply create a new ticket instead of threading? Because both of Freshdesk's checks failed: the email carried no recognisable marker (subject-line [#ID], Message-ID headers, or the hidden identifier were missing or stripped), and the sender's address didn't match the ticket's requester, agents, CC, or forwarded-to addresses. Adding a ticket ID prefix to your outgoing templates is the most reliable fix.
Where is the ticket ID prefix setting? Go to Admin → Channels → Email → Advanced Settings → Configure prefix for ticket ID. Enter a name to produce the [#prefix-{{ticket.id}}] format, then add that prefix to your outgoing email templates — especially the agent reply template under Admin → Email Notifications → Templates — so replies thread correctly.
What format does the ticket ID have to be in? [#123] by default — a hash and the ticket number inside square brackets. If you've configured a prefix, it becomes [#prefix-123]. Freshdesk finds it anywhere in the subject line.
Can Macha help without replacing Freshdesk's threading? Yes. Macha connects to Freshdesk as a native connector and works on the same email-to-ticket conversations your threading assembles — drafting grounded replies and triaging by intent — while Freshdesk stays the system of record for how mail is threaded, forwarded, and appended.
Tired of every threaded ticket still needing a human to type the answer? Start a free trial of Macha and connect it to your Freshdesk in minutes.
Add AI agents to your Freshdesk
Macha resolves tickets end to end on Freshdesk — no migration, no code.
Zendesk
Freshdesk
Gorgias
Front
Shopify
Stripe
Slack
Notion
Google Workspace
Confluence

