freshdesk Time Entries API

Track time spent on tickets by agents.

OpenAPI Specification

freshdesk-time-entries-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Freshdesk REST Agents 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. It exposes endpoints for managing tickets, contacts, companies, agents, groups, conversations, products, email configurations, SLA policies, business hours, time entries, satisfaction ratings, solution categories, solution folders, solution articles, and more. The API uses JSON for request and response payloads, supports API key-based authentication, and follows RESTful conventions for CRUD operations.
  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'
    BadRequest:
      description: The request is invalid or malformed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    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.
    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.
  parameters:
    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
    timeEntryId:
      name: time_entry_id
      in: path
      required: true
      description: Unique identifier of the time entry.
      schema:
        type: integer
        format: int64
    page:
      name: page
      in: query
      description: Page number for paginated results.
      schema:
        type: integer
        minimum: 1
        default: 1
  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/