Developers ·

Developer’s Guide to the Freshservice API: Syncing Tickets

Akshat Jain
4 min read
Table of Contents

Building an integration with the Freshservice REST API allows developers to read, create, and sync IT service management data. This article explains how to authenticate requests, set up the Freshservice base URL, and call core Freshservice API endpoints. Freshservice uses a REST architecture to manage service desk operations. To improve consistency, the platform deprecated its older V1 version. It moved users to the upgraded API V2 by May 31, 2023. Evaluating a Freshservice API integration requires understanding both direct connection steps and unified abstraction methods.

Handling Freshservice API Authentication

Freshservice API authentication no longer accepts standard passwords. To improve security, the platform deprecated username and password basic authentication. After May 31, 2023, the API only supports Basic auth using a unique Freshservice API key. You pass this API key as the username. The password field accepts any random string.

curl -v -u 'abcdefgh12345678:X' -X GET 'https://domain.freshservice.com/api/v2/tickets/20?include=requester'

With Knit: Instead of collecting and storing each customer’s API key in your own code, you can start the connection flow with Knit’s POST /auth.createSession endpoint, and each customer connects their own Freshservice account through it.

Managing Custom Base URLs and Unified Endpoints

Every API call requires a custom domain base URL. Developers format this URL as https://domain.freshservice.com/api/v2/. A multi-tenant integration has to store and use the right subdomain for every customer it connects.

With Knit: Knit’s Unified Ticketing API eliminates custom domain handling. It provides a single integration base URL at https://api.getknit.dev/v1.0 that routes traffic for Freshservice automatically.

Fetching Tickets: Freshservice vs. Knit’s Unified Ticketing

To list records through the Freshservice get ticket API, send a request to GET /api/v2/tickets. To page through large data sets, you append a page query parameter to the URL. The page count starts at 1.

Knit changes this workflow. Developers fetch these exact records through the GET /ticketing/tickets.list endpoint. To retrieve a single record, you call GET /ticketing/ticket. This structure normalizes the response schema across Freshservice, Zendesk, and other ticketing platforms. The same abstraction applies if you want to Get Open Tickets from the Freshworks API Using Python.

Creating and Updating Tickets Programmatically

Generating a new record programmatically requires a POST request to /api/v2/tickets. The payload accepts form data fields like the subject, description, priority, and status. To modify an existing record, you use the PUT method directed at a specific ticket ID. The update payload uses JSON format.

curl -v -u api_key:X -H "Content-Type: application/json" -X PUT -d '{
  "description": "Update ticket with assets",
  "status": 2,
  "email": "sample@freshservice.com",
  "priority": 1,
  "subject": "Update ticket with assets",
  "assets": [ { "display_id": 7 }, { "display_id": 8 } ]
}' 'https://domain.freshservice.com/api/v2/tickets/1'

With Knit: Knit abstracts these varying HTTP methods. Developers use standard POST /ticketing/ticket.create and POST /ticketing/ticket.update requests for all supported ticketing integrations.

Handling Rate Limits in Your Freshservice Integration

According to the Freshservice API docs, Add-on pack 1 increases the overall rate limit from 500 to 1,000 requests per minute and raises the corresponding sub-limits. If an application exceeds the limit, the API returns an error response. Read the Retry-After value in the response header to check how long to wait before sending another request.

Plan for this wait in any multi-tenant application, where many customers share one integration. For a comparison with another ticketing platform, see Zendesk Ticketing API: Auth, Endpoints & Rate Limits.

Frequently Asked Questions

How do I format the base URL for my specific Freshservice account domain?

The standard format is https://domain.freshservice.com/api/v2/. Replace the "domain" portion with the exact subdomain assigned to your organization.

How do I fetch a list of tickets via the API?

Send a request to the GET /api/v2/tickets endpoint. You can append the page query parameter to scroll through paginated results.

What is the payload to create a new ticket programmatically?

A Freshservice create ticket API request accepts a payload with fields for the subject, description, email, priority, and status. Submit this data to the POST /api/v2/tickets endpoint.

Written by Akshat Jain

Coding chaos into innovation and building from zero to scale

Keep Reading

#1 in Ease of Integrations

4.9 out of 5 stars

4.9 out of 5 stars on G2

G2 Leader, Spring 2026G2 Fastest Implementation, Spring 2026G2 High Performer, Spring 2026G2 Best Est. ROI, Spring 2026

Put Integrations on Autopilot. Talk to Experts.

Knit is loved by customers across the globe due to our seamless product and white glove support. You'll love us too!

Talk to a Human