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: 50)
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.

Get Recent Entries

GET /api/v1/time-tracking/entries/recent

Permission required: time-tracking:view

Returns recent time entries for the current user, grouped by distinct ticket, useful for quick-resume functionality.

Get Today's Entries by Ticket

GET /api/v1/time-tracking/entries/today-by-ticket

Permission required: time-tracking:view

Returns today's time entries grouped by ticket with totals.

Query Parameters

ParameterTypeRequiredDescription
tzOffsetnumberNoClient timezone offset in minutes (from Date.getTimezoneOffset()). Default: 0

Re-sync Entry to MOCO

POST /api/v1/time-tracking/entries/{entryId}/resync

Permission required: time-tracking:manage

Re-syncs a time entry to MOCO. Only available for own entries (or any entry for admins). Billed entries cannot be re-synced.


Booking Items

List Active Booking Items

GET /api/v1/time-tracking/booking-items

Permission required: time-tracking:view

Returns active booking items for the timer/entry picker.

Query Parameters

ParameterTypeRequiredDescription
boardIdstringNoBoard context -- only items enabled for this board
qstringNoSearch by booking item name (case-insensitive)

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.

Query Parameters

ParameterTypeRequiredDescription
pagenumberNoPage number (default: 1)
limitnumberNoItems per page (default: 50)
yearnumberNoFilter by year
monthnumberNoFilter by month (1-12)

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.

Query Parameters

ParameterTypeRequiredDescription
pagenumberNoPage number (default: 1)
limitnumberNoItems per page (default: 50)

Get Ticket Time Summary with Budget

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

Returns the time summary for a ticket including budget information.