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.createSessionendpoint, 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.0that 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.createandPOST /ticketing/ticket.updaterequests 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.