---
title: "Start Timer"
method: POST
path: "/timers"
tags: ["Timers"]
---

# Start Timer

`POST /timers`

Start a timer for the authenticated user on a given task.

Only one timer can run per user at a time. If the user already has a timer running on another task, that timer is stopped automatically before the new one starts; the stopped run is committed to a time record on its own date (the date the timer was started, which may not be today for cross-midnight runs).

See [Concepts](/concepts) for timer semantics.

## Request body

- TimerRequest
  - `task` string — Task ID
  - `userDate` string
  - `comment` string

## Response `201`

Created

- Timer
  - `status` 'active' | 'stopped', required
  - `duration` number — Timer duration in seconds
  - `today` number — Today time by user in the timer task
  - `startedAt` string
  - `userDate` string
  - `comment` string
  - `task` Task
    - `id` string, required
    - `name` string, required
    - `projects` string[], required — List of projects ID
    - `section` number, nullable — Section ID
    - `labels` string[]
    - `position` number
    - `description` string, nullable
    - `dueAt` string, nullable — Format: Y-m-d H:i:s
    - `status` 'open' | 'closed'
    - `time` TaskTime
      - `total` number, required — Total task time in seconds
      - `users` object, required — Task time per user ID
    - `estimate` TaskEstimate
      - `total` number, required — Total task estimate in seconds
      - `type` 'overall' | 'users', required
      - `users` object — Task estimate per user ID
    - `attributes` object — Custom attributes from integration
    - `metrics` object — Custom metrics from integration
    - `unbillable` boolean
  - `user` User
    - `id` number, required
    - `name` string, required
    - `headline` string, nullable
    - `avatarUrl` string, nullable
    - `role` 'admin' | 'supervisor' | 'member' | 'member_limited', required
    - `status` 'active' | 'invited' | 'pending' | 'removed', required
    - `phone` string, nullable
    - `capacity` integer, nullable — Weekly capacity in seconds.
    - `avatarUrlLarge` string, nullable
  - `currentTaskTime` TimeRecord
    - `id` number, required — Time record ID
    - `time` number, required — Time recorded in seconds
    - `user` number, required — User ID
    - `date` string, required — Date
    - `task` Task
      - `id` string, required
      - `name` string, required
      - `projects` string[], required — List of projects ID
      - `section` number, nullable — Section ID
      - `labels` string[]
      - `position` number
      - `description` string, nullable
      - `dueAt` string, nullable — Format: Y-m-d H:i:s
      - `status` 'open' | 'closed'
      - `time` TaskTime
        - `total` number, required — Total task time in seconds
        - `users` object, required — Task time per user ID
      - `estimate` TaskEstimate
        - `total` number, required — Total task estimate in seconds
        - `type` 'overall' | 'users', required
        - `users` object — Task estimate per user ID
      - `attributes` object — Custom attributes from integration
      - `metrics` object — Custom metrics from integration
      - `unbillable` boolean
    - `isLocked` boolean
    - `isInvoiced` boolean
    - `comment` string
  - `website` object, nullable
    - `url` string
    - `title` string

## Other responses

- `401` — Unauthorized

---

[API](https://skmtc.net/everhour/apis/everhour-api.md) · [All operations](https://skmtc.net/everhour/apis/everhour-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/everhour/everhour-api/revisions/fc6136e33352/schema)
