---
title: "Create time entry"
method: POST
path: "/time-entry"
tags: ["Time Entries"]
---

# Create time entry

`POST /time-entry`

Log time against a task. Omit endTime to start a running entry that can be closed later with an update.

## Request body

- object
  - `taskId` string, required
  - `startTime` string, date-time, required
  - `endTime` string, date-time — Omit to start an open-ended entry that is still running.
  - `description` string

## Response `200`

The created time entry

- TimeEntry
  - `id` string, required
  - `taskId` string, required
  - `userId` string, nullable, required — Null once the user who logged the time has been removed.
  - `description` string, nullable, required
  - `startTime` string, date-time, required
  - `endTime` string, date-time, nullable, required — Null while the timer is still running.
  - `duration` number, nullable, required — Elapsed seconds, filled in once the entry has an endTime.
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `400` — Invalid timestamps, or unknown task
- `401` — Missing or invalid credentials
- `403` — No workspace access, or missing task:update permission

## Changes

- **2026-08-24** `08bbb5bedb5d` — 3 breaking, 4 info
  - the `endTime` request property type/format changed from `string`/`` to `string`/`date-time`
  - the `startTime` request property type/format changed from `string`/`` to `string`/`date-time`
  - the response property `endTime` became nullable for the status `200`
  - added the non-success response with the status `400`
  - …3 more
- **2026-07-11** `32cece1ebe43` — 4 breaking, 1 info
  - request body became required
  - the `createdAt` response's property type/format changed from ``/`` to `string`/`date-time` for status `200`
  - the `endTime` response's property type/format changed from ``/`` to `string`/`date-time` for status `200`
  - the `startTime` response's property type/format changed from ``/`` to `string`/`date-time` for status `200`
  - …1 more
- **2026-03-05** `c45ef22a736c` — 3 breaking, 3 info
  - the response property `description` became nullable for the status `200`
  - the response property `duration` became nullable for the status `200`
  - the response property `userId` became nullable for the status `200`
  - response property `description` list-of-types was narrowed by removing types `null` from media type `application/json` of response `200`
  - …2 more
- …earlier changes not shown

[Full history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/time-entry/post.md)

---

[API](https://skmtc.dev/usekaneo/apis/kaneo-api.md) · [All operations](https://skmtc.dev/usekaneo/apis/kaneo-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/usekaneo/kaneo-api/revisions/7ccee4eec682/schema)
