List absences
GEThttps://
Returns absences (the periods employees were away from work), newest first by start.
Access
- Token scope
- api:
read: absences Without it:
403 insufficient-token-scope. - Permission
- absences::
manage 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
An absence with a null end is still running. There is no year parameter and no ongoing parameter: filter a year as filter[start][gte]=2026-01-01T00:00:00Z&filter[start][lte]=2026-12-31T23:59:59Z, and the running absences as filter[end][null]=true. There is no q parameter either: an absence has no text of its own.
Query parameters
Unknown parameters are refused with 400, naming the parameter.
24 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
- [null]
trueorfalse: whether it is empty- [gte][lte][lt]
- at least, at most, less than
Creation timestamp. Pair with sort=id for a stable full export.
When the absence ends. null selects the absences that are still running.
Whether the field is null.
Manager who filed or approved the absence. null selects absences with no manager recorded.
A comma-separated list of at most 100 values.
Last-write timestamp. Use for incremental sync.
Sorting
| Key | Sorts by |
|---|---|
start | When the absence begins, newest first. |
end | When the absence ends. |
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 |
|---|---|---|
manager | The manager who filed or approved the absence. | +1 |
user | The employee the absence is for. | +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 AbsenceList rows.
The rows, each a AbsenceList.
per_page, next_cursor, prev_cursor, total, current_page, last_page.
self, next, prev.
Each row is a AbsenceList: 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
The employee this absence is for. Writing it requires the absences::manage permission.
The employee the absence is for. Renders as an {"id": N} reference unless expanded, and stays a reference when the employee has since been deleted.
Manager who filed or approved the absence, or null when none was recorded. The foreign key nulls on delete, so removing the manager leaves the absence behind unattributed.
The manager who filed or approved the absence; absent when none was recorded.
When the absence ends, or null while it is still running. An ongoing absence reaches through now everywhere it is read (planning capacity and reporting both count it), and that reach is uncapped, so an absence nobody closed keeps consuming capacity. RFC 3339 UTC.
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