Appearance
Time Entries API
Time entries record work done on an issue. Each entry is linked to a user and an issue.
Permissions
| Action | Minimum Role | Scope |
|---|---|---|
| Search / list | Member | Results scoped to accessible projects (admins see all) |
| Create | Member | On issues within accessible projects |
| Update | Member | Own entries only (admins can update any) |
| Delete | Member | Own 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
| Method | Endpoint | Description |
|---|---|---|
GET | /api/time-entries | Search time entries across projects |
GET | /api/projects/{projectId}/issues/{issueId}/time-entries | List time entries for an issue |
POST | /api/projects/{projectId}/issues/{issueId}/time-entries | Create 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
| Parameter | Type | Required | Description |
|---|---|---|---|
start_date | date | Yes | Start of date range (ISO 8601) |
end_date | date | Yes | End of date range (must be on or after start_date) |
project_id | integer | No | Filter 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
| Field | Type | Required | Description |
|---|---|---|---|
minutes_spent | integer | Yes | Time spent in minutes, min 1 |
started_at | datetime | No | When the work started (ISO 8601), cannot be in the future |
note | string | No | Description 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}
Accepts the same fields as create.
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
- Issues API — Issues that time is logged against
- Sprints API — Track time during sprints
- Time Tracking guide — Time tracking in the UI