Freshdesk
Connect Freshdesk to Xyte for two-way ticket sync. Xyte device incidents automatically open, update, and close Freshdesk tickets — and, optionally, changes made in Freshdesk sync back to Xyte.
The Freshdesk integration keeps device incidents in sync between Xyte and your Freshdesk helpdesk.
- Outbound (Xyte → Freshdesk) — when Xyte raises a device incident it creates a matching Freshdesk ticket, pushes updates when the incident changes, and resolves (or closes) the ticket when the Xyte incident is resolved. This works as soon as the integration is connected and enabled.
- Inbound (Freshdesk → Xyte) — optional. When an agent updates or resolves the ticket in Freshdesk, the change can flow back to Xyte. This is set up with a small Freshdesk Automation Rule (see Two-way sync).
Before you start
You'll need:
- Your Freshdesk subdomain — the prefix of your helpdesk URL. If your helpdesk is
https://acme.freshdesk.com, the subdomain isacme. - A Freshdesk agent API key. In Freshdesk, click your profile picture → Profile Settings → View API Key.
- A requester email — set as the requester on every ticket Xyte creates. It defaults to the connected agent's email once you connect, but a dedicated address (e.g.
[email protected]) is recommended: it makes Xyte's tickets easy to recognize and to filter on (see Two-way sync).
Use a dedicated agent seatCreate an agent just for this integration and use its API key. Tickets Xyte opens are attributed to that agent, the key grants exactly that agent's permissions, and you can revoke access without affecting anyone else. The agent needs permission to create and edit tickets.
Step 1 — Connect in Xyte

- In the Xyte Organization portal, open Settings → Integrations → Ticketing System and choose Freshdesk.
- Work through the connect wizard:
- Account — enter the subdomain, the agent's API key, and the requester email, then Test connection and Save & Connect.
- Ticket Fields (optional) — pick the close status and map extra fields. See Ticket fields.
- Two-way sync (optional) — set up the inbound webhook. See Two-way sync.
- Enable — turn the integration on.
Once enabled, the next Xyte device incident will create a Freshdesk ticket automatically: the subject is the incident title, the description carries the full device/space context, and the Xyte priority maps to the Freshdesk priority (Critical → Urgent, High → High, Moderate → Medium, Low/Planning → Low).
Ticket fields (optional)
The Ticket Fields step controls how tickets are closed and lets you map additional Freshdesk fields:
- Close status — the status Xyte sets when the incident is resolved. Resolved (recommended) leaves Freshdesk's own closure workflow, CSAT surveys, and auto-close automations intact; Closed is terminal.
- Required-for-closure fields — if your Freshdesk account requires certain fields before a ticket can be resolved/closed, set their values here so Xyte's close isn't rejected. Dropdown choices are loaded from your account.
- Custom field mapping — add a row per Freshdesk custom field and choose a source:
- Static value — a fixed value (e.g.
category = Hardware). - Xyte field — pulled from the Xyte device/incident: device name, serial, MAC, model, vendor, space name, incident ID, incident priority, incident status, or organization name.
- Static value — a fixed value (e.g.
- Xyte's own canonical fields (subject, description, priority, status, requester) always take precedence over custom mappings.
Two-way sync (optional)
By default the sync is one-way (Xyte → Freshdesk). To also reflect changes made in Freshdesk — an updated subject/priority, or a resolved/closed ticket — back into Xyte, add an Automation Rule that posts ticket changes to Xyte's webhook.
1. Get the URL and token
Open the Two-way sync step of the Xyte wizard. It shows:
- The Webhook URL to post to (e.g.
https://hub.xyte.io/external/freshdesk/webhook). - A unique Webhook token, generated per integration. It authenticates the request and is sent in the
X-Xyte-Tokenheader. - A ready-to-paste content template (also shown below).
Keep the token secretThe token is a shared secret. Treat it like a password — anyone with it can post ticket updates to your organization. You can rotate it any time by submitting a new value in the wizard.
2. Create the Automation Rule
In Freshdesk:
- Go to Admin → Workflows → Automations, open the Ticket Updates tab and click New rule.
- Under When an action performed by, choose Agent or Requester, and add the events Status is changed, Priority is changed and Subject is changed (any to any).
- Under On tickets with these properties, add the condition Requester → Email → is → your requester email — see the note below.
- Under Perform these actions, choose Trigger Webhook with Request type = POST and paste the Webhook URL from the wizard.
- Check Custom headers and add
X-Xyte-Token: <your webhook token>(use the token from the wizard). - Set Encoding = JSON, choose Advanced content and paste the content template:
{
"id": {{ticket.id}},
"subject": "{{ticket.subject}}",
"status": "{{ticket.status}}",
"priority": "{{ticket.priority}}"
}- Preview and save. Changes in Freshdesk now sync back to Xyte.
Only sync Xyte's own tickets — filter on the requester emailEvery ticket Xyte creates carries the requester email you configured in the Account step. Adding the Requester → Email is condition makes the rule fire only for tickets that Xyte created. Without it, every ticket change in your helpdesk would be posted to the webhook — Xyte safely ignores tickets it doesn't recognize, but the condition avoids sending the irrelevant traffic at all.
Optional — a correlation custom field
Ticket matching normally uses the Freshdesk ticket ID. If a ticket might be merged or recreated in Freshdesk, you can add a fallback correlation field:
- In Freshdesk, go to Admin → Ticket Fields and create a single-line text field labeled
xyte incident id— Freshdesk derives the API namecf_xyte_incident_idfrom the label (verify the API name in the field's settings). Leave it optional for agents. - In Xyte, re-run the Account step (Save & Connect) so the new field is picked up.
- Add this line to the webhook content template:
"xyte_incident_id": "{{ticket.cf_xyte_incident_id}}"From then on Xyte stamps every new ticket with the incident ID and matching keeps working even if the ticket ID changes.
What syncs back
- Subject and priority changes update the linked Xyte incident.
- A Resolved or Closed status closes the Xyte incident.
The webhook is idempotent and loop-safe on Xyte's side — repeat or echoed events are ignored, so Xyte's own outbound changes won't bounce back.
Verify the integration
- Create a test device incident in Xyte (or wait for a real one) — a matching ticket should appear in Freshdesk within moments, with your configured requester.
- Update the Xyte incident — the Freshdesk ticket's subject/priority should update.
- Resolve the Xyte incident — the Freshdesk ticket should move to your configured close status.
- If you configured two-way sync, update or resolve the ticket in Freshdesk and confirm the change reflects back in Xyte. (Automation rules run asynchronously — allow a minute or two.)
Troubleshooting
- Connection test fails (401) — wrong API key or subdomain. Enter the subdomain only (no
https://, no.freshdesk.com), and copy the key from the agent's Profile Settings → View API Key. - Tickets aren't created — confirm the agent whose API key you used can create tickets, and that the integration is enabled. If your account requires custom fields on ticket creation, map them in the Ticket Fields step.
- Tickets aren't resolved/closed — your account likely requires fields on closure. Set them under Required-for-closure fields in the Ticket Fields step, or use Resolved instead of Closed as the close status.
- Freshdesk changes don't reach Xyte — check the automation rule is enabled, the change matches one of the rule's events (status/priority/subject), the ticket matches the Requester email condition, and the
X-Xyte-Tokenheader matches the wizard token. Freshdesk runs update automations asynchronously — allow a minute or two. The ticket's activity log in Freshdesk shows whether the rule executed.
Optional — set up a free test account
To trial the integration without touching production, create a free Freshdesk account:
- Go to freshdesk.com and start a free trial (or use the free plan).
- Your trial subdomain and your profile's API key are all you need for the Account step.
Updated about 8 hours ago
