SpedySpedy Docs

Time Tracking

Track time with timers and manual entries on tickets.

Time tracking lets your team record how long they spend on tickets. You can use live timers that run in real-time or create manual entries for past work. Time tracking must be enabled for your organization.

Timers

List Active Timers

GET /api/v1/time-tracking/timers

Permission required: time-tracking:view

Returns all currently running timers for the authenticated user.

Example Response

[
  {
    "id": "tmr_abc123",
    "ticketId": "tkt_def456",
    "startedAt": "2025-03-20T09:00:00Z",
    "ticket": {
      "displayId": "WEB-42",
      "title": "Fix login page styling"
    }
  }
]

Start Timer

POST /api/v1/time-tracking/timers

Permission required: time-tracking:manage

Start a new timer. Only one timer can run per ticket at a time.

Request Body

FieldTypeRequiredDescription
ticketIdstringYes*Ticket ID to track time for

*Either ticketId or bookingItemId is required.

Example Request

{
  "ticketId": "tkt_def456"
}

Stop Timer

POST /api/v1/time-tracking/timers/{timerId}/stop

Permission required: time-tracking:manage

Stops a running timer and creates a time entry.

Request Body

FieldTypeRequiredDescription
descriptionstringNoDescription of work done

Example Response

{
  "id": "te_abc123",
  "ticketId": "tkt_def456",
  "durationMinutes": 45,
  "description": "Fixed the CSS alignment issue",
  "date": "2025-03-20",
  "createdAt": "2025-03-20T09:45:00Z"
}

Stop All Timers

POST /api/v1/time-tracking/timers/stop-all

Permission required: time-tracking:manage

Stops all running timers for the authenticated user.


Time Entries

List My Entries

GET /api/v1/time-tracking/entries

Permission required: time-tracking:view

Query Parameters

ParameterTypeRequiredDescription
pagenumberNoPage number (default: 1)
limitnumberNoItems per page (default: 20)
yearnumberNoFilter by year
monthnumberNoFilter by month (1-12)
boardIdstringNoFilter by board
searchstringNoSearch in descriptions

Create Manual Entry

POST /api/v1/time-tracking/entries

Permission required: time-tracking:manage

Create a time entry without using a timer.

Request Body

FieldTypeRequiredDescription
ticketIdstringYes*Ticket ID
durationMinutesnumberYesDuration in minutes (min. 1)
descriptionstringNoDescription of work done (max 500 characters)
datestringNoDate of work in ISO 8601 format (defaults to today)

*Either ticketId or bookingItemId is required.

Example Request

{
  "ticketId": "tkt_def456",
  "durationMinutes": 120,
  "description": "Code review and testing",
  "date": "2025-03-19"
}

Update Entry

PATCH /api/v1/time-tracking/entries/{entryId}

Permission required: time-tracking:manage

Request Body

FieldTypeRequiredDescription
durationMinutesnumberNoDuration in minutes
descriptionstringNoDescription
datestringNoDate of work

Delete Entry

DELETE /api/v1/time-tracking/entries/{entryId}

Permission required: time-tracking:manage

Returns 204 No Content.


Board & Ticket Time Entries

List Board Time Entries

GET /api/v1/boards/{boardId}/time-entries

Permission required: time-tracking:view

Returns all time entries for a specific board.

Get Ticket Time Summary

GET /api/v1/boards/{boardId}/tickets/{ticketId}/time-entries/summary

Returns the total time tracked on a ticket.

List Ticket Time Entries

GET /api/v1/boards/{boardId}/tickets/{ticketId}/time-entries

Permission required: time-tracking:view

Returns all time entries for a specific ticket.