SISuperintelligenceDocs

Search docs

Search every page of the documentation.

API reference

Calendar

Calendars, events, invitations and iCalendar import and export for the mailboxes you belong to.

These routes act only on mailboxes the signed-in person is a member of; keys get no mailboxes. Times in requests are wall-clock times in the event's timeZone; times in responses are UTC milliseconds, with the event's own wall-clock times alongside. See Calendar.

GET /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars

The mailbox's calendars, default first. The default calendar is created on first use.

Auth: user access token or platform agent key · Scope: calendar:read

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).

Response 200

{
  calendars: {
    calendarId: string
    name: string
    color: string
    description: string
    isDefault: boolean
    version: number
  }[]
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found

POST /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars

Creates a calendar (at most 50 per mailbox).

Auth: user access token or platform agent key · Scope: calendar:write

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).

Request body

FieldTypeRequiredNotes
namestringYes1–100 characters; trimmed
color"blue" | "orange" | "teal" | "amber" | "pink" | "green" | "red" | "gray"No
descriptionstringNoup to 1,000 characters

Response 201

{
  calendar: {
    calendarId: string
    name: string
    color: string
    description: string
    isDefault: boolean
    version: number
  }
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found

PATCH /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars/:calendarId

Renames a calendar or changes its color or description.

Auth: user access token or platform agent key · Scope: calendar:write

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
:calendarIdCalendar id (cal_…).

Request body

FieldTypeRequiredNotes
namestringNo1–100 characters; trimmed
color"blue" | "orange" | "teal" | "amber" | "pink" | "green" | "red" | "gray"No
descriptionstringNoup to 1,000 characters

Response 200

{
  calendar: {
    calendarId: string
    name: string
    color: string
    description: string
    isDefault: boolean
    version: number
  }
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found

DELETE /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars/:calendarId

Deletes a calendar and its events. The default calendar can't be deleted.

Auth: user access token or platform agent key · Scope: calendar:write

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
:calendarIdCalendar id (cal_…).

Response 204 with no body.

Errors

StatusMessage
400The default calendar can't be deleted.
403Mailboxes are only available to members.
404Mailbox not found

GET /v1/orgs/:orgId/mail/mailboxes/:mailboxId/events

Occurrences between from and to (UTC milliseconds, at most 400 days apart) across the mailbox's calendars, or those in calendarId (comma-separated), with recurring events expanded in their own time zone.

Auth: user access token or platform agent key · Scope: calendar:read

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
Query parameterTypeRequiredNotes
fromintegerYescoerced from a string
tointegerYescoerced from a string
calendarIdstringNoup to 2,000 characters

Response 200

{
  occurrences: {
    eventId: string
    calendarId: string
    recurrenceId: number
    start: number
    end: number
    allDay: boolean
    startDate?: string
    endDate?: string
    summary: string
    location: string
    status: "cancelled" | "confirmed" | "tentative"
    busyStatus: "tentative" | "free" | "busy" | "oof" | "workingElsewhere"
    recurring: boolean
    isException: boolean
    isOrganizer: boolean
    attendees: number
    myStatus: null | "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
  }[]
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found

POST /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars/:calendarId/events

Creates an event. Times are wall-clock times in timeZone; all-day events take dates with an exclusive end. With attendees, the mailbox is the organizer and, unless notify is false, attendees are emailed an invitation.

Auth: user access token or platform agent key · Scope: calendar:write

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
:calendarIdCalendar id (cal_…).

Request body

FieldTypeRequiredDefaultNotes
summarystringNo""up to 1,000 characters; trimmed
descriptionstringNoup to 64,000 characters
locationstringNoup to 2,000 characters
allDaybooleanNofalse
startstringYesmatches ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2})?)?$
endstringYesmatches ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2})?)?$
timeZonestringYes1–64 characters
recurrenceobjectNocan be null
recurrence.freq"daily" | "weekly" | "monthly" | "yearly"Yes
recurrence.intervalintegerNo11–999
recurrence.countintegerNo1–5000
recurrence.untilstringNomatches ^\d{4}-\d{2}-\d{2}$
recurrence.byDayobject[]Noup to 7 items
recurrence.byDay[].day"SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"Yes
recurrence.byDay[].nthintegerNo-53–53
recurrence.byMonthDayinteger[]Noup to 31 items; each -31–31
recurrence.byMonthinteger[]Noup to 12 items; each 1–12
recurrence.bySetPosinteger[]Noup to 10 items; each -366–366
attendeesobject[]Noup to 200 items
attendees[].emailstringYestrimmed; lowercased
attendees[].namestringNoup to 200 characters; trimmed
attendees[].optionalbooleanNo
busyStatus"free" | "tentative" | "busy" | "oof" | "workingElsewhere"No
sensitivity"normal" | "personal" | "private" | "confidential"No
remindersinteger[]Noup to 5 items; each -10080–40320
categoriesstring[]Noup to 30 items; each 1–100 characters, trimmed
urlstringNoup to 2,000 characters; URL
status"confirmed" | "tentative" | "cancelled"No
notifybooleanNotrue

Response 201

{
  event: {
    eventId: string
    calendarId: string
    uid: string
    version: number
    summary: string
    description: string
    location: string
    allDay: boolean
    start: number
    end: number
    startLocal: string
    endLocal: string
    timeZone: string
    organizer: null | {
      email: string
      name?: string
    }
    attendees: {
      email: string
      name?: string
      role: "optional" | "required" | "chair" | "non-participant"
      status: "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
      rsvp: boolean
      kind: "unknown" | "resource" | "individual" | "group" | "room"
    }[]
    isOrganizer: boolean
    myStatus: null | "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
    status: "cancelled" | "confirmed" | "tentative"
    busyStatus: "tentative" | "free" | "busy" | "oof" | "workingElsewhere"
    sensitivity: "normal" | "personal" | "private" | "confidential"
    reminders: number[]
    categories: string[]
    url: null | string
    recurrence: null | {
      count?: number
      byDay?: {
        day: "SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"
        nth?: number
      }[]
      freq: "daily" | "weekly" | "monthly" | "yearly"
      interval: number
      byMonthDay?: number[]
      byMonth?: number[]
      bySetPos?: number[]
      weekStart?: "SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"
      until?: string
    }
    rrule: null | string
    exceptions: {
      recurrenceId: number
      start: number
      end: number
      startLocal: string
      endLocal: string
      summary: string
      location: string
      status: "cancelled" | "confirmed" | "tentative"
      myStatus: null | "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
    }[]
    sequence: number
  }
  notified: {
    sent: number
    error?: string
  }
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found
409This mailbox's domain was removed.
409… isn't verified for sending yet.

GET /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars/:calendarId/events/:eventId

An event with its recurrence, attendees, answers and changed occurrences.

Auth: user access token or platform agent key · Scope: calendar:read

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
:calendarIdCalendar id (cal_…).
:eventIdEvent id (evt_…). A recurring event's occurrences share it.

Response 200

{
  event: {
    eventId: string
    calendarId: string
    uid: string
    version: number
    summary: string
    description: string
    location: string
    allDay: boolean
    start: number
    end: number
    startLocal: string
    endLocal: string
    timeZone: string
    organizer: null | {
      email: string
      name?: string
    }
    attendees: {
      email: string
      name?: string
      role: "optional" | "required" | "chair" | "non-participant"
      status: "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
      rsvp: boolean
      kind: "unknown" | "resource" | "individual" | "group" | "room"
    }[]
    isOrganizer: boolean
    myStatus: null | "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
    status: "cancelled" | "confirmed" | "tentative"
    busyStatus: "tentative" | "free" | "busy" | "oof" | "workingElsewhere"
    sensitivity: "normal" | "personal" | "private" | "confidential"
    reminders: number[]
    categories: string[]
    url: null | string
    recurrence: null | {
      count?: number
      byDay?: {
        day: "SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"
        nth?: number
      }[]
      freq: "daily" | "weekly" | "monthly" | "yearly"
      interval: number
      byMonthDay?: number[]
      byMonth?: number[]
      bySetPos?: number[]
      weekStart?: "SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"
      until?: string
    }
    rrule: null | string
    exceptions: {
      recurrenceId: number
      start: number
      end: number
      startLocal: string
      endLocal: string
      summary: string
      location: string
      status: "cancelled" | "confirmed" | "tentative"
      myStatus: null | "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
    }[]
    sequence: number
  }
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found

PUT /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars/:calendarId/events/:eventId

Updates an event, or with recurrenceId one occurrence of it. Changing a series' time or repeat rule drops its changed occurrences and asks attendees again. Attendees get the update; removed attendees get a cancellation. moveTo moves the event to another calendar.

Auth: user access token or platform agent key · Scope: calendar:write

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
:calendarIdCalendar id (cal_…).
:eventIdEvent id (evt_…). A recurring event's occurrences share it.

Request body

FieldTypeRequiredDefaultNotes
summarystringNo""up to 1,000 characters; trimmed
descriptionstringNoup to 64,000 characters
locationstringNoup to 2,000 characters
allDaybooleanNofalse
startstringYesmatches ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2})?)?$
endstringYesmatches ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2})?)?$
timeZonestringYes1–64 characters
recurrenceobjectNocan be null
recurrence.freq"daily" | "weekly" | "monthly" | "yearly"Yes
recurrence.intervalintegerNo11–999
recurrence.countintegerNo1–5000
recurrence.untilstringNomatches ^\d{4}-\d{2}-\d{2}$
recurrence.byDayobject[]Noup to 7 items
recurrence.byDay[].day"SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"Yes
recurrence.byDay[].nthintegerNo-53–53
recurrence.byMonthDayinteger[]Noup to 31 items; each -31–31
recurrence.byMonthinteger[]Noup to 12 items; each 1–12
recurrence.bySetPosinteger[]Noup to 10 items; each -366–366
attendeesobject[]Noup to 200 items
attendees[].emailstringYestrimmed; lowercased
attendees[].namestringNoup to 200 characters; trimmed
attendees[].optionalbooleanNo
busyStatus"free" | "tentative" | "busy" | "oof" | "workingElsewhere"No
sensitivity"normal" | "personal" | "private" | "confidential"No
remindersinteger[]Noup to 5 items; each -10080–40320
categoriesstring[]Noup to 30 items; each 1–100 characters, trimmed
urlstringNoup to 2,000 characters; URL
status"confirmed" | "tentative" | "cancelled"No
notifybooleanNotrue
recurrenceIdintegerNo
ifVersionintegerNo≥ 0
moveToany JSONNo

Response 200

{
  event: {
    eventId: string
    calendarId: string
    uid: string
    version: number
    summary: string
    description: string
    location: string
    allDay: boolean
    start: number
    end: number
    startLocal: string
    endLocal: string
    timeZone: string
    organizer: null | {
      email: string
      name?: string
    }
    attendees: {
      email: string
      name?: string
      role: "optional" | "required" | "chair" | "non-participant"
      status: "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
      rsvp: boolean
      kind: "unknown" | "resource" | "individual" | "group" | "room"
    }[]
    isOrganizer: boolean
    myStatus: null | "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
    status: "cancelled" | "confirmed" | "tentative"
    busyStatus: "tentative" | "free" | "busy" | "oof" | "workingElsewhere"
    sensitivity: "normal" | "personal" | "private" | "confidential"
    reminders: number[]
    categories: string[]
    url: null | string
    recurrence: null | {
      count?: number
      byDay?: {
        day: "SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"
        nth?: number
      }[]
      freq: "daily" | "weekly" | "monthly" | "yearly"
      interval: number
      byMonthDay?: number[]
      byMonth?: number[]
      bySetPos?: number[]
      weekStart?: "SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"
      until?: string
    }
    rrule: null | string
    exceptions: {
      recurrenceId: number
      start: number
      end: number
      startLocal: string
      endLocal: string
      summary: string
      location: string
      status: "cancelled" | "confirmed" | "tentative"
      myStatus: null | "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
    }[]
    sequence: number
  }
  version: number
  notified: {
    sent: number
    error?: string
  }
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found
409This mailbox's domain was removed.
409… isn't verified for sending yet.

DELETE /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars/:calendarId/events/:eventId

Deletes an event, or with recurrenceId one occurrence. Attendees of an event the mailbox organizes get a cancellation unless notify=false.

Auth: user access token or platform agent key · Scope: calendar:write

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
:calendarIdCalendar id (cal_…).
:eventIdEvent id (evt_…). A recurring event's occurrences share it.
Query parameterTypeRequiredDefaultNotes
recurrenceIdintegerNocoerced from a string
notify"true" | "false"No"true"
ifVersionintegerNo≥ 0; coerced from a string

Response 200

{
  notified: {
    sent: number
    error?: string
  }
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found
409This mailbox's domain was removed.
409… isn't verified for sending yet.

POST /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars/:calendarId/events/:eventId/respond

Accepts, tentatively accepts or declines an invitation (or one occurrence) and, unless notify is false, emails the answer to the organizer.

Auth: user access token or platform agent key · Scope: calendar:write

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
:calendarIdCalendar id (cal_…).
:eventIdEvent id (evt_…). A recurring event's occurrences share it.

Request body

FieldTypeRequiredDefaultNotes
status"accepted" | "tentative" | "declined"Yes
recurrenceIdintegerNo
commentstringNoup to 2,000 characters
notifybooleanNotrue

Response 200

{
  event: {
    eventId: string
    calendarId: string
    uid: string
    version: number
    summary: string
    description: string
    location: string
    allDay: boolean
    start: number
    end: number
    startLocal: string
    endLocal: string
    timeZone: string
    organizer: null | {
      email: string
      name?: string
    }
    attendees: {
      email: string
      name?: string
      role: "optional" | "required" | "chair" | "non-participant"
      status: "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
      rsvp: boolean
      kind: "unknown" | "resource" | "individual" | "group" | "room"
    }[]
    isOrganizer: boolean
    myStatus: null | "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
    status: "cancelled" | "confirmed" | "tentative"
    busyStatus: "tentative" | "free" | "busy" | "oof" | "workingElsewhere"
    sensitivity: "normal" | "personal" | "private" | "confidential"
    reminders: number[]
    categories: string[]
    url: null | string
    recurrence: null | {
      count?: number
      byDay?: {
        day: "SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"
        nth?: number
      }[]
      freq: "daily" | "weekly" | "monthly" | "yearly"
      interval: number
      byMonthDay?: number[]
      byMonth?: number[]
      bySetPos?: number[]
      weekStart?: "SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA"
      until?: string
    }
    rrule: null | string
    exceptions: {
      recurrenceId: number
      start: number
      end: number
      startLocal: string
      endLocal: string
      summary: string
      location: string
      status: "cancelled" | "confirmed" | "tentative"
      myStatus: null | "accepted" | "tentative" | "needs-action" | "declined" | "delegated"
    }[]
    sequence: number
  }
  notified: {
    sent: number
    error?: string
  }
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found
409This mailbox's domain was removed.
409… isn't verified for sending yet.

POST /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars/:calendarId/import

Adds the events in an iCalendar file; events whose UID is already in the calendar are replaced. Floating times are read in timeZone.

Auth: user access token or platform agent key · Scope: calendar:write

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
:calendarIdCalendar id (cal_…).

Request body (up to 6 MB)

FieldTypeRequiredNotes
icsstringYes1–5,242,880 characters
timeZonestringNoup to 64 characters

Response 200

{
  created: number
  updated: number
  skipped: number
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found
409This mailbox's domain was removed.
409… isn't verified for sending yet.
413The file is too large (at most 5 MB).

GET /v1/orgs/:orgId/mail/mailboxes/:mailboxId/calendars/:calendarId/export

The calendar as an iCalendar file.

Auth: user access token or platform agent key · Scope: calendar:read

Path parameterDescription
:orgIdOrganization id (org_…).
:mailboxIdMailbox id (mbx_…).
:calendarIdCalendar id (cal_…).

Response 200

{
  filename: string
  ics: string
}

Errors

StatusMessage
403Mailboxes are only available to members.
404Mailbox not found