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 tied to an agent account. The agent account determines what Serval can do via the Freshservice API, so proper setup is critical for ticket syncing to work.Create a dedicated service account (recommended)
Create a new agent
Navigate to Admin → click the hamburger menu in the top left → Global Settings → “Agents” in the User Management section.Click New Agent and fill in the details:
- Name:
Serval Integration(or any descriptive name) - Email: A valid email address (e.g.,
serval-integration@yourcompany.com) - Agent Type: Make sure this is Full-time Agent, not Occasional Agent
Configure account-wide permissions
After creating the agent, go to the agent’s profile → Permissions → “Add admin role” under account-wide permissions.Select Workspace Admin → Save.This grants the agent admin-level API access across all workspaces.
Create a custom workspace role
Create a dedicated role in Freshservice before assigning workspace access:
- Go to Admin → click the hamburger menu in the top left → Global Settings → Roles.
- Click New role.
- Name the role Serval Supervisor.
- Under Tickets, configure at least these minimum permissions:
- View tickets
- Send reply to a ticket
- Forward a conversation
- Edit notes → Edit everyone’s notes
- Delete a conversation
- Merge / split a ticket
- Edit ticket properties
- Move tickets
- Create and Edit Tasks in Tickets → Allow reordering of tasks
- Delete a ticket
- Export Tickets
- Click Save.
Assign workspace permissions to the service account
Under the service account’s Workspace permissions, click Add to workspace → Add role.Select “Serval Supervisor” and “across the workspace” → Save.
Using an existing admin account
If you prefer not to create a dedicated service account, you can use an existing admin’s API key. Sign in as the admin → go to Profile Settings → API Settings and copy the key.When using an admin’s API key, all ticket actions performed by Serval (creating tickets, posting replies) will appear as if that admin performed them in Freshservice.
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 URLs and authentication token (found in Serval’s ticket sync settings page for your Freshservice integration)
Find your webhook URLs and token in Serval
In Serval, navigate to your Freshservice integration’s ticket sync settings. You will see two webhook URLs and an authentication token:| Field | Purpose |
|---|---|
| Ticket Update Webhook URL | Ends with /ticket-update — use this for the Ticket Update automator |
| New Reply Webhook URL | Ends with /reply — use this for the New Message automator |
| Authentication Token | Same token used for both webhooks |

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 | Copy and paste the Ticket Update Webhook URL from Serval’s ticket sync settings |
| Encoding | JSON |
| Authentication | Select No Auth |
| Custom Headers | X-Serval-Webhook-Token set to the authentication token from Serval |
- Ticket ID
- 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 | Copy and paste the New Reply Webhook URL from Serval’s ticket sync settings |
| Encoding | JSON |
| Authentication | Select No Auth |
| Custom Headers | X-Serval-Webhook-Token set to the authentication token from Serval |
- Ticket ID
- Ticket ID
- Latest Public Comment
- Helpdesk URL
- Current Date and Time
- Event Performer ID
- Event Performer Name
- Event Performer Email
Enabling webhooks in Serval
After creating both Workflow Automators in Freshservice, return to Serval’s ticket sync settings and toggle on Enable webhook sync. This tells Serval to expect webhooks for real-time updates.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
403 Forbidden errors when Serval creates or updates tickets
403 Forbidden errors when Serval creates or updates tickets
If Serval can read tickets from Freshservice but fails when creating, updating, or replying to tickets:If this returns a
- Verify the agent type — The API key must belong to a Full-time Agent, not a Requester or Occasional Agent. Navigate to Admin → Agents and check the agent’s type.
- Check workspace access — The agent must have an explicit role in each workspace where Serval syncs tickets. Go to the agent’s profile → Workspace permissions and confirm the agent has Serval Supervisor (or an equivalent custom role with the same minimum permissions) for the relevant workspaces.
- Check restricted group membership — For any group where you assign this role, if the group is restricted, add the service account to that group itself.
- Verify agent activation — The agent must have completed the activation process (accepted invitation email, set a password). An unactivated agent’s API key will not have full access.
- Check API key status — Sign in as the agent → Profile Settings → API Settings and ensure the API key is enabled.
- Test the API key directly — Run this command to verify the agent’s access:
403, the API key does not have sufficient permissions.
