Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Freshdesk REST Time Entries API
description: The Freshdesk REST API (v2) provides programmatic access to helpdesk data and operations within Freshdesk, a customer support platform by Freshworks.
version: '2.0'
contact:
name: Freshdesk Support
url: https://support.freshdesk.com/
termsOfService: https://www.freshworks.com/terms/
servers:
- url: https://{domain}.freshdesk.com/api/v2
description: Freshdesk Production Server
variables:
domain:
default: yourdomain
description: Your Freshdesk subdomain, e.g. if your helpdesk URL is acme.freshdesk.com, use acme.
security:
- basicAuth: []
tags:
- name: Time Entries
description: Track time spent on tickets by agents.
paths:
/tickets/{ticket_id}/time_entries:
get:
operationId: listTicketTimeEntries
summary: List time entries for a ticket
description: Retrieves all time entries associated with the specified ticket.
tags:
- Time Entries
parameters:
- $ref: '#/components/parameters/ticketId'
responses:
'200':
description: Successfully retrieved time entries.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TimeEntry'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
operationId: createTimeEntry
summary: Create a time entry
description: Adds a new time entry to the specified ticket to track agent effort.
tags:
- Time Entries
parameters:
- $ref: '#/components/parameters/ticketId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TimeEntryCreate'
responses:
'201':
description: Time entry created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/TimeEntry'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/time_entries:
get:
operationId: listAllTimeEntries
summary: List all time entries
description: Retrieves all time entries across all tickets, with optional filters.
tags:
- Time Entries
parameters:
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/perPage'
responses:
'200':
description: Successfully retrieved time entries.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TimeEntry'
'401':
$ref: '#/components/responses/Unauthorized'
/time_entries/{time_entry_id}:
put:
operationId: updateTimeEntry
summary: Update a time entry
description: Updates the properties of an existing time entry.
tags:
- Time Entries
parameters:
- $ref: '#/components/parameters/timeEntryId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TimeEntryCreate'
responses:
'200':
description: Time entry updated successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/TimeEntry'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteTimeEntry
summary: Delete a time entry
description: Deletes a time entry from a ticket.
tags:
- Time Entries
parameters:
- $ref: '#/components/parameters/timeEntryId'
responses:
'204':
description: Time entry deleted successfully.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/time_entries/{time_entry_id}/toggle_timer:
put:
operationId: toggleTimer
summary: Toggle a timer
description: Starts or stops the timer on a time entry.
tags:
- Time Entries
parameters:
- $ref: '#/components/parameters/timeEntryId'
responses:
'200':
description: Timer toggled successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/TimeEntry'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
responses:
Unauthorized:
description: Authentication failed or credentials were not provided.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: The request is invalid or malformed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
timeEntryId:
name: time_entry_id
in: path
required: true
description: Unique identifier of the time entry.
schema:
type: integer
format: int64
perPage:
name: per_page
in: query
description: Number of results per page (max 100).
schema:
type: integer
minimum: 1
maximum: 100
default: 30
ticketId:
name: ticket_id
in: path
required: true
description: Unique identifier of the ticket.
schema:
type: integer
format: int64
page:
name: page
in: query
description: Page number for paginated results.
schema:
type: integer
minimum: 1
default: 1
schemas:
Error:
type: object
properties:
description:
type: string
description: Human-readable error description.
errors:
type: array
items:
type: object
properties:
field:
type: string
description: Field that caused the error.
message:
type: string
description: Error message for the field.
code:
type: string
description: Error code.
TimeEntryCreate:
type: object
properties:
agent_id:
type: integer
format: int64
description: ID of the agent who performed the work.
billable:
type: boolean
description: Whether the time entry is billable.
note:
type: string
description: Notes about the work performed.
time_spent:
type: string
description: Time spent in hh:mm format.
executed_at:
type: string
format: date-time
description: Date when the work was performed.
TimeEntry:
type: object
properties:
id:
type: integer
format: int64
description: Unique identifier of the time entry.
agent_id:
type: integer
format: int64
description: ID of the agent who logged the time.
ticket_id:
type: integer
format: int64
description: ID of the ticket the time entry is for.
billable:
type: boolean
description: Whether the time entry is billable.
note:
type: string
nullable: true
description: Notes about the time entry.
time_spent:
type: string
description: Time spent in hh:mm format.
timer_running:
type: boolean
description: Whether a timer is currently running on this entry.
executed_at:
type: string
format: date-time
description: Date when the work was performed.
start_time:
type: string
format: date-time
nullable: true
description: Start time of the timer if running.
created_at:
type: string
format: date-time
description: Timestamp when the time entry was created.
updated_at:
type: string
format: date-time
description: Timestamp when the time entry was last updated.
securitySchemes:
basicAuth:
type: http
scheme: basic
description: Freshdesk uses API key-based authentication. Pass your API key as the username with any string (e.g. X) as the password using HTTP Basic Authentication.
externalDocs:
description: Freshdesk API Documentation
url: https://developers.freshdesk.com/api/