Skip to main content

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

CapabilityDescription
Access ManagementCreate, update, and manage users and their permissions
Automation workflowsTrigger automated processes and approval flows
Sync TicketsMaintain 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.
1

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.
2

Configure account-wide permissions

Go to Permissions“Add admin role” under account-wide permissions.Select Workspace AdminSave.
3

Add workspace permissions

Under Workspace permissions, click Add to workspaceAdd role.Select “IT Supervisor” and “across the workspace”Save.
Repeat this step for each workspace you want to give the account access to.
4

Enable and retrieve API key

Ensure the API key is enabled in the agent’s settings.Sign in as the agent → SettingsAPI Key and copy the key.

Serval Configuration

  1. In Serval navigate to Apps → Available → Freshservice → Connect.
  2. Complete the form:
Freshservice Connection Form
FieldValue
Service Instance IDYour Freshservice domain. For https://acme.freshservice.com enter acme.freshservice.com.
API KeyThe key you generated above.
  1. Click Save.
Serval can now post comments, update tickets and read data according to the Freshservice permissions you configured.

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)
In Serval, navigate to your Freshservice integration’s ticket sync settings to find the Webhook URL and Authentication Token. You will need these values when configuring Freshservice.
Serval webhook configuration panel showing the webhook URL, authentication header name, and authentication token

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.
WebhookTriggerURL suffixPurpose
Ticket UpdateTicket is Updated/ticket-updateSyncs ticket field changes (status, priority, assignment, etc.)
New MessageReply is sent/replySyncs new messages (replies and forwards)
You will create two Workflow Automators in Freshservice — one for each webhook.

Webhook 1: Ticket Updates

This webhook fires when ticket fields change (status, priority, assignee, etc.). It does not include message data.
1

Navigate to Workflow Automator

In Freshservice, go to AdminHelpdesk ProductivityWorkflow Automator.Click New Automator to create a new workflow.
2

Create the automator

Configure the automator with a Ticket is Updated event that triggers a Trigger Webhook action:
SettingValue
NameServal - Ticket Update Webhook
EventTicket is Updated
3

Configure the webhook action

Under Actions, add a Trigger Webhook action with the following settings:
FieldValue
Request TypePOST
Callback URLYour Serval webhook URL with /ticket-update appended (e.g. https://…/freshservice/ticket-update)
EncodingJSON
Custom HeadersX-Serval-Webhook-Token set to the authentication token from Serval
Make sure the Callback URL ends with /ticket-update. Without this suffix the webhook will be rejected.
In the Content section of the webhook action, select the following properties. These are the ticket fields Serval uses for syncing:
  • 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
Do not select Latest Public Comment. Message data should only be sent via the New Message webhook (below).
Save the automator.
4

Enable the automator

Ensure the automator is Active. You can toggle it on from the Workflow Automator list.
Test by changing a ticket’s status or priority in Freshservice. The change should appear in Serval within seconds.

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.
1

Create a new automator

In Freshservice, go to AdminHelpdesk ProductivityWorkflow Automator.Click New Automator to create a second workflow.
2

Configure the automator

SettingValue
NameServal - New Message Webhook
EventReply is sent
3

Configure the webhook action

Under Actions, add a Trigger Webhook action:
FieldValue
Request TypePOST
Callback URLYour Serval webhook URL with /reply appended (e.g. https://…/freshservice/reply)
EncodingJSON
Custom HeadersX-Serval-Webhook-Token set to the authentication token from Serval
Make sure the Callback URL ends with /reply. Without this suffix the webhook will be rejected.
In the Content section, select only the properties needed to identify the ticket and the message:
  • Ticket ID
  • Latest Public Comment
  • Helpdesk URL
  • Current Date and Time
  • Event Performer ID
  • Event Performer Name
  • Event Performer Email
You don’t need to select ticket metadata fields (status, priority, etc.) here. Those are handled by the Ticket Update webhook.
Save the automator.
4

Enable the automator

Ensure the automator is Active.
Test by replying to a ticket in Freshservice. The message should appear in Serval within seconds.

Troubleshooting webhooks

  • Verify that both webhook URLs are correct and include the proper suffix (/ticket-update or /reply)
  • Check that the Serval integration is properly configured and connected
  • Ensure both Workflow Automators are active in Freshservice
  • Confirm the X-Serval-Webhook-Token header value matches what Serval shows
  • 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
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