List running timers
GEThttps://
Returns the running timers, newest first by created_at.
Access
- Token scope
- api:
read: hours Without it:
403 insufficient-token-scope. - Permission
- hours::
read Without it:
403 insufficient-permission. - Rate cost
- 1 unit, read bucket.
view=detailmakes it 3. Adds: each include +1. - Also
If-None-Matchanswers304when nothing changed. Never cached:private, no-store. Unknown query parameters are refused, never ignored.
Both are checked, scope first. A token never does more than its user. How access is checked
A caller sees only their own rows unless they hold times::update_others, and that narrowing is applied before any client filter, before pagination and before the count. meta.page.total is always present, so with_total is not an accepted parameter. Neither is q (a timer has no text to search), nor meta, trashed or force; sending any of them is a 400. To find the timer on one record, send the type and id together: filter[timeable_type]=work_item&filter[timeable_id]=41; a lone half is a 400. A timer on a record type this API does not publish (an Outlook calendar event, which the agenda really does time) is returned with timeable_type set to outlook_event and timeable as the bare {"id": N} reference form, which ?include=timeable cannot expand.
Query parameters
Unknown parameters are refused with 400, naming the parameter.
20 parameters in 5 groups
Views
Pagination
Rows per page. At most 25 when include names a to-many relation; a larger value is 400 invalid-query-parameter.
Default: 25
Filters
- =
- equals
- [in]
- any of a comma-separated list
- [gte][lte][lt]
- at least, at most, less than
Creation timestamp. Pair with sort=id for a stable full export.
Id of the timed record. Send together with timeable_type.
A comma-separated list of at most 100 values.
Last-write timestamp. Use for incremental sync.
Sorting
| Key | Sorts by |
|---|---|
created_at | When the timer row was created, newest first. |
started_at | When the stopwatch was started, oldest first. |
id | Id, ascending. An id never changes, so use this for a stable full export. |
updated_at | Last-write timestamp; pair with the id tiebreaker for sync. |
Prefix a key with - for descending.
Includes
| Path | Adds | Cost |
|---|---|---|
timeable | The work item or planning event being timed. | +1 |
user | The employee the timer belongs to. | +1 |
Request headers
A correlation id of your own. It is recorded in our logs next to the server's request id but never returned: the response header always carries the server's id. A value that does not match the pattern is discarded silently, never rejected.
Response 200
Returns a page of TimerList rows.
The rows, each a TimerList.
per_page, next_cursor, prev_cursor, total, current_page, last_page.
self, next, prev.
Each row is a TimerList: 10 fields.
Headers
ETag- A weak validator (
W/"…") of the rendered page. RateLimit- The IETF
httpapi-ratelimit-headersform of your remaining allowance on the tightest bucket this request touched. RateLimit-Policy- The ceiling and window of that bucket, as
<limit>;w=<seconds>. X-Request-Id- The server-generated ULID correlating this response with our logs.
Every response also carries Cache-Control, Vary, X-Content-Type-Options, X-Plnnrly-Api-Version, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Headers and versioning
Employee this timer belongs to. Always the authenticated user; a timer cannot be started for someone else.
The employee this timer belongs to. Expanding it with ?include=user additionally requires the users::read permission and a token scope covering the users prefix.
The kind of record timeable points at; it says which branch of timeable applies.
work_itemevent
New values may be added.
The record being timed. Expanding it with ?include=timeable additionally requires the read permission and token scope of the target's own prefix, per branch: project_management for a work item, events for a planning event.
Which form you get depends on timeable_type.
work_itemWorkItemSummaryeventEventSummary
When the stopwatch was started. Elapsed time is this value against the client's own clock; the API publishes no elapsed counter.
Errors
8 errors every operation can return: 304, 400, 401, 404, 406, 429, 500, 503
304 Not modified.
400 Bad request.
idempotency-key-requiredinvalid-cursorinvalid-query-parametermalformed-requestunsupported-parameter
401 Unauthenticated.
404 Not found.
406 Not acceptable.
429 Too many requests.
500 Server error.
503 Service unavailable.
This path allows GET, POST. Anything else answers 405.
Something wrong or missing on this page? Tell us