Engineering Portal

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[]#

FieldMeaningUsed to build later calls?
calendarIdId of the calendar layerYes, becomes calendarIds[0]
titleDisplay nameNo
settings.eventSourceTasks or Projects (others unseen)Yes, chooses entityTypeIds (inferred)
settings.eventDisplayModeFull (whole duration) or LastDay (end date only)No, applied client-side
settings.colorLayer colourNo
currentFolderIdsFolder ids for a smart calendar, null for a classic oneYes, selects the body form (inferred)
showDescendantsInclude sub-folders. null on classic calendarsYes, smart calls only
groupIdThe calendarGroupId that was requestedNavigation header
filter, filterRootSaved filter. null in all samplesUntested
authorUid, author, sharedUserUids, unsharedUserUids, editorUserUids, userSettingsOwnership and sharingNo

Response: other keys of data#

KeyNotes
userCalendarUiSettings.calendarSelectedDateEpoch ms of the date being viewed. Drives the viewport
userCalendarUiSettings.calendarViewModeMonth in all samples
userCalendarUiSettings.firstDayOfWeek1 in all samples, but the grid started on Sunday
accountCalendarUiSettings.eventsFetchLimitPerLayer500, matches the classic limit
accountCalendarUiSettings.betaFlags.useUniversalFilterstrue, matches the smart useUniversalFilters
calendarGroups[0].spaceIdNeeded for the wrike-navigation-path header
calendarGroups[0].titleLocalized to the user's language, do not match on it
currentUser, spaces, subscriptionIdContext 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#

FieldValue
loadingStrategy.useUniversalFilterstrue
loadingStrategy.showDescendantsfrom the calendar
loadingStrategy.entityTypeIds[-11] Tasks, [-12] Projects
loadingStrategy.viewPortStart / viewPortEndYYYY-MM-DD, visible range
calendarIds[calendarId]
currentFolderIdsfrom the calendar
between[]
filterRootnull

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 fieldNotes
id, accountId, titleTask or project id and title
startDate, finishDate"YYYY-MM-DD HH:mm:ss", no time zone
updatedDateEpoch ms
parentFoldersMatches currentFolderIds for smart calendars
calendarIds[] for smart events, contains the calendar for classic events
isProject, itemTypeIcon, stage, stageIdPresentation data
responsibleListAssignee uids
rightsPermission map for the viewer
superTaskIds, superTaskParentFolders, superTaskHierarchySub-task context

subscriptionId is a GUID for smart calendars and null for classic ones.

Headers#

HeaderValue
wrike-navigation-path#/single-calendar?id={calendarGroupId}&spaceId={spaceId}
x-w-accountAccount id, from the page URL (?acc=)
x-w-clientapp:calendar;ver:<client version>
wrike-client-id, wrike-versionPer session or client build
x-b3-traceid, x-b3-parentspanidTrace ids, new per call
origin, refererhttps://app-eu.wrike.com, …/workspace.htm?acc={accountId}