Skip to main content

Events API

List Events

Retrieves calendar events from all connected providers (Google Calendar, Microsoft Outlook, Apple Calendar, CalDAV) for the authenticated user.

Fetches events from multiple calendar providers simultaneously with support for pagination, filtering by date range and specific calendars, and handling of recurring events. Returns chronologically sorted events across all providers with "load more" functionality using nextPageToken tokens.

Endpoint: GET /events

Request Parameters

pageSizenumber

Number of events to fetch per request. Maximum value is capped at 1000.

Default: 250
startstring

ISO date string to filter events starting from this date. Date strings are automatically normalized to handle malformed ISO 8601 formats.

Default: First day of the current month at 00:00:00 UTC
endstring

ISO date string to filter events ending before this date. Date strings are automatically normalized to handle malformed ISO 8601 formats.

Default: Last day of the current month at 23:59:59 UTC
calendarIdsstring

JSON stringified object of calendar IDs per provider. If not provided, events from all calendars will be fetched.

Calendar IDs that are not associated with the authenticated user's connected accounts will be silently ignored.

Example
'{"google":["john.andrew@mobiscroll.com"],"microsoft":[],"apple":[],"caldav":[]}'
Default: undefined
nextPageTokenstring

Base64 encoded JSON pagination state object containing token information for each provider (Google, Microsoft, Apple, CalDAV). This parameter should be passed as-is from the previous response when loading more events.

Default: undefined
singleEventsboolean

Controls how recurring events are returned:

  • true - Expands recurring events into individual instances within the specified time range
  • false - Returns only the master recurring event (series definition) without individual occurrences
Default: true

Response

eventsArray<CalendarEvent>

Array of calendar events from all providers, sorted chronologically by start time. Each CalendarEvent object contains:

providerstring

Provider name: 'google', 'microsoft', 'apple', or 'caldav'

idstring

Event ID

calendarIdstring

Calendar ID

titlestring

Event title/summary

descriptionstring

Event description or notes (optional)

startDate

Event start date/time

endDate

Event end date/time

allDayboolean

True if all-day event

recurringEventIdstring

ID of the recurring event series (if this is an instance of a recurring event) (optional)

colorstring

Event background color (optional)

locationstring

Event location (optional)

attendeesArray<EventAttendee>

Array of event attendees (optional). Each object contains:

emailstring

Attendee email address

statusstring

Response status: 'accepted', 'declined', 'tentative', or 'none'

organizerboolean

True if this attendee is the event organizer (optional)

customobject

Custom key-value pairs for additional event data (optional)

conferencestring

Conference meeting URL (optional).

conferenceDataobject

Provider-specific conference metadata returned by the API (optional). Use this when you need details beyond the conference link.

providerstring

Conference provider identifier. Typical values: google-meet, microsoft-teams, zoom, webex.

Additional fields vary by provider and are returned as-is when available. Typical examples:

  • Google: entryPoints, conferenceSolution, conferenceId
  • Microsoft: provider meeting details from Graph (for example join URL-related fields)
  • Apple/CalDAV: usually only provider
availabilitystring

Event availability: 'busy' or 'free' (optional)

privacystring

Event privacy: 'public', 'private', or 'confidential' (optional)

statusstring

Event status: 'confirmed', 'tentative', or 'cancelled' (optional)

lastModifiedstring

ISO 8601 timestamp of when the event was last modified (optional)

linkstring

Public event link (optional)

originalobject

Original event object from the provider

pageSizenumber

Number of events per page.

nextPageTokenstring

Base64 encoded pagination state for the next request. Pass this value as the nextPageToken parameter when loading more events. Only included in the response if more events are available.

Error Responses

  • 400 - Bad Request. Invalid nextPageToken parameters
  • 401 - Unauthorized. Invalid or missing bearer token
  • 500 - Internal Server Error. Provider error or unexpected failure

Examples

Fetch initial events with date range filter
GET /events?pageSize=50&start=2025-10-01T00:00:00Z&end=2025-10-31T23:59:59Z
Response
{
"events": [
{
"id": "event123",
"title": "Team Meeting",
"start": "2025-10-15T10:00:00Z",
"end": "2025-10-15T11:00:00Z",
"provider": "google",
"allDay": false,
"location": "Conference Room A",
"color": "#9fc6e7",
"lastModified": "2026-03-10T13:36:08.000Z"
}
],
"pageSize": 50,
"nextPageToken": "eyJnb29nbGUiOnsidG9rZW4iOnsiY2FsMTIzIjp7Im5leHRQYWdlVG9rZW4iOiJhYmMifX0sImlzRGVwbGV0ZWQiOmZhbHNlfX0="
}
Load more events using nextPageToken
GET /events?pageSize=50&nextPageToken=eyJnb29nbGUiOnsidG9rZW4iOnsiY2FsMTIzIjp7Im5leHRQYWdlVG9rZW4iOiJhYmMifX0sImlzRGVwbGV0ZWQiOmZhbHNlfX0=
Filter by specific calendars
GET /events?pageSize=25&calendarIds=%7B%22google%22:%5B%22john.andrew%40mobiscroll.com%22%5D,%22microsoft%22:%5B%5D,%22apple%22:%5B%5D,%22caldav%22:%5B%5D%7D
Get recurring event series masters (not expanded)
GET /events?pageSize=50&singleEvents=false
info
  • Events are sorted chronologically by start time across all providers
  • The pageSize is distributed across all active providers (not per provider)
  • Maximum pageSize is capped at 1000 events
  • The nextPageToken token is Base64 encoded and should be passed as-is to subsequent requests
  • Each provider (Google, Microsoft, Apple, CalDAV) tracks its own pagination state independently
  • The nextPageToken parameter is only included in the response when more events are available
  • Date strings are automatically normalized to handle malformed ISO 8601 formats before parsing
  • The color property contains the background color value directly (not an object)
  • Conference links are returned in the conference string field
  • All event endpoints return events in the unified CalendarEvent format across all providers
Conference raw data examples

The conferenceData field stores provider-specific raw meeting metadata.

Google
{
"conferenceData": {
"conferenceId": "abc-defg-hij",
"entryPoints": [
{
"entryPointType": "video",
"uri": "https://meet.google.com/abc-defg-hij"
}
]
}
}
Microsoft
{
"onlineMeeting": {
"joinUrl": "https://teams.microsoft.com/l/meetup-join/...",
"conferenceId": "123456789"
}
}

Create Event

Creates a new calendar event in the specified calendar for the authenticated user.

Supports creating single events or recurring events with recurrence rules. The event is created in the provider's calendar system (Google Calendar, Microsoft Outlook, Apple Calendar, or CalDAV) based on the calendar ID.

Endpoint: POST /event

Request Body

providerstringRequired

Calendar provider where the event will be created. One of: 'google', 'microsoft', 'apple', or 'caldav'.

calendarIdstringRequired

The calendar identifier where the event will be created.

titlestringRequired

The event title/summary.

startstringRequired

ISO date string for the event start time.

endstringRequired

ISO date string for the event end time.

descriptionstring

Event description or notes.

Default: undefined
locationstring

Event location (address, meeting room, etc.).

Default: undefined
allDayboolean

Whether this is an all-day event.

Default: false
attendeesstring[]

Array of attendee email addresses.

Default: undefined
recurrenceobject

Recurrence rule for creating a recurring event series. Object with the following properties:

frequencystringRequired

Recurrence frequency: 'DAILY', 'WEEKLY', 'MONTHLY', or 'YEARLY'

intervalnumber

Interval between occurrences (e.g., 2 for every 2 weeks)

countnumber

Number of occurrences (mutually exclusive with until)

untilstring

End date in format YYYYMMDDTHHMMSSZ (mutually exclusive with count)

byDaystring[]

Array of weekday codes: ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU']

byMonthDaynumber[]

Array of days of the month (1-31)

byMonthnumber[]

Array of months (1-12)

Default: undefined
customobject

Custom key-value pairs for additional event data.

Default: undefined
External IDs

If you need to associate provider-generated event IDs with your own domain entities, store your external/business ID in custom (for example custom.externalEventId = "icoll-rdv-123").

conferencestring

Conference meeting URL (optional). Backward compatibility is preserved for legacy conference string usage.

Default: undefined
conferenceDataobject

Extra conference options and provider-specific metadata (optional).

providerstring

Conference provider identifier. Typical values: google-meet, microsoft-teams, zoom, webex.

autoGenerateboolean

Set to true to auto-generate a provider meeting link when supported. When autoGenerate is true, conference and other conferenceData fields are ignored.

Default: undefined
availabilitystring

Event availability: 'free' or 'busy'.

Default: undefined
privacystring

Event privacy: 'public', 'private', or 'confidential'.

Default: undefined
statusstring

Event status: 'confirmed', 'tentative', or 'cancelled'.

Default: undefined

Response

successboolean

Indicates whether the event was created successfully.

idstring

The event ID.

titlestring

The event title.

startDate

The event start date/time.

endDate

The event end date/time.

messagestring

Error or status message (included on failure).

info

The response includes all properties of the created CalendarEvent object merged at the root level.

Error Responses

  • 400 - Bad Request. Invalid event data or missing required fields
  • 401 - Unauthorized. Invalid or missing bearer token
  • 404 - Not Found. Calendar not found
  • 500 - Internal Server Error. Provider error or unexpected failure

Examples

Create a simple event
POST /event
Content-Type: application/json
{
"provider": "google",
"calendarId": "primary",
"title": "Team Meeting",
"description": "Discuss project updates",
"start": "2025-11-01T10:00:00Z",
"end": "2025-11-01T11:00:00Z",
"location": "Conference Room A",
"conference": {
"url": "https://meet.google.com/abc-defg-hij",
"provider": "google-meet"
}
}
Response
{
"success": true,
"provider": "google",
"id": "event123abc",
"title": "Team Meeting",
"start": "2025-11-01T10:00:00.000Z",
"end": "2025-11-01T11:00:00.000Z",
"allDay": false,
"location": "Conference Room A",
"conference": {
"url": "https://meet.google.com/abc-defg-hij",
"provider": "google-meet"
},
"attendees": [],
"color": "#9fc6e7",
"availability": "busy",
"privacy": "public",
"status": "confirmed",
"lastModified": "2026-03-10T13:36:08.000Z",
"link": "https://calendar.google.com/calendar/event?eid=...",
"original": {
"kind": "calendar#event",
"etag": "\"3366428166344000\"",
"id": "event123abc",
"summary": "Team Meeting"
...
}
}
Create a recurring event
POST /event
Content-Type: application/json
{
"provider": "microsoft",
"calendarId": "AAMkAGVmMDEz...",
"title": "Weekly Standup",
"start": "2025-11-01T09:00:00Z",
"end": "2025-11-01T09:30:00Z",
"allDay": false,
"recurrence": {
"frequency": "WEEKLY",
"interval": 1,
"count": 10,
"byDay": ["MO", "WE", "FR"]
}
}
Create an all-day event
POST /event
Content-Type: application/json
{
"provider": "apple",
"calendarId": "https://caldav.icloud.com/.../calendars/...",
"title": "Conference",
"start": "2025-11-15T00:00:00Z",
"end": "2025-11-16T00:00:00Z",
"allDay": true,
"description": "Annual tech conference"
}
info
  • The provider parameter must match the calendar provider of the calendarId
  • For recurring events, either count or until can be specified, but not both
  • The byDay property is typically used with WEEKLY frequency
  • All-day events should have start and end times at midnight (00:00:00)
  • The response event object format varies by provider (Google, Microsoft, Apple, CalDAV)

Update Event

Updates an existing calendar event.

Supports updating single events, recurring event series, or individual instances of recurring events. For recurring events, you can specify whether to update only the current instance, all following instances, or the entire series.

Endpoint: PUT /event

Request Body

providerstringRequired

Calendar provider where the event exists. One of: 'google', 'microsoft', 'apple', or 'caldav'.

eventIdstringRequired

The event identifier to update.

calendarIdstringRequired

The calendar identifier containing the event.

recurringEventIdstring

The ID of the recurring event series. Required when updating an instance of a recurring event.

Default: undefined
updateModestring

Controls which events in a recurring series are updated:

  • 'this' - Update only this specific instance
  • 'following' - Update this and all following instances
  • 'all' - Update all instances in the series

Only applicable for recurring events. If not specified, updates the single event or series master.

Default: undefined
titlestring

The event title/summary.

startstring

ISO date string for the event start time.

endstring

ISO date string for the event end time.

descriptionstring

Event description or notes.

locationstring

Event location.

allDayboolean

Whether this is an all-day event.

attendeesstring[]

Array of attendee email addresses.

customobject

Custom key-value pairs for additional event data.

conferencestring

Conference meeting URL update (optional).

conferenceDataobject

Extra conference options and provider-specific metadata update (optional).

providerstring

Conference provider identifier. Typical values: google-meet, microsoft-teams, zoom, webex.

autoGenerateboolean

Set to true to auto-generate a provider meeting link when supported. When autoGenerate is true, conference and other conferenceData fields are ignored.

Conference update behavior by provider
  • google: supports conference and conferenceData.autoGenerate
  • microsoft: supports conferenceData.autoGenerate (Teams link generation); manual conference is ignored for online meeting generation
  • apple and caldav: support conference; conferenceData.autoGenerate is ignored
  • conferenceData.autoGenerate takes precedence over conference when both are provided
  • conferenceData.provider identifies the conference system (for example google-meet, microsoft-teams)
availabilitystring

Event availability: 'free' or 'busy'.

privacystring

Event privacy: 'public', 'private', or 'confidential'.

statusstring

Event status: 'confirmed', 'tentative', or 'cancelled'.

recurrenceobject

Recurrence rule for updating recurring event properties. Same structure as create recurrence.

Response

Same structure as Create Event response.

successboolean

Indicates whether the event was updated successfully.

messagestring

Error or status message (included on failure).

info

The response includes all properties of the updated CalendarEvent object merged at the root level.

Error Responses

  • 400 - Bad Request. Invalid event data or missing required fields
  • 401 - Unauthorized. Invalid or missing bearer token
  • 404 - Not Found. Event or calendar not found
  • 500 - Internal Server Error. Provider error or unexpected failure

Examples

Update a simple event
PUT /event
Content-Type: application/json
{
"provider": "google",
"eventId": "event123abc",
"calendarId": "primary",
"title": "Updated Team Meeting",
"start": "2025-11-01T14:00:00Z",
"end": "2025-11-01T15:00:00Z",
"conference": {
"url": "https://meet.google.com/new-room-link",
"provider": "google-meet"
}
}
Update a single instance of a recurring event
PUT /event
Content-Type: application/json
{
"provider": "microsoft",
"eventId": "instance456",
"recurringEventId": "series123",
"calendarId": "AAMkAGVmMDEz...",
"updateMode": "this",
"title": "Standup - Special Topic Today",
"start": "2025-11-01T09:00:00Z",
"end": "2025-11-01T10:00:00Z"
}
Update all future occurrences
PUT /event
Content-Type: application/json
{
"provider": "apple",
"eventId": "recurring-event-id",
"calendarId": "https://caldav.icloud.com/.../calendars/...",
"updateMode": "following",
"location": "New Conference Room B"
}
info
  • The provider parameter must match the calendar provider where the event exists
  • For recurring events, use recurringEventId and updateMode to control update scope
  • Only include fields you want to update; omitted fields remain unchanged
  • When using updateMode: 'this' on a recurring event, a new exception instance may be created
  • The updateMode parameter behavior may vary slightly between providers

Delete Event

Deletes a calendar event.

Supports deleting single events, recurring event series, or individual instances of recurring events. For recurring events, you can specify whether to delete only the current instance, all following instances, or the entire series.

Endpoint: DELETE /event

Request Body

providerstringRequired

Calendar provider where the event exists. One of: 'google', 'microsoft', 'apple', or 'caldav'.

eventIdstringRequired

The event identifier to delete.

calendarIdstringRequired

The calendar identifier containing the event.

recurringEventIdstring

The ID of the recurring event series. Required when deleting an instance of a recurring event.

Default: undefined
deleteModestring

Controls which events in a recurring series are deleted:

  • 'this' - Delete only this specific instance
  • 'following' - Delete this and all following instances
  • 'all' - Delete all instances in the series

Only applicable for recurring events. If not specified, deletes the single event or entire series.

Default: undefined

Response

successboolean

Indicates whether the event was deleted successfully.

messagestring

Confirmation or error message.

Error Responses

  • 400 - Bad Request. Invalid request data or missing required fields
  • 401 - Unauthorized. Invalid or missing bearer token
  • 404 - Not Found. Event or calendar not found
  • 500 - Internal Server Error. Provider error or unexpected failure

Examples

Delete a simple event
DELETE /event
Content-Type: application/json
{
"provider": "google",
"eventId": "event123abc",
"calendarId": "primary"
}
Response
{
"success": true,
"message": "Event deleted successfully"
}
Delete a single instance of a recurring event
DELETE /event
Content-Type: application/json
{
"provider": "microsoft",
"eventId": "instance456",
"recurringEventId": "series123",
"calendarId": "AAMkAGVmMDEz...",
"deleteMode": "this"
}
Delete entire recurring series
DELETE /event
Content-Type: application/json
{
"provider": "apple",
"eventId": "recurring-event-id",
"calendarId": "https://caldav.icloud.com/.../calendars/...",
"deleteMode": "all"
}
info
  • The provider parameter must match the calendar provider where the event exists
  • For recurring events, use recurringEventId and deleteMode to control deletion scope
  • Deleting with deleteMode: 'this' creates an exception (cancelled instance) in the series
  • Deleting with deleteMode: 'all' removes the entire recurring series
  • Deleted events cannot be recovered through the API
  • The deleteMode parameter behavior may vary slightly between providers