Militime API

Time entries

List, retrieve, create, update and delete time entries.

A time entry records tracked time, optionally linked to a client and project.

The time entry object

{
  "object": "time_entry",
  "id": "te_123",
  "workspace_id": "ws_123",
  "user_id": "usr_123",
  "client_id": "cl_123",
  "project_id": "pr_123",
  "description": "Design review",
  "category": "MEETING",
  "billable": true,
  "started_at": "2026-07-06T09:00:00.000Z",
  "ended_at": "2026-07-06T10:00:00.000Z",
  "duration_sec": 3600,
  "notes": null,
  "created_at": "2026-07-06T10:00:00.000Z",
  "updated_at": "2026-07-06T10:00:00.000Z"
}

category is one of DESIGN, DEVELOPMENT, MEETING, ADMIN, RESEARCH, OTHER. An entry with a null ended_at is a running timer.

List time entries

GET /api/v1/time-entries — scope time_entries:read

Query paramDescription
limit, cursorPagination.
client_id, project_id, user_idFilters.
start, endISO 8601 bounds on started_at.
curl "https://app.militime.ai/api/v1/time-entries?project_id=pr_123&start=2026-07-01T00:00:00Z" \
  -H "Authorization: Bearer mt_live_your_token"

Retrieve a time entry

GET /api/v1/time-entries/{id} — scope time_entries:read

Create a time entry

POST /api/v1/time-entries — scope time_entries:write

FieldRequiredNotes
started_atyesISO 8601.
ended_atnoISO 8601. Include for a completed entry; must be after started_at.
descriptionnoUp to 280 chars.
categorynoDefaults to OTHER.
billablenoDefaults to true.
client_id, project_idno
notesnoUp to 2000 chars.
user_idnoAttribute to this member; defaults to the key's creator. Must be a member of the organization.
curl -X POST https://app.militime.ai/api/v1/time-entries \
  -H "Authorization: Bearer mt_live_your_token" \
  -H "Content-Type: application/json" \
  -d '{
    "started_at": "2026-07-06T09:00:00Z",
    "ended_at": "2026-07-06T10:00:00Z",
    "description": "Design review",
    "category": "MEETING",
    "client_id": "cl_123",
    "project_id": "pr_123"
  }'

Responds 201 with the created entry.

If you omit both user_id and the key has no creator on record, the request fails with invalid_request. Pass an explicit user_id for service tokens.

Update a time entry

PATCH /api/v1/time-entries/{id} — scope time_entries:write

Delete a time entry

DELETE /api/v1/time-entries/{id} — scope time_entries:write

curl -X DELETE https://app.militime.ai/api/v1/time-entries/te_123 \
  -H "Authorization: Bearer mt_live_your_token"
{ "object": "time_entry", "id": "te_123", "deleted": true }