Skip to main content

Calendar Events

Tags: events, scheduling

Calendar event management

Resources

Request and response models used by the endpoints on this page.

AttendeeResponse

FieldTypeRequiredDescription
displayNameString
emailString
idInteger
memberIdInteger
noteString
responseAtDateTime
responseStatusString
statusString

Example:

{
"id": 0 // Integer,
"memberId": 0 // Integer,
"email": "string" // String,
"displayName": "string" // String,
"status": "string" // String,
"responseStatus": "string" // String,
"responseAt": "2024-01-01T00:00:00Z" // DateTime,
"note": "string" // String
}

CancelEventRequest

FieldTypeRequiredDescription
cancellationReasonString

Example:

{
"cancellationReason": "string" // String, optional
}

CreateEventRequest

FieldTypeRequiredDescription
assignmentIdIntegerAssignment context for AI-created bookings
attendeeIdsArray
calendarIdInteger
descriptionString
eventTypeIdInteger
externalAttendeesArrayAttendees who are not workspace members, identified by email
locationString
recurrenceRuleStringiCalendar RRULE for a recurring event (e.g. 'RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR'). Expanded at read time.
startTimeDateTime
taskIdIntegerTask context for AI-created bookings
titleString
workflowRevisionIdIntegerWorkflow revision context for AI-created bookings

Example:

{
"calendarId": 0 // Integer,
"eventTypeId": 0 // Integer,
"title": "string" // String,
"description": "string" // String, optional,
"location": "string" // String, optional,
"startTime": "2024-01-01T00:00:00Z" // DateTime,
"attendeeIds": 0 // Array<Integer>,
"externalAttendees": [] // Array<ExternalAttendeeData>, optional, Attendees who are not workspace members, identified by email,
"workflowRevisionId": 0 // Integer, optional, Workflow revision context for AI-created bookings,
"taskId": 0 // Integer, optional, Task context for AI-created bookings,
"assignmentId": 0 // Integer, optional, Assignment context for AI-created bookings,
"recurrenceRule": "string" // String, optional, iCalendar RRULE for a recurring event (e.g. 'RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR'). Expanded at read time.
}

EventResponse

FieldTypeRequiredDescription
assignmentIdInteger
attendeesArray
calendarIdInteger
calendarNameString
cancellationReasonString
cancelledAtDateTime
cancelledByMemberIdInteger
chatIdInteger
createdAtDateTime
creatorMemberIdInteger
descriptionString
endTimeDateTime
eventTypeColorString
eventTypeIdInteger
eventTypeNameString
idInteger
isRecurringInstanceBoolean
locationString
messageIdInteger
originalStartTimeDateTime
recurrenceRuleString
recurringEventIdString
remoteEventIdString
startTimeDateTime
statusString
taskIdInteger
titleString
updatedAtDateTime
uuidString
workflowRevisionIdInteger

Example:

{
"id": 0 // Integer,
"uuid": "string" // String,
"calendarId": 0 // Integer,
"calendarName": "string" // String,
"eventTypeId": 0 // Integer,
"eventTypeName": "string" // String,
"eventTypeColor": "string" // String,
"title": "string" // String,
"description": "string" // String,
"location": "string" // String,
"startTime": "2024-01-01T00:00:00Z" // DateTime,
"endTime": "2024-01-01T00:00:00Z" // DateTime,
"status": "string" // String,
"creatorMemberId": 0 // Integer,
"workflowRevisionId": 0 // Integer,
"taskId": 0 // Integer,
"assignmentId": 0 // Integer,
"chatId": 0 // Integer,
"messageId": 0 // Integer,
"cancelledAt": "2024-01-01T00:00:00Z" // DateTime,
"cancelledByMemberId": 0 // Integer,
"cancellationReason": "string" // String,
"recurrenceRule": "string" // String,
"recurringEventId": "string" // String,
"isRecurringInstance": false // Boolean,
"originalStartTime": "2024-01-01T00:00:00Z" // DateTime,
"remoteEventId": "string" // String,
"attendees": [] // Array<AttendeeResponse>, optional, default: PydanticUndefined,
"createdAt": "2024-01-01T00:00:00Z" // DateTime,
"updatedAt": "2024-01-01T00:00:00Z" // DateTime
}

UpdateAttendeeRequest

FieldTypeRequiredDescription
noteString
responseStatusStringACCEPTED, DECLINED, or TENTATIVE

Example:

{
"responseStatus": "string" // String, ACCEPTED, DECLINED, or TENTATIVE,
"note": "string" // String, optional
}

UpdateEventRequest

FieldTypeRequiredDescription
descriptionString
endTimeDateTime
locationString
recurrenceRuleString
startTimeDateTime
statusString
titleString

Example:

{
"title": "string" // String, optional,
"description": "string" // String, optional,
"location": "string" // String, optional,
"startTime": "2024-01-01T00:00:00Z" // DateTime, optional,
"endTime": "2024-01-01T00:00:00Z" // DateTime, optional,
"status": "string" // String, optional,
"recurrenceRule": "string" // String, optional
}

Endpoints

List

GET /api/v2/w/{workspace_uuid}/calendar-events

Description:

List calendar events with optional filtering.

Authorization: Requires calendars:read scope

Parameters:

  • calendarId (Integer)
  • startDate (datetime)
  • endDate (datetime)
  • status (String)
  • page (Integer)
  • pageSize (Integer)
  • sortBy (CalendarEventSortField)
  • sortOrder (SortOrder)

Response: See PaginatedResponse[EventResponse]


Create

POST /api/v2/w/{workspace_uuid}/calendar-events

Description:

Create a new calendar event (booking).

This endpoint validates availability and attendee limits before creating the booking. If the calendar is linked to Google Calendar, the event will be synced automatically.

The startTime parameter should be timezone-aware (ISO 8601 with timezone). If it's timezone-naive, it will be interpreted as being in the calendar's timezone.

Event rules and Google Calendar sync run after the event is saved.

Authorization: Requires calendars:write scope

Parameters:

Response: See EventResponse


Delete Event Id

DELETE /api/v2/w/{workspace_uuid}/calendar-events/{event_id}

Description:

Delete a calendar event (hard delete). Also deletes from Google Calendar if linked.

Event rules and Google Calendar sync run after the local delete commits.

Authorization: Requires calendars:admin scope

Parameters:

  • event_id (Integer)

Get Event Id

GET /api/v2/w/{workspace_uuid}/calendar-events/{event_id}

Description:

Get a specific calendar event by ID.

Authorization: Requires calendars:read scope

Parameters:

  • event_id (Integer)

Response: See EventResponse


Update Event Id

PUT /api/v2/w/{workspace_uuid}/calendar-events/{event_id}

Description:

Update an existing calendar event.

The startTime and endTime parameters should be timezone-aware (ISO 8601 with timezone). If they're timezone-naive, they will be interpreted as being in the calendar's timezone.

Event rules and Google Calendar sync run after the event is updated.

Authorization: Requires calendars:write scope

Parameters:

Response: See EventResponse


Attendees

GET /api/v2/w/{workspace_uuid}/calendar-events/{event_id}/attendees

Description:

List all attendees for an event.

Authorization: Requires calendars:read scope

Parameters:

  • event_id (Integer)

Response: List of AttendeeResponse


Update Attendees

PUT /api/v2/w/{workspace_uuid}/calendar-events/{event_id}/attendees/{member_id}

Description:

Update an attendee's response to an event invitation.

Authorization: Requires calendars:write scope

Parameters:

Response: See AttendeeResponse


Cancel

POST /api/v2/w/{workspace_uuid}/calendar-events/{event_id}/cancel

Description:

Cancel a calendar event.

Event rules and Google Calendar sync run after the cancellation is saved.

Authorization: Requires calendars:write scope

Parameters:

Response: See EventResponse