Skip to main content
POST
Create a time entry (idempotent)

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

Idempotency-Key
string

Client-generated ULID used to replay a time mutation safely. Optional only for legacy clients during rolling migration.

Path Parameters

team_id
string
required

Team ID is an alphanumerical string that identifies a Team. This is externally referred to as a "Workspace".

Body

application/json

Time entry to create.

id
string
required

Client-supplied ULID. Repeating the same id makes the call idempotent.

Example:

"01HQK6Z9YJZ4M9JX8FVB6QXYAB"

started_at
integer<int64>
required

unix timestamp in seconds

Example:

1608742037016

duration_seconds
integer<int64>
required
Required range: x >= 1
Example:

1800

card_id
string

Card receiving the entry. Preferred over the legacy scope fields.

Example:

"2700"

scope_type
enum<string>

Legacy time-entry target type retained for rolling-client compatibility.

Available options:
card,
category
Example:

"card"

scope_id
string | null

Legacy card ID, used when card_id is omitted.

time_category_id
string | null
Example:

"tc_01HQK6Z9YJZ4M9JX8FVB6QXYAB"

category_id
string | null

Legacy alias for time_category_id.

description
string | null
Example:

"Pairing with Alex on the API spec"

billable
boolean | null

Defaults to the category default (or workspace default) when omitted.

source
enum<string>

How the time entry was created.

Available options:
manual,
timer,
idle
Example:

"manual"

Response

Existing time entry returned (idempotent replay)

time_entry
object

A durable work record. Card ownership metadata is captured when the entry is created, so later card moves or renames do not retroactively change historical reports.