Read today's schedule
const url = 'https://calendar.work.optidata.cloud/api/users/9e926fb1-e1ff-4fc9-81a1-5740f10ba57f/dashboard';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://calendar.work.optidata.cloud/api/users/9e926fb1-e1ff-4fc9-81a1-5740f10ba57f/dashboard \ --header 'Authorization: Bearer <token>'Everything on the authenticated user’s calendars for today, ready to drop into a home screen.
Each entry is a full event record plus two extras: link, a deep link
that opens the event in Optiwork, and calendar, naming the calendar it
came from and whether the user owns it.
The response is a bare array, not an envelope.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”UUID of the user. Must be the authenticated user — reading somebody else’s schedule is refused.
Responses
Section titled “ Responses ”Today’s events, oldest first.
object
ICalendar UID. Unlike id, it survives the event being copied between
calendars.
Calendar the event lives in.
Invitation id. Part of the concurrency triple you send back on an update.
Modification sequence. Send it back unchanged on an update.
Revision. Send it back unchanged on an update.
One occurrence of an event. A one-off event has exactly one; a recurring event has one per occurrence inside the window you asked for.
object
Invitation id. Send it back when updating or rescheduling.
CONF confirmed, TENT tentative, CANC cancelled, NEED awaiting
an answer.
Start of this occurrence, for a recurring event.
Title of the event.
true when the caller owns the event.
true when this occurrence was detached from its series.
Filled in on a single-event read; on a list, only when
include_description was requested.
Who owns the event.
Time zone the event was created in, when it differs.
Somebody invited to the event.
object
A reminder, expressed as an offset from the event. isNegative: true means
the reminder fires before the moment named by related; the unit fields
that do not apply are 0 or null.
object
Whether the offset is measured from the start or the end.
Who takes part in one occurrence, summarized for an event card. Present
only on a list (GET /events) called with
include_participants_summary=true; absent otherwise.
The participants are listed as the event details show them: the organizer first, when the occurrence has one, then the attendees in invitation order. The organizer is not looked up among the attendees, so an organizer who is also listed as an attendee counts twice. An exception occurrence is summarized from its own participants.
Even with the flag on, an occurrence can lack participantsSummary
when its participants could not be read, for instance when the event
was deleted while the list was being built. Read a missing
participantsSummary as unknown, not as zero participants.
object
Number of participants of the occurrence: the organizer, when there
is one, plus every attendee. 0 when it has none.
The first three participants, in the order above. Empty when the occurrence has none.
object
The participant’s name or, when it has none, their email
address. null when both are missing.
The participant’s avatar, or null when there is none.
Deep link that opens the event in Optiwork.
The calendar the event came from.
object
true when the user owns the calendar.
Examples
[ { "id": "4167", "uid": "de373eee-9440-4420-a53b-1be5ccd4eb18", "calendarId": "10", "invId": "4167-4166", "ms": 20125, "rev": 20120, "nextAlarm": null, "originalCalendarId": null, "instances": [ { "id": "4167", "invId": "4167-4166", "status": "CONF", "name": "Sprint review", "start": "2026-08-19T14:00:00-03:00", "end": "2026-08-19T15:00:00-03:00", "isOrganizer": true, "isRecurring": false, "isException": false, "isAllDay": false, "userParticipationStatus": "ACCEPTED", "attendees": [], "alarms": [] } ], "link": "https://calendar.work.optidata.cloud/urn/acme/v1-8-eyJldmVudF9pZCI6IjQwODkifQ==", "calendar": { "id": "10", "name": "Calendar", "isOwner": true } }]Missing, malformed or expired authentication key.
Authentication failures use an error key rather than message.
object
Examples
No bearer token sent
{ "error": "JWT passport exception: Missing bearer token in request"}The UUID in the path is not the authenticated user.
Generic error envelope used by policy, binding and framework failures.
object
Human-readable description of the failure.
Examplegenerated
{ "message": "example"}Rate limit exceeded. Retry after the window resets.
Generic error envelope used by policy, binding and framework failures.
object
Human-readable description of the failure.
Examples
{ "message": "Too Many Attempts."}