About Freshservice
Freshservice is a IT-service-management platform. Connecting Freshservice to Serval allows the syncing of tickets between the two systems.What the Freshservice integration enables
| Capability | Description |
|---|---|
| Access Management | Create, update, and manage users and their permissions |
| Automation workflows | Trigger automated processes and approval flows |
| Sync Tickets | Maintain data consistency across platforms, sync tickets between Serval and Freshservice |
Freshservice configuration (in Freshservice)
You authenticate Serval with a Freshservice API key. You can generate this key from either:- A dedicated service account (recommended) – clearer attribution and least-privilege.
- An existing admin – faster but all automations appear under that admin’s name.
Generate the API key (service-account flow recommended)
Create or select an agent
Navigate to Admin → click the hamburger menu in the top left → Global Settings → “Agents” in the User Management section.Create a new agent (e.g., Serval Integration) or select an existing agent.
Configure account-wide permissions
Go to Permissions → “Add admin role” under account-wide permissions.Select Workspace Admin → Save.
Add workspace permissions
Under Workspace permissions, click Add to workspace → Add role.Select “IT Supervisor” and “across the workspace” → Save.
Serval Configuration
- In Serval navigate to Apps → Available → Freshservice → Connect.
- Complete the form:

| Field | Value |
|---|---|
| Service Instance ID | Your Freshservice domain. For https://acme.freshservice.com enter acme.freshservice.com. |
| API Key | The key you generated above. |
- Click Save.
Real-time Ticket Synchronization with Webhooks (Optional)
By default, Serval polls Freshservice every 30 seconds to sync tickets. For faster, real-time synchronization, you can configure Freshservice webhooks to push updates to Serval immediately.Webhook setup is optional. Polling will continue to work as a fallback even after webhooks are configured.
Benefits of webhooks
- Lower latency: Ticket changes appear in Serval within seconds instead of up to 30 seconds
- Reduced API usage: Fewer outbound API calls from Serval to Freshservice
- Better rate limit management: Less likely to hit Freshservice API limits for high-volume environments
Prerequisites
Before configuring webhooks, ensure you have:- Admin access to Freshservice
- A working Serval integration (completed the steps above)
- Your Serval webhook URL and authentication token (found in Serval’s ticket sync settings page for your Freshservice integration)

Overview
Serval uses two separate webhooks for Freshservice — one for ticket updates and one for new messages. This separation ensures that ticket metadata and messages are processed independently, which improves reliability and avoids duplicate message ingestion.| Webhook | Trigger | URL suffix | Purpose |
|---|---|---|---|
| Ticket Update | Ticket is Updated | /ticket-update | Syncs ticket field changes (status, priority, assignment, etc.) |
| New Message | Reply is sent | /reply | Syncs new messages (replies and forwards) |
Webhook 1: Ticket Updates
This webhook fires when ticket fields change (status, priority, assignee, etc.). It does not include message data.Navigate to Workflow Automator
In Freshservice, go to Admin → Helpdesk Productivity → Workflow Automator.Click New Automator to create a new workflow.
Create the automator
Configure the automator with a Ticket is Updated event that triggers a Trigger Webhook action:
| Setting | Value |
|---|---|
| Name | Serval - Ticket Update Webhook |
| Event | Ticket is Updated |
Configure the webhook action
Under Actions, add a Trigger Webhook action with the following settings:
In the Content section of the webhook action, select the following properties. These are the ticket fields Serval uses for syncing:
| Field | Value |
|---|---|
| Request Type | POST |
| Callback URL | Your Serval webhook URL with /ticket-update appended (e.g. https://…/freshservice/ticket-update) |
| Encoding | JSON |
| Custom Headers | X-Serval-Webhook-Token set to the authentication token from Serval |
- Ticket ID
- Subject
- Description
- Ticket URL
- Status
- Priority
- Type
- Source
- Urgency
- Impact
- Category
- Group Name
- Agent Name
- Agent Email
- Department Name
- Tags
- Created At
- Due By Time
- Current Date and Time
- Helpdesk Name
- Helpdesk URL
- Event Performer ID
- Event Performer Name
- Event Performer Email
Webhook 2: New Messages
This webhook fires when a new message (reply or forward) is sent on a ticket. It includes message metadata so Serval can correlate the message to the correct ticket.Create a new automator
In Freshservice, go to Admin → Helpdesk Productivity → Workflow Automator.Click New Automator to create a second workflow.
Configure the webhook action
Under Actions, add a Trigger Webhook action:
In the Content section, select only the properties needed to identify the ticket and the message:
| Field | Value |
|---|---|
| Request Type | POST |
| Callback URL | Your Serval webhook URL with /reply appended (e.g. https://…/freshservice/reply) |
| Encoding | JSON |
| Custom Headers | X-Serval-Webhook-Token set to the authentication token from Serval |
- Ticket ID
- Latest Public Comment
- Helpdesk URL
- Current Date and Time
- Event Performer ID
- Event Performer Name
- Event Performer Email
Troubleshooting webhooks
Tickets not syncing in Serval
Tickets not syncing in Serval
- Verify that both webhook URLs are correct and include the proper suffix (
/ticket-updateor/reply) - Check that the Serval integration is properly configured and connected
- Ensure both Workflow Automators are active in Freshservice
- Confirm the
X-Serval-Webhook-Tokenheader value matches what Serval shows
New messages not appearing
New messages not appearing
- Make sure you created the second automator with the Reply is sent event (not Ticket is Updated)
- Verify the Callback URL ends with
/reply - Check that Latest Public Comment is selected in the New Message webhook’s Content properties
Delayed synchronization
Delayed synchronization
If webhooks appear to be working but updates are delayed:
- Freshservice may be batching webhook deliveries during high load
- Check Freshservice’s webhook delivery logs for failures
- Polling will continue to work as a fallback

