Calendar Events
Public API

List Calendar Events

Changed on

Lists calendar events (time off, holidays, birthdays, and anniversaries) overlapping the requested date range. Events are sorted by start ascending, then type ascending (ANNIVERSARY, BIRTHDAY, HOLIDAY, TIME_OFF), then id ascending. TIME_OFF events represent approved requests only. Events the caller cannot view are silently omitted.

OAuth Scopes: calendar:events

get/api/v1/calendar-events

Request

Query parameters

startstring date required

Inclusive start date (YYYY-MM-DD). Interpreted in the company timezone.

endstring date required

Inclusive end date (YYYY-MM-DD). Must be on or after start; the range must span less than one year.

filterstring

OData filter expression applied to calendar events. Supported operators: eq (equals), in (value in list), and (combine clauses). Filterable fields: type (one of TIME_OFF, HOLIDAY, BIRTHDAY, ANNIVERSARY), employeeId (int), department (int), division (int), location (int). Per-employee filters have no effect on HOLIDAY events. Example: type in ('TIME_OFF','HOLIDAY') and department in (10,20).

directReportsOnlyboolean

When true, restrict employee-bound events to the caller's direct reports. HOLIDAY events are unaffected. Callers with no direct reports receive an empty result for employee-bound types.

includePersonsboolean

When true, embed a persons map (keyed by employee id) alongside the events.

pageinteger

The page number to retrieve.

pageSizeinteger

The number of items to return per page.

Response

A paginated list of calendar events.

personsobject

Present only when includePersons=true. Map keyed by employee id.

Example response

{
  "data": [
    {
      "id": "12345",
      "start": "2026-05-04",
      "end": "2026-05-08",
      "employeeId": 42,
      "timeOffTypeId": 7
    }
  ],
  "meta": {
    "page": 1,
    "pageSize": 100,
    "totalPages": 1,
    "totalItems": 37
  }
}

Changes