Wrike calendar UI endpoints
Undocumented endpoints used by the Wrike web UI on app-eu.wrike.com. Observed means seen in captured traffic. Inferred means deduced from patterns across captures and not confirmed. For the reasoning, see deriving the event calls.
calendar_list#
POST /ui/calendar_list?QoS=Load with body { "calendarGroupId": <number> }.
Response: data.calendars[]#
| Field | Meaning | Used to build later calls? |
|---|---|---|
calendarId | Id of the calendar layer | Yes, becomes calendarIds[0] |
title | Display name | No |
settings.eventSource | Tasks or Projects (others unseen) | Yes, chooses entityTypeIds (inferred) |
settings.eventDisplayMode | Full (whole duration) or LastDay (end date only) | No, applied client-side |
settings.color | Layer colour | No |
currentFolderIds | Folder ids for a smart calendar, null for a classic one | Yes, selects the body form (inferred) |
showDescendants | Include sub-folders. null on classic calendars | Yes, smart calls only |
groupId | The calendarGroupId that was requested | Navigation header |
filter, filterRoot | Saved filter. null in all samples | Untested |
authorUid, author, sharedUserUids, unsharedUserUids, editorUserUids, userSettings | Ownership and sharing | No |
Response: other keys of data#
| Key | Notes |
|---|---|
userCalendarUiSettings.calendarSelectedDate | Epoch ms of the date being viewed. Drives the viewport |
userCalendarUiSettings.calendarViewMode | Month in all samples |
userCalendarUiSettings.firstDayOfWeek | 1 in all samples, but the grid started on Sunday |
accountCalendarUiSettings.eventsFetchLimitPerLayer | 500, matches the classic limit |
accountCalendarUiSettings.betaFlags.useUniversalFilters | true, matches the smart useUniversalFilters |
calendarGroups[0].spaceId | Needed for the wrike-navigation-path header |
calendarGroups[0].title | Localized to the user's language, do not match on it |
currentUser, spaces, subscriptionId | Context only |
get_view_calendar_v2#
POST /ui/get_view_calendar_v2?QoS=Load. One call per calendar, in one of two body forms.
Smart form#
| Field | Value |
|---|---|
loadingStrategy.useUniversalFilters | true |
loadingStrategy.showDescendants | from the calendar |
loadingStrategy.entityTypeIds | [-11] Tasks, [-12] Projects |
loadingStrategy.viewPortStart / viewPortEnd | YYYY-MM-DD, visible range |
calendarIds | [calendarId] |
currentFolderIds | from the calendar |
between | [] |
filterRoot | null |
Classic form#
A flat legacy filter object of about 60 keys. The values that matter are calendarIds, between, dateFrame and showDescendants: true. The rest are empty defaults, plus limit: 500, fetchLimit: 500, offset: 0, showSubtasks: true, withRights: true and firstDayOfWeek: 0.
Response#
{ success, async, data: { events[], subscriptionId } }.
| Event field | Notes |
|---|---|
id, accountId, title | Task or project id and title |
startDate, finishDate | "YYYY-MM-DD HH:mm:ss", no time zone |
updatedDate | Epoch ms |
parentFolders | Matches currentFolderIds for smart calendars |
calendarIds | [] for smart events, contains the calendar for classic events |
isProject, itemTypeIcon, stage, stageId | Presentation data |
responsibleList | Assignee uids |
rights | Permission map for the viewer |
superTaskIds, superTaskParentFolders, superTaskHierarchy | Sub-task context |
subscriptionId is a GUID for smart calendars and null for classic ones.
Headers#
| Header | Value |
|---|---|
wrike-navigation-path | #/single-calendar?id={calendarGroupId}&spaceId={spaceId} |
x-w-account | Account id, from the page URL (?acc=) |
x-w-client | app:calendar;ver:<client version> |
wrike-client-id, wrike-version | Per session or client build |
x-b3-traceid, x-b3-parentspanid | Trace ids, new per call |
origin, referer | https://app-eu.wrike.com, …/workspace.htm?acc={accountId} |