openapi: 3.0.0 info: title: Cal.diy API v2 Api Keys Bookings / Guests API description: '' version: 1.0.0 contact: {} servers: [] tags: - name: Bookings / Guests paths: /v2/bookings/{bookingUid}/guests: post: operationId: BookingGuestsController_2024_08_13_addGuests summary: Add guests to an existing booking description: "Add one or more guests to an existing booking. Maximum 10 guests per request, with a limit of 30 total guests per booking.\n \n **Rate Limiting:**\n This endpoint is rate limited to 5 requests per minute to prevent abuse.\n \n **Email Notifications:**\n When guests are added, the following notifications are sent (unless disabled by event type settings):\n \n - **Organizer & Team Members:** Receive an \"Add Guests\" notification email informing them that new guests have been added to the booking.\n \n - **New Guests:** Receive a \"Scheduled Event\" email with full booking details and calendar invite. If they have a phone number, they also receive an SMS notification.\n \n - **Existing Guests:** Receive an \"Add Guests\" notification email informing them that additional guests have been added to the booking.\n \n The cal-api-version header is required for this endpoint. Without it, the request will fail with a 404 error.\n " parameters: - name: cal-api-version in: header description: Must be set to 2024-08-13. This header is required as this endpoint does not exist in older API versions. required: true schema: type: string - name: bookingUid required: true in: path schema: type: string - name: Authorization in: header description: value must be `Bearer ` where `` is api key prefixed with cal_ or managed user access token required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddGuestsInput_2024_08_13' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/AddGuestsOutput_2024_08_13' tags: - Bookings / Guests components: schemas: AddGuestsOutput_2024_08_13: type: object properties: status: type: string example: success enum: - success - error data: oneOf: - $ref: '#/components/schemas/BookingOutput_2024_08_13' - $ref: '#/components/schemas/RecurringBookingOutput_2024_08_13' - type: array items: $ref: '#/components/schemas/RecurringBookingOutput_2024_08_13' - $ref: '#/components/schemas/GetSeatedBookingOutput_2024_08_13' - $ref: '#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13' - type: array items: $ref: '#/components/schemas/GetRecurringSeatedBookingOutput_2024_08_13' description: Booking data, which can be either a BookingOutput object, a RecurringBookingOutput object, or an array of RecurringBookingOutput objects required: - status - data 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: type: string enum: - cancelled - accepted - rejected - pending example: accepted cancellationReason: type: string example: User requested cancellation cancelledByEmail: type: string example: canceller@example.com reschedulingReason: type: string example: User rescheduled the event rescheduledByEmail: type: string 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' end: type: string example: '2024-08-13T16:30:00Z' 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' meetingUrl: type: string 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' updatedAt: type: string example: '2024-08-13T15:30:00Z' metadata: type: object 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 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 Guest: type: object properties: email: type: string description: The email of the guest. example: john.doe@example.com name: type: string description: The name of the guest. example: John Doe timeZone: type: string description: The time zone of the guest. example: America/New_York phoneNumber: type: string description: The phone number of the guest in international format. example: '+919876543210' language: type: string 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 - ta - uk - zh-TW - bn description: The preferred language of the guest. Used for booking confirmation. example: it default: en required: - email 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: type: string enum: - cancelled - accepted - rejected - pending example: accepted cancellationReason: type: string example: User requested cancellation cancelledByEmail: type: string example: canceller@example.com reschedulingReason: type: string example: User rescheduled the event rescheduledByEmail: type: string 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' end: type: string example: '2024-08-13T16:30:00Z' 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' meetingUrl: type: string 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' updatedAt: type: string example: '2024-08-13T15:30:00Z' metadata: type: object 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 BookingHost: type: object properties: id: type: number example: 1 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 - name - email - displayEmail - username - timeZone EventType: type: object properties: id: type: number example: 1 slug: type: string example: some-event required: - id - slug 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: type: string 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 - ta - uk - zh-TW - bn example: en absent: type: boolean example: false phoneNumber: type: string example: '+1234567890' seatUid: type: string example: 3be561a9-31f1-4b8e-aefc-9d9a085f0dd1 bookingFieldsResponses: type: object 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 example: key: value 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: type: string 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 - ta - uk - zh-TW - bn example: en absent: type: boolean example: false phoneNumber: type: string example: '+1234567890' required: - name - email - displayEmail - timeZone - absent 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: type: string enum: - cancelled - accepted - rejected - pending example: accepted cancellationReason: type: string example: User requested cancellation cancelledByEmail: type: string example: canceller@example.com reschedulingReason: type: string example: User rescheduled the event rescheduledByEmail: type: string 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' end: type: string example: '2024-08-13T16:30:00Z' 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' meetingUrl: type: string 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' updatedAt: type: string example: '2024-08-13T15:30:00Z' metadata: type: object 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 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 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: type: string enum: - cancelled - accepted - rejected - pending example: accepted cancellationReason: type: string example: User requested cancellation cancelledByEmail: type: string example: canceller@example.com reschedulingReason: type: string example: User rescheduled the event rescheduledByEmail: type: string 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' end: type: string example: '2024-08-13T16:30:00Z' 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' meetingUrl: type: string 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' updatedAt: type: string example: '2024-08-13T15:30:00Z' metadata: type: object 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 AddGuestsInput_2024_08_13: type: object properties: guests: description: Array of guests to add to the booking. Maximum 10 guests per request. example: - email: john.doe@example.com name: John Doe timeZone: America/New_York - email: jane.smith@example.com name: Jane Smith type: array items: $ref: '#/components/schemas/Guest' required: - guests