@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Calendar API
@base https://www.googleapis.com/calendar/v3
@version v3
@auth OAuth2 | OAuth2
@endpoints 37
@hint download_for_search
@toc calendars(24), channels(1), colors(1), freeBusy(1), users(10)

@group calendars
@endpoint POST /calendars
@optional {conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, description: str, etag: str, id: str, kind: str=calendar#calendar, location: str, summary: str, timeZone: str}
@returns(200) {conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, description: str, etag: str, id: str, kind: str, location: str, summary: str, timeZone: str}

@endpoint DELETE /calendars/{calendarId}
@required {calendarId: str}
@returns(200)

@endpoint GET /calendars/{calendarId}
@required {calendarId: str}
@returns(200) {conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, description: str, etag: str, id: str, kind: str, location: str, summary: str, timeZone: str}

@endpoint PATCH /calendars/{calendarId}
@required {calendarId: str}
@optional {conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, description: str, etag: str, id: str, kind: str=calendar#calendar, location: str, summary: str, timeZone: str}
@returns(200) {conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, description: str, etag: str, id: str, kind: str, location: str, summary: str, timeZone: str}

@endpoint PUT /calendars/{calendarId}
@required {calendarId: str}
@optional {conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, description: str, etag: str, id: str, kind: str=calendar#calendar, location: str, summary: str, timeZone: str}
@returns(200) {conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, description: str, etag: str, id: str, kind: str, location: str, summary: str, timeZone: str}

@endpoint GET /calendars/{calendarId}/acl
@required {calendarId: str}
@optional {maxResults: int, pageToken: str, showDeleted: bool, syncToken: str}
@returns(200) {etag: str, items: [map], kind: str, nextPageToken: str, nextSyncToken: str}

@endpoint POST /calendars/{calendarId}/acl
@required {calendarId: str}
@optional {sendNotifications: bool, etag: str, id: str, kind: str=calendar#aclRule, role: str, scope: map{type: str, value: str}}
@returns(200) {etag: str, id: str, kind: str, role: str, scope: map{type: str, value: str}}

@endpoint POST /calendars/{calendarId}/acl/watch
@required {calendarId: str}
@optional {maxResults: int, pageToken: str, showDeleted: bool, syncToken: str, address: str, expiration: str(int64), id: str, kind: str=api#channel, params: map, payload: bool, resourceId: str, resourceUri: str, token: str, type: str}
@returns(200) {address: str, expiration: str(int64), id: str, kind: str, params: map, payload: bool, resourceId: str, resourceUri: str, token: str, type: str}

@endpoint DELETE /calendars/{calendarId}/acl/{ruleId}
@required {calendarId: str, ruleId: str}
@returns(200)

@endpoint GET /calendars/{calendarId}/acl/{ruleId}
@required {calendarId: str, ruleId: str}
@returns(200) {etag: str, id: str, kind: str, role: str, scope: map{type: str, value: str}}

@endpoint PATCH /calendars/{calendarId}/acl/{ruleId}
@required {calendarId: str, ruleId: str}
@optional {sendNotifications: bool, etag: str, id: str, kind: str=calendar#aclRule, role: str, scope: map{type: str, value: str}}
@returns(200) {etag: str, id: str, kind: str, role: str, scope: map{type: str, value: str}}

@endpoint PUT /calendars/{calendarId}/acl/{ruleId}
@required {calendarId: str, ruleId: str}
@optional {sendNotifications: bool, etag: str, id: str, kind: str=calendar#aclRule, role: str, scope: map{type: str, value: str}}
@returns(200) {etag: str, id: str, kind: str, role: str, scope: map{type: str, value: str}}

@endpoint POST /calendars/{calendarId}/clear
@required {calendarId: str}
@returns(200)

@endpoint GET /calendars/{calendarId}/events
@required {calendarId: str}
@optional {alwaysIncludeEmail: bool, eventTypes: [str], iCalUID: str, maxAttendees: int, maxResults: int, orderBy: str(startTime/updated), pageToken: str, privateExtendedProperty: [str], q: str, sharedExtendedProperty: [str], showDeleted: bool, showHiddenInvitations: bool, singleEvents: bool, syncToken: str, timeMax: str, timeMin: str, timeZone: str, updatedMin: str}
@returns(200) {accessRole: str, defaultReminders: [map], description: str, etag: str, items: [map], kind: str, nextPageToken: str, nextSyncToken: str, summary: str, timeZone: str, updated: str(date-time)}

@endpoint POST /calendars/{calendarId}/events
@required {calendarId: str}
@optional {conferenceDataVersion: int, maxAttendees: int, sendNotifications: bool, sendUpdates: str(all/externalOnly/none), supportsAttachments: bool, anyoneCanAddSelf: bool=false, attachments: [map{fileId: str, fileUrl: str, iconLink: str, mimeType: str, title: str}], attendees: [map{additionalGuests: int(int32), comment: str, displayName: str, email: str, id: str, optional: bool, organizer: bool, resource: bool, responseStatus: str, self: bool}], attendeesOmitted: bool=false, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map, createRequest: map, entryPoints: [map], notes: str, parameters: map, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool=false, etag: str, eventType: str=default, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool=true, guestsCanModify: bool=false, guestsCanSeeOtherGuests: bool=true, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str=calendar#event, location: str, locked: bool=false, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool=false, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str=opaque, updated: str(date-time), visibility: str=default, workingLocationProperties: map{customLocation: map, homeOffice: any, officeLocation: map}}
@returns(200) {anyoneCanAddSelf: bool, attachments: [map], attendees: [map], attendeesOmitted: bool, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map{iconUri: str, key: map{type: str}, name: str}, createRequest: map{conferenceSolutionKey: map{type: str}, requestId: str, status: map{statusCode: str}}, entryPoints: [map], notes: str, parameters: map{addOnParameters: map{parameters: map}}, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool, etag: str, eventType: str, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool, guestsCanModify: bool, guestsCanSeeOtherGuests: bool, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str, location: str, locked: bool, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str, updated: str(date-time), visibility: str, workingLocationProperties: map{customLocation: map{label: str}, homeOffice: any, officeLocation: map{buildingId: str, deskId: str, floorId: str, floorSectionId: str, label: str}}}

@endpoint POST /calendars/{calendarId}/events/import
@required {calendarId: str}
@optional {conferenceDataVersion: int, supportsAttachments: bool, anyoneCanAddSelf: bool=false, attachments: [map{fileId: str, fileUrl: str, iconLink: str, mimeType: str, title: str}], attendees: [map{additionalGuests: int(int32), comment: str, displayName: str, email: str, id: str, optional: bool, organizer: bool, resource: bool, responseStatus: str, self: bool}], attendeesOmitted: bool=false, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map, createRequest: map, entryPoints: [map], notes: str, parameters: map, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool=false, etag: str, eventType: str=default, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool=true, guestsCanModify: bool=false, guestsCanSeeOtherGuests: bool=true, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str=calendar#event, location: str, locked: bool=false, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool=false, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str=opaque, updated: str(date-time), visibility: str=default, workingLocationProperties: map{customLocation: map, homeOffice: any, officeLocation: map}}
@returns(200) {anyoneCanAddSelf: bool, attachments: [map], attendees: [map], attendeesOmitted: bool, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map{iconUri: str, key: map{type: str}, name: str}, createRequest: map{conferenceSolutionKey: map{type: str}, requestId: str, status: map{statusCode: str}}, entryPoints: [map], notes: str, parameters: map{addOnParameters: map{parameters: map}}, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool, etag: str, eventType: str, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool, guestsCanModify: bool, guestsCanSeeOtherGuests: bool, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str, location: str, locked: bool, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str, updated: str(date-time), visibility: str, workingLocationProperties: map{customLocation: map{label: str}, homeOffice: any, officeLocation: map{buildingId: str, deskId: str, floorId: str, floorSectionId: str, label: str}}}

@endpoint POST /calendars/{calendarId}/events/quickAdd
@required {calendarId: str, text: str}
@optional {sendNotifications: bool, sendUpdates: str(all/externalOnly/none)}
@returns(200) {anyoneCanAddSelf: bool, attachments: [map], attendees: [map], attendeesOmitted: bool, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map{iconUri: str, key: map{type: str}, name: str}, createRequest: map{conferenceSolutionKey: map{type: str}, requestId: str, status: map{statusCode: str}}, entryPoints: [map], notes: str, parameters: map{addOnParameters: map{parameters: map}}, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool, etag: str, eventType: str, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool, guestsCanModify: bool, guestsCanSeeOtherGuests: bool, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str, location: str, locked: bool, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str, updated: str(date-time), visibility: str, workingLocationProperties: map{customLocation: map{label: str}, homeOffice: any, officeLocation: map{buildingId: str, deskId: str, floorId: str, floorSectionId: str, label: str}}}

@endpoint POST /calendars/{calendarId}/events/watch
@required {calendarId: str}
@optional {alwaysIncludeEmail: bool, eventTypes: [str], iCalUID: str, maxAttendees: int, maxResults: int, orderBy: str(startTime/updated), pageToken: str, privateExtendedProperty: [str], q: str, sharedExtendedProperty: [str], showDeleted: bool, showHiddenInvitations: bool, singleEvents: bool, syncToken: str, timeMax: str, timeMin: str, timeZone: str, updatedMin: str, address: str, expiration: str(int64), id: str, kind: str=api#channel, params: map, payload: bool, resourceId: str, resourceUri: str, token: str, type: str}
@returns(200) {address: str, expiration: str(int64), id: str, kind: str, params: map, payload: bool, resourceId: str, resourceUri: str, token: str, type: str}

@endpoint DELETE /calendars/{calendarId}/events/{eventId}
@required {calendarId: str, eventId: str}
@optional {sendNotifications: bool, sendUpdates: str(all/externalOnly/none)}
@returns(200)

@endpoint GET /calendars/{calendarId}/events/{eventId}
@required {calendarId: str, eventId: str}
@optional {alwaysIncludeEmail: bool, maxAttendees: int, timeZone: str}
@returns(200) {anyoneCanAddSelf: bool, attachments: [map], attendees: [map], attendeesOmitted: bool, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map{iconUri: str, key: map{type: str}, name: str}, createRequest: map{conferenceSolutionKey: map{type: str}, requestId: str, status: map{statusCode: str}}, entryPoints: [map], notes: str, parameters: map{addOnParameters: map{parameters: map}}, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool, etag: str, eventType: str, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool, guestsCanModify: bool, guestsCanSeeOtherGuests: bool, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str, location: str, locked: bool, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str, updated: str(date-time), visibility: str, workingLocationProperties: map{customLocation: map{label: str}, homeOffice: any, officeLocation: map{buildingId: str, deskId: str, floorId: str, floorSectionId: str, label: str}}}

@endpoint PATCH /calendars/{calendarId}/events/{eventId}
@required {calendarId: str, eventId: str}
@optional {alwaysIncludeEmail: bool, conferenceDataVersion: int, maxAttendees: int, sendNotifications: bool, sendUpdates: str(all/externalOnly/none), supportsAttachments: bool, anyoneCanAddSelf: bool=false, attachments: [map{fileId: str, fileUrl: str, iconLink: str, mimeType: str, title: str}], attendees: [map{additionalGuests: int(int32), comment: str, displayName: str, email: str, id: str, optional: bool, organizer: bool, resource: bool, responseStatus: str, self: bool}], attendeesOmitted: bool=false, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map, createRequest: map, entryPoints: [map], notes: str, parameters: map, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool=false, etag: str, eventType: str=default, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool=true, guestsCanModify: bool=false, guestsCanSeeOtherGuests: bool=true, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str=calendar#event, location: str, locked: bool=false, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool=false, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str=opaque, updated: str(date-time), visibility: str=default, workingLocationProperties: map{customLocation: map, homeOffice: any, officeLocation: map}}
@returns(200) {anyoneCanAddSelf: bool, attachments: [map], attendees: [map], attendeesOmitted: bool, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map{iconUri: str, key: map{type: str}, name: str}, createRequest: map{conferenceSolutionKey: map{type: str}, requestId: str, status: map{statusCode: str}}, entryPoints: [map], notes: str, parameters: map{addOnParameters: map{parameters: map}}, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool, etag: str, eventType: str, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool, guestsCanModify: bool, guestsCanSeeOtherGuests: bool, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str, location: str, locked: bool, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str, updated: str(date-time), visibility: str, workingLocationProperties: map{customLocation: map{label: str}, homeOffice: any, officeLocation: map{buildingId: str, deskId: str, floorId: str, floorSectionId: str, label: str}}}

@endpoint PUT /calendars/{calendarId}/events/{eventId}
@required {calendarId: str, eventId: str}
@optional {alwaysIncludeEmail: bool, conferenceDataVersion: int, maxAttendees: int, sendNotifications: bool, sendUpdates: str(all/externalOnly/none), supportsAttachments: bool, anyoneCanAddSelf: bool=false, attachments: [map{fileId: str, fileUrl: str, iconLink: str, mimeType: str, title: str}], attendees: [map{additionalGuests: int(int32), comment: str, displayName: str, email: str, id: str, optional: bool, organizer: bool, resource: bool, responseStatus: str, self: bool}], attendeesOmitted: bool=false, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map, createRequest: map, entryPoints: [map], notes: str, parameters: map, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool=false, etag: str, eventType: str=default, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool=true, guestsCanModify: bool=false, guestsCanSeeOtherGuests: bool=true, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str=calendar#event, location: str, locked: bool=false, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool=false, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str=opaque, updated: str(date-time), visibility: str=default, workingLocationProperties: map{customLocation: map, homeOffice: any, officeLocation: map}}
@returns(200) {anyoneCanAddSelf: bool, attachments: [map], attendees: [map], attendeesOmitted: bool, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map{iconUri: str, key: map{type: str}, name: str}, createRequest: map{conferenceSolutionKey: map{type: str}, requestId: str, status: map{statusCode: str}}, entryPoints: [map], notes: str, parameters: map{addOnParameters: map{parameters: map}}, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool, etag: str, eventType: str, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool, guestsCanModify: bool, guestsCanSeeOtherGuests: bool, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str, location: str, locked: bool, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str, updated: str(date-time), visibility: str, workingLocationProperties: map{customLocation: map{label: str}, homeOffice: any, officeLocation: map{buildingId: str, deskId: str, floorId: str, floorSectionId: str, label: str}}}

@endpoint GET /calendars/{calendarId}/events/{eventId}/instances
@required {calendarId: str, eventId: str}
@optional {alwaysIncludeEmail: bool, maxAttendees: int, maxResults: int, originalStart: str, pageToken: str, showDeleted: bool, timeMax: str, timeMin: str, timeZone: str}
@returns(200) {accessRole: str, defaultReminders: [map], description: str, etag: str, items: [map], kind: str, nextPageToken: str, nextSyncToken: str, summary: str, timeZone: str, updated: str(date-time)}

@endpoint POST /calendars/{calendarId}/events/{eventId}/move
@required {calendarId: str, eventId: str, destination: str}
@optional {sendNotifications: bool, sendUpdates: str(all/externalOnly/none)}
@returns(200) {anyoneCanAddSelf: bool, attachments: [map], attendees: [map], attendeesOmitted: bool, colorId: str, conferenceData: map{conferenceId: str, conferenceSolution: map{iconUri: str, key: map{type: str}, name: str}, createRequest: map{conferenceSolutionKey: map{type: str}, requestId: str, status: map{statusCode: str}}, entryPoints: [map], notes: str, parameters: map{addOnParameters: map{parameters: map}}, signature: str}, created: str(date-time), creator: map{displayName: str, email: str, id: str, self: bool}, description: str, end: map{date: str(date), dateTime: str(date-time), timeZone: str}, endTimeUnspecified: bool, etag: str, eventType: str, extendedProperties: map{private: map, shared: map}, gadget: map{display: str, height: int(int32), iconLink: str, link: str, preferences: map, title: str, type: str, width: int(int32)}, guestsCanInviteOthers: bool, guestsCanModify: bool, guestsCanSeeOtherGuests: bool, hangoutLink: str, htmlLink: str, iCalUID: str, id: str, kind: str, location: str, locked: bool, organizer: map{displayName: str, email: str, id: str, self: bool}, originalStartTime: map{date: str(date), dateTime: str(date-time), timeZone: str}, privateCopy: bool, recurrence: [str], recurringEventId: str, reminders: map{overrides: [map], useDefault: bool}, sequence: int(int32), source: map{title: str, url: str}, start: map{date: str(date), dateTime: str(date-time), timeZone: str}, status: str, summary: str, transparency: str, updated: str(date-time), visibility: str, workingLocationProperties: map{customLocation: map{label: str}, homeOffice: any, officeLocation: map{buildingId: str, deskId: str, floorId: str, floorSectionId: str, label: str}}}

@endgroup

@group channels
@endpoint POST /channels/stop
@optional {address: str, expiration: str(int64), id: str, kind: str=api#channel, params: map, payload: bool, resourceId: str, resourceUri: str, token: str, type: str}
@returns(200)

@endgroup

@group colors
@endpoint GET /colors
@returns(200) {calendar: map, event: map, kind: str, updated: str(date-time)}

@endgroup

@group freeBusy
@endpoint POST /freeBusy
@optional {calendarExpansionMax: int(int32), groupExpansionMax: int(int32), items: [map{id: str}], timeMax: str(date-time), timeMin: str(date-time), timeZone: str=UTC}
@returns(200) {calendars: map, groups: map, kind: str, timeMax: str(date-time), timeMin: str(date-time)}

@endgroup

@group users
@endpoint GET /users/me/calendarList
@optional {maxResults: int, minAccessRole: str(freeBusyReader/owner/reader/writer), pageToken: str, showDeleted: bool, showHidden: bool, syncToken: str}
@returns(200) {etag: str, items: [map], kind: str, nextPageToken: str, nextSyncToken: str}

@endpoint POST /users/me/calendarList
@optional {colorRgbFormat: bool, accessRole: str, backgroundColor: str, colorId: str, conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, defaultReminders: [map{method: str, minutes: int(int32)}], deleted: bool=false, description: str, etag: str, foregroundColor: str, hidden: bool=false, id: str, kind: str=calendar#calendarListEntry, location: str, notificationSettings: map{notifications: [map]}, primary: bool=false, selected: bool=false, summary: str, summaryOverride: str, timeZone: str}
@returns(200) {accessRole: str, backgroundColor: str, colorId: str, conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, defaultReminders: [map], deleted: bool, description: str, etag: str, foregroundColor: str, hidden: bool, id: str, kind: str, location: str, notificationSettings: map{notifications: [map]}, primary: bool, selected: bool, summary: str, summaryOverride: str, timeZone: str}

@endpoint POST /users/me/calendarList/watch
@optional {maxResults: int, minAccessRole: str(freeBusyReader/owner/reader/writer), pageToken: str, showDeleted: bool, showHidden: bool, syncToken: str, address: str, expiration: str(int64), id: str, kind: str=api#channel, params: map, payload: bool, resourceId: str, resourceUri: str, token: str, type: str}
@returns(200) {address: str, expiration: str(int64), id: str, kind: str, params: map, payload: bool, resourceId: str, resourceUri: str, token: str, type: str}

@endpoint DELETE /users/me/calendarList/{calendarId}
@required {calendarId: str}
@returns(200)

@endpoint GET /users/me/calendarList/{calendarId}
@required {calendarId: str}
@returns(200) {accessRole: str, backgroundColor: str, colorId: str, conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, defaultReminders: [map], deleted: bool, description: str, etag: str, foregroundColor: str, hidden: bool, id: str, kind: str, location: str, notificationSettings: map{notifications: [map]}, primary: bool, selected: bool, summary: str, summaryOverride: str, timeZone: str}

@endpoint PATCH /users/me/calendarList/{calendarId}
@required {calendarId: str}
@optional {colorRgbFormat: bool, accessRole: str, backgroundColor: str, colorId: str, conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, defaultReminders: [map{method: str, minutes: int(int32)}], deleted: bool=false, description: str, etag: str, foregroundColor: str, hidden: bool=false, id: str, kind: str=calendar#calendarListEntry, location: str, notificationSettings: map{notifications: [map]}, primary: bool=false, selected: bool=false, summary: str, summaryOverride: str, timeZone: str}
@returns(200) {accessRole: str, backgroundColor: str, colorId: str, conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, defaultReminders: [map], deleted: bool, description: str, etag: str, foregroundColor: str, hidden: bool, id: str, kind: str, location: str, notificationSettings: map{notifications: [map]}, primary: bool, selected: bool, summary: str, summaryOverride: str, timeZone: str}

@endpoint PUT /users/me/calendarList/{calendarId}
@required {calendarId: str}
@optional {colorRgbFormat: bool, accessRole: str, backgroundColor: str, colorId: str, conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, defaultReminders: [map{method: str, minutes: int(int32)}], deleted: bool=false, description: str, etag: str, foregroundColor: str, hidden: bool=false, id: str, kind: str=calendar#calendarListEntry, location: str, notificationSettings: map{notifications: [map]}, primary: bool=false, selected: bool=false, summary: str, summaryOverride: str, timeZone: str}
@returns(200) {accessRole: str, backgroundColor: str, colorId: str, conferenceProperties: map{allowedConferenceSolutionTypes: [str]}, defaultReminders: [map], deleted: bool, description: str, etag: str, foregroundColor: str, hidden: bool, id: str, kind: str, location: str, notificationSettings: map{notifications: [map]}, primary: bool, selected: bool, summary: str, summaryOverride: str, timeZone: str}

@endpoint GET /users/me/settings
@optional {maxResults: int, pageToken: str, syncToken: str}
@returns(200) {etag: str, items: [map], kind: str, nextPageToken: str, nextSyncToken: str}

@endpoint POST /users/me/settings/watch
@optional {maxResults: int, pageToken: str, syncToken: str, address: str, expiration: str(int64), id: str, kind: str=api#channel, params: map, payload: bool, resourceId: str, resourceUri: str, token: str, type: str}
@returns(200) {address: str, expiration: str(int64), id: str, kind: str, params: map, payload: bool, resourceId: str, resourceUri: str, token: str, type: str}

@endpoint GET /users/me/settings/{setting}
@required {setting: str}
@returns(200) {etag: str, id: str, kind: str, value: str}

@endgroup

@end
