Skip to content

Time Entries API ​

Time entries record work done on an issue. Each entry is linked to a user and an issue.

Permissions ​

ActionMinimum RoleScope
Search / listMemberResults scoped to accessible projects (admins see all)
CreateMemberOn issues within accessible projects
UpdateMemberOwn entries only (admins can update any)
DeleteMemberOwn entries only (admins can delete any)

Viewers cannot access time entry endpoints. Non-admin users only see time entries from projects assigned to their teams — this is enforced server-side, not just filtered in the UI.

Endpoints ​

MethodEndpointDescription
GET/api/time-entriesSearch time entries across projects
GET/api/projects/{projectId}/issues/{issueId}/time-entriesList time entries for an issue
POST/api/projects/{projectId}/issues/{issueId}/time-entriesCreate a time entry
PUT/api/projects/{projectId}/issues/{issueId}/time-entries/{entryId}Update a time entry
DELETE/api/projects/{projectId}/issues/{issueId}/time-entries/{entryId}Delete a time entry

Search Time Entries ​

GET /api/time-entries

Query time entries across all projects within a date range, optionally filtered by project.

Query Parameters ​

ParameterTypeRequiredDescription
start_datedateYesStart of date range (ISO 8601)
end_datedateYesEnd of date range (must be on or after start_date)
project_idintegerNoFilter to a specific project
bash
curl "https://{tenant}.kendo.dev/api/time-entries?start_date=2026-03-01&end_date=2026-03-15&project_id=1" \
  -H "Authorization: Bearer your-token"
json
[
  {
    "id": 15,
    "user_id": 1,
    "issue_id": 42,
    "project_id": 1,
    "minutes_spent": 120,
    "started_at": "2026-03-13T09:00:00.000000Z",
    "note": "Implemented cursor-based pagination.",
    "created_at": "2026-03-13T11:00:00.000000Z",
    "issue_title": "Add pagination to issues list",
    "issue_key": "KD-42"
  }
]

Create Time Entry ​

POST /api/projects/{projectId}/issues/{issueId}/time-entries

Request Fields ​

FieldTypeRequiredDescription
minutes_spentintegerYesTime spent in minutes, min 1
started_atdatetimeNoWhen the work started (ISO 8601), cannot be in the future
notestringNoDescription of work done, max 10,000 characters
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/issues/42/time-entries \
  -H "Authorization: Bearer your-token" \
  -H "Content-Type: application/json" \
  -d '{
    "minutes_spent": 120,
    "started_at": "2026-03-13T09:00:00Z",
    "note": "Implemented cursor-based pagination for the issues API endpoint."
  }'
json
{
  "id": 15,
  "user_id": 1,
  "issue_id": 42,
  "project_id": 1,
  "minutes_spent": 120,
  "started_at": "2026-03-13T09:00:00.000000Z",
  "note": "Implemented cursor-based pagination for the issues API endpoint.",
  "created_at": "2026-03-13T11:00:00.000000Z",
  "issue_title": "Add pagination to issues list",
  "issue_key": "KD-42"
}

Update Time Entry ​

PUT /api/projects/{projectId}/issues/{issueId}/time-entries/{entryId}

Partial update. Every field is optional, but at least one must be present. An omitted field keeps its stored value; started_at and note sent as null (or as an empty string) are cleared.

Request Fields ​

FieldTypeRequiredDescription
minutes_spentintegerNoTime spent in minutes, min 1
started_atdatetime or nullNoWhen the work started (ISO 8601), cannot be in the future; null or "" clears it
notestring or nullNoDescription of work done, 1 to 10,000 characters when set; null or "" clears it
bash
curl -X PUT https://{tenant}.kendo.dev/api/projects/1/issues/42/time-entries/15 \
  -H "Authorization: Bearer your-token" \
  -H "Content-Type: application/json" \
  -d '{
    "minutes_spent": 150,
    "started_at": "2026-03-13T09:00:00Z",
    "note": "Implemented and tested cursor-based pagination."
  }'
json
{
  "id": 15,
  "user_id": 1,
  "issue_id": 42,
  "project_id": 1,
  "minutes_spent": 150,
  "started_at": "2026-03-13T09:00:00.000000Z",
  "note": "Implemented and tested cursor-based pagination.",
  "created_at": "2026-03-13T11:00:00.000000Z",
  "issue_title": "Add pagination to issues list",
  "issue_key": "KD-42"
}

Delete Time Entry ​

DELETE /api/projects/{projectId}/issues/{issueId}/time-entries/{entryId}

Returns 204 No Content on success.

bash
curl -X DELETE https://{tenant}.kendo.dev/api/projects/1/issues/42/time-entries/15 \
  -H "Authorization: Bearer your-token"

See Also ​