openapi: 3.2.0 info: title: Cal.com API v2 Teams / Bookings API description: '' version: 1.0.0 contact: {} servers: [] tags: - name: Teams / Bookings paths: /v2/teams/{teamId}/bookings: get: description: If accessed using an OAuth access token, the `TEAM_BOOKING_READ` scope is required. operationId: TeamsBookingsController_getAllTeamBookings parameters: - name: Authorization in: header description: value must be `Bearer ` where `` is api key prefixed with cal_ required: true schema: type: string - name: status required: false in: query description: Filter bookings by status. If you want to filter by multiple statuses, separate them with a comma. schema: minItems: 1 example: ?status=upcoming,past type: array items: type: string enum: - upcoming - recurring - past - cancelled - unconfirmed - name: attendeeEmail required: false in: query description: Filter bookings by the attendee's email address. schema: example: example@domain.com type: string - name: attendeeName required: false in: query description: Filter bookings by the attendee's name. schema: example: John Doe type: string - name: bookingUid required: false in: query description: Filter bookings by the booking Uid. schema: example: 2NtaeaVcKfpmSZ4CthFdfk type: string - name: eventTypeIds required: false in: query description: Filter bookings by event type ids. Event type ids must be separated by a comma. schema: minItems: 1 example: ?eventTypeIds=100,200 type: string - name: eventTypeId required: false in: query description: Filter bookings by event type id. schema: example: ?eventTypeId=100 type: string - name: afterStart required: false in: query description: Filter bookings with start after this date string. schema: example: ?afterStart=2025-03-07T10:00:00.000Z type: string - name: beforeEnd required: false in: query description: Filter bookings with end before this date string. schema: example: ?beforeEnd=2025-03-07T11:00:00.000Z type: string - name: afterCreatedAt required: false in: query description: Filter bookings that have been created after this date string. schema: example: ?afterCreatedAt=2025-03-07T10:00:00.000Z type: string - name: beforeCreatedAt required: false in: query description: Filter bookings that have been created before this date string. schema: example: ?beforeCreatedAt=2025-03-14T11:00:00.000Z type: string - name: afterUpdatedAt required: false in: query description: Filter bookings that have been updated after this date string. schema: example: ?afterUpdatedAt=2025-03-07T10:00:00.000Z type: string - name: beforeUpdatedAt required: false in: query description: Filter bookings that have been updated before this date string. schema: example: ?beforeUpdatedAt=2025-03-14T11:00:00.000Z type: string - name: sortStart required: false in: query description: Sort results by their start time in ascending or descending order. schema: example: ?sortStart=asc OR ?sortStart=desc type: string enum: - asc - desc - name: sortEnd required: false in: query description: Sort results by their end time in ascending or descending order. schema: example: ?sortEnd=asc OR ?sortEnd=desc type: string enum: - asc - desc - name: sortCreated required: false in: query description: Sort results by their creation time (when booking was made) in ascending or descending order. schema: example: ?sortCreated=asc OR ?sortCreated=desc type: string enum: - asc - desc - name: sortUpdatedAt required: false in: query description: Sort results by their updated time (for example when booking status changes) in ascending or descending order. schema: example: ?sortUpdatedAt=asc OR ?sortUpdatedAt=desc type: string enum: - asc - desc - name: take required: false in: query description: The number of items to return schema: minimum: 1 maximum: 250 default: 100 example: 10 type: number - name: skip required: false in: query description: The number of items to skip schema: minimum: 0 default: 0 example: 0 type: number - name: teamId required: true in: path description: The team's uuid (preferred), its short-uuid (Flickr Base58) form, or its numeric id. schema: anyOf: - type: string - type: number responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GetBookingsOutput_2024_08_13' summary: Get team bookings tags: - Teams / Bookings x-oauth-scopes: - TEAM_BOOKING_READ components: schemas: RecurringBookingOutput_2024_08_13: type: object properties: id: type: number example: 123 uid: type: string example: booking_uid_123 title: type: string example: Consultation description: type: string example: Learn how to integrate scheduling into marketplace. hosts: type: array items: $ref: '#/components/schemas/BookingHost' status: enum: - cancelled - accepted - rejected - pending - awaiting_host type: string example: accepted description: '`awaiting_host` is an instant meeting that is live and waiting for a host to join.' cancellationReason: type: string example: User requested cancellation cancelledByEmail: type: string format: email example: canceller@example.com reschedulingReason: type: string example: User rescheduled the event rescheduledByEmail: type: string format: email example: rescheduler@example.com rescheduledFromUid: type: string example: previous_uid_123 description: UID of the previous booking from which this booking was rescheduled. rescheduledToUid: type: string example: new_uid_456 description: UID of the new booking to which this booking was rescheduled. start: type: string example: '2024-08-13T15:30:00Z' format: date-time end: type: string example: '2024-08-13T16:30:00Z' format: date-time duration: type: number example: 60 eventTypeId: type: number example: 50 deprecated: true description: Deprecated - rely on 'eventType' object containing the id instead. eventType: $ref: '#/components/schemas/EventType' eventUuid: type: - string - 'null' example: 0199b5d2-7c1e-7f3a-9b4d-2e6f8a1c3d5e description: UUID of the Event this booking belongs to. Pass it to `GET /v2/events/{uuid}` to fetch the Event. `null` when the booking is not for an Event. meetingUrl: type: string format: uri description: Deprecated - rely on 'location' field instead. example: https://example.com/recurring-meeting deprecated: true location: type: string example: https://example.com/meeting absentHost: type: boolean example: true createdAt: type: string example: '2024-08-13T15:30:00Z' format: date-time updatedAt: type: - string - 'null' example: '2024-08-13T15:30:00Z' format: date-time metadata: type: object additionalProperties: type: string example: key: value rating: type: number example: 4 icsUid: type: string example: ics_uid_123 description: UID of ICS event. attendees: type: array items: $ref: '#/components/schemas/BookingAttendee' guests: example: - guest1@example.com - guest2@example.com type: array items: type: string bookingFieldsResponses: type: object additionalProperties: true description: Booking field responses consisting of an object with booking field slug as keys and user response as values. example: customField: customValue recurringBookingUid: type: string example: recurring_uid_987 required: - id - uid - title - description - hosts - status - start - end - duration - eventTypeId - eventType - location - absentHost - createdAt - updatedAt - attendees - bookingFieldsResponses - recurringBookingUid PaginationMetaDto: type: object properties: totalItems: type: number minimum: 0 description: The total number of items available across all pages, matching the query criteria. example: 123 remainingItems: type: number minimum: 0 description: 'The number of items remaining to be fetched *after* the current page. Calculated as: `totalItems - (skip + itemsPerPage)`.' example: 103 returnedItems: type: number minimum: 0 description: The number of items returned in the current page. example: 10 itemsPerPage: type: number minimum: 1 description: The maximum number of items requested per page. example: 10 currentPage: type: number minimum: 1 description: The current page number being returned. example: 2 totalPages: type: number minimum: 0 description: The total number of pages available. example: 13 hasNextPage: type: boolean description: Indicates if there is a subsequent page available after the current one. example: true hasPreviousPage: type: boolean description: Indicates if there is a preceding page available before the current one. example: true required: - totalItems - remainingItems - returnedItems - itemsPerPage - currentPage - totalPages - hasNextPage - hasPreviousPage GetSeatedBookingOutput_2024_08_13: type: object properties: id: type: number example: 123 uid: type: string example: booking_uid_123 title: type: string example: Consultation description: type: string example: Learn how to integrate scheduling into marketplace. hosts: type: array items: $ref: '#/components/schemas/BookingHost' status: enum: - cancelled - accepted - rejected - pending - awaiting_host type: string example: accepted description: '`awaiting_host` is an instant meeting that is live and waiting for a host to join.' cancellationReason: type: string example: User requested cancellation cancelledByEmail: type: string format: email example: canceller@example.com reschedulingReason: type: string example: User rescheduled the event rescheduledByEmail: type: string format: email example: rescheduler@example.com rescheduledFromUid: type: string example: previous_uid_123 description: UID of the previous booking from which this booking was rescheduled. rescheduledToUid: type: string example: new_uid_456 description: UID of the new booking to which this booking was rescheduled. start: type: string example: '2024-08-13T15:30:00Z' format: date-time end: type: string example: '2024-08-13T16:30:00Z' format: date-time duration: type: number example: 60 eventTypeId: type: number example: 50 deprecated: true description: Deprecated - rely on 'eventType' object containing the id instead. eventType: $ref: '#/components/schemas/EventType' eventUuid: type: - string - 'null' example: 0199b5d2-7c1e-7f3a-9b4d-2e6f8a1c3d5e description: UUID of the Event this booking belongs to. Pass it to `GET /v2/events/{uuid}` to fetch the Event. `null` when the booking is not for an Event. meetingUrl: type: string format: uri description: Deprecated - rely on 'location' field instead. example: https://example.com/recurring-meeting deprecated: true location: type: string example: https://example.com/meeting absentHost: type: boolean example: true createdAt: type: string example: '2024-08-13T15:30:00Z' format: date-time updatedAt: type: - string - 'null' example: '2024-08-13T15:30:00Z' format: date-time metadata: type: object additionalProperties: type: string example: key: value rating: type: number example: 4 icsUid: type: string example: ics_uid_123 description: UID of ICS event. attendees: type: array items: $ref: '#/components/schemas/SeatedAttendee' required: - id - uid - title - description - hosts - status - start - end - duration - eventTypeId - eventType - location - absentHost - createdAt - updatedAt - attendees GetBookingsOutput_2024_08_13: type: object properties: status: enum: - success - error type: string example: success data: type: array items: oneOf: - title: Booking $ref: '#/components/schemas/BookingOutput_2024_08_13' - title: Recurring Booking $ref: '#/components/schemas/RecurringBookingOutput_2024_08_13' - title: Seated Booking $ref: '#/components/schemas/GetSeatedBookingOutput_2024_08_13' - title: Recurring Seated Booking $ref: '#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13' description: Array of booking data, which can contain either BookingOutput objects or RecurringBookingOutput objects pagination: $ref: '#/components/schemas/PaginationMetaDto' required: - status - data - pagination SeatedAttendee: type: object properties: name: type: string example: John Doe email: type: string example: john@example.com displayEmail: type: string example: john@example.com description: Clean email for display purposes timeZone: type: string example: America/New_York language: enum: - ar - ca - de - es - eu - he - id - ja - lv - pl - ro - sr - th - vi - az - cs - el - es-419 - fi - hr - it - km - nl - pt - ru - sv - tr - zh-CN - bg - da - en - et - fr - hu - iw - ko - 'no' - pt-BR - sk - sl - ta - uk - zh-TW - bn type: string example: en absent: type: boolean example: false phoneNumber: type: string example: '+1234567890' seatUid: type: string example: 3be561a9-31f1-4b8e-aefc-9d9a085f0dd1 createdAt: type: string example: '2024-08-13T15:30:00Z' description: The date and time when the attendee joined the seated booking. bookingFieldsResponses: type: object additionalProperties: true description: Booking field responses consisting of an object with booking field slug as keys and user response as values. example: customField: customValue metadata: type: object additionalProperties: type: string example: key: value status: type: string enum: - cancelled example: cancelled description: Present on API version 2026-02-25 and later when this attendee was loaded from a cancelled seat. Omitted for occupied seats. confirmationStatus: enum: - pending - accepted - rejected type: string example: accepted description: Confirmation verdict of this live seat. Omitted when the attendee has no live seat. An attendee loaded from a cancelled seat has status cancelled and does not include confirmationStatus. required: - name - email - displayEmail - timeZone - absent - seatUid - bookingFieldsResponses BookingAttendee: type: object properties: name: type: string example: John Doe email: type: string example: john@example.com displayEmail: type: string example: john@example.com description: Clean email for display purposes timeZone: type: string example: America/New_York language: enum: - ar - ca - de - es - eu - he - id - ja - lv - pl - ro - sr - th - vi - az - cs - el - es-419 - fi - hr - it - km - nl - pt - ru - sv - tr - zh-CN - bg - da - en - et - fr - hu - iw - ko - 'no' - pt-BR - sk - sl - ta - uk - zh-TW - bn type: string example: en absent: type: boolean example: false phoneNumber: type: string example: '+1234567890' required: - name - email - displayEmail - timeZone - absent GetRecurringSeatedBookingOutput_2024_08_13: type: object properties: id: type: number example: 123 uid: type: string example: booking_uid_123 title: type: string example: Consultation description: type: string example: Learn how to integrate scheduling into marketplace. hosts: type: array items: $ref: '#/components/schemas/BookingHost' status: enum: - cancelled - accepted - rejected - pending - awaiting_host type: string example: accepted description: '`awaiting_host` is an instant meeting that is live and waiting for a host to join.' cancellationReason: type: string example: User requested cancellation cancelledByEmail: type: string format: email example: canceller@example.com reschedulingReason: type: string example: User rescheduled the event rescheduledByEmail: type: string format: email example: rescheduler@example.com rescheduledFromUid: type: string example: previous_uid_123 description: UID of the previous booking from which this booking was rescheduled. rescheduledToUid: type: string example: new_uid_456 description: UID of the new booking to which this booking was rescheduled. start: type: string example: '2024-08-13T15:30:00Z' format: date-time end: type: string example: '2024-08-13T16:30:00Z' format: date-time duration: type: number example: 60 eventTypeId: type: number example: 50 deprecated: true description: Deprecated - rely on 'eventType' object containing the id instead. eventType: $ref: '#/components/schemas/EventType' eventUuid: type: - string - 'null' example: 0199b5d2-7c1e-7f3a-9b4d-2e6f8a1c3d5e description: UUID of the Event this booking belongs to. Pass it to `GET /v2/events/{uuid}` to fetch the Event. `null` when the booking is not for an Event. meetingUrl: type: string format: uri description: Deprecated - rely on 'location' field instead. example: https://example.com/recurring-meeting deprecated: true location: type: string example: https://example.com/meeting absentHost: type: boolean example: true createdAt: type: string example: '2024-08-13T15:30:00Z' format: date-time updatedAt: type: - string - 'null' example: '2024-08-13T15:30:00Z' format: date-time metadata: type: object additionalProperties: type: string example: key: value rating: type: number example: 4 icsUid: type: string example: ics_uid_123 description: UID of ICS event. attendees: type: array items: $ref: '#/components/schemas/SeatedAttendee' recurringBookingUid: type: string example: recurring_uid_987 required: - id - uid - title - description - hosts - status - start - end - duration - eventTypeId - eventType - location - absentHost - createdAt - updatedAt - attendees - recurringBookingUid BookingOutput_2024_08_13: type: object properties: id: type: number example: 123 uid: type: string example: booking_uid_123 title: type: string example: Consultation description: type: string example: Learn how to integrate scheduling into marketplace. hosts: type: array items: $ref: '#/components/schemas/BookingHost' status: enum: - cancelled - accepted - rejected - pending - awaiting_host type: string example: accepted description: '`awaiting_host` is an instant meeting that is live and waiting for a host to join.' cancellationReason: type: string example: User requested cancellation cancelledByEmail: type: string format: email example: canceller@example.com reschedulingReason: type: string example: User rescheduled the event rescheduledByEmail: type: string format: email example: rescheduler@example.com rescheduledFromUid: type: string example: previous_uid_123 description: UID of the previous booking from which this booking was rescheduled. rescheduledToUid: type: string example: new_uid_456 description: UID of the new booking to which this booking was rescheduled. start: type: string example: '2024-08-13T15:30:00Z' format: date-time end: type: string example: '2024-08-13T16:30:00Z' format: date-time duration: type: number example: 60 eventTypeId: type: number example: 50 deprecated: true description: Deprecated - rely on 'eventType' object containing the id instead. eventType: $ref: '#/components/schemas/EventType' eventUuid: type: - string - 'null' example: 0199b5d2-7c1e-7f3a-9b4d-2e6f8a1c3d5e description: UUID of the Event this booking belongs to. Pass it to `GET /v2/events/{uuid}` to fetch the Event. `null` when the booking is not for an Event. meetingUrl: type: string format: uri description: Deprecated - rely on 'location' field instead. example: https://example.com/recurring-meeting deprecated: true location: type: string example: https://example.com/meeting absentHost: type: boolean example: true createdAt: type: string example: '2024-08-13T15:30:00Z' format: date-time updatedAt: type: - string - 'null' example: '2024-08-13T15:30:00Z' format: date-time metadata: type: object additionalProperties: type: string example: key: value rating: type: number example: 4 icsUid: type: string example: ics_uid_123 description: UID of ICS event. attendees: type: array items: $ref: '#/components/schemas/BookingAttendee' guests: example: - guest1@example.com - guest2@example.com type: array items: type: string bookingFieldsResponses: type: object additionalProperties: true description: Booking field responses consisting of an object with booking field slug as keys and user response as values. example: customField: customValue required: - id - uid - title - description - hosts - status - start - end - duration - eventTypeId - eventType - location - absentHost - createdAt - updatedAt - attendees - bookingFieldsResponses EventType: type: object properties: id: type: number example: 1 slug: type: string example: some-event required: - id - slug BookingHost: type: object properties: id: type: number example: 1 uuid: type: string format: uuid example: 3f2504e0-4f89-41d3-9a0c-0305e82c3301 name: type: string example: Jane Doe email: type: string example: jane100@example.com displayEmail: type: string example: jane100@example.com description: Clean email for display purposes username: type: string example: jane100 timeZone: type: string example: America/Los_Angeles required: - id - uuid - name - email - displayEmail - username - timeZone x-provenance: method: harvested publisher: Cal.com source: https://cal.com/docs/api-reference/v2/openapi.json note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json); stamped by stamp-openapi-provenance.py (roadmap#793)