Calendly · AsyncAPI Specification

Calendly Webhook Events

Version 2.0.0

The Calendly Webhook API enables developers to receive real-time notifications when scheduling events occur in Calendly. By creating webhook subscriptions, applications can automatically receive data whenever invitees schedule, cancel, or reschedule meetings, or when routing form submissions are created. This eliminates the need for polling the API and allows for event-driven integrations that respond immediately to changes in scheduling activity. Webhook payloads are signed for verification and delivered via HTTP POST to the configured callback URL.

View Spec View on GitHub AppointmentsAutomationBookingCalendarsMeetingsSchedulingAsyncAPIWebhooksEvents

Channels

/webhook/invitee-created
publish onInviteeCreated
Invitee created event
Channel for invitee.created events. Triggered when a new invitee schedules a meeting through Calendly. Also triggered as part of a reschedule operation (the new booking). The payload includes the full invitee resource with event details, contact information, and answers to custom questions.
/webhook/invitee-canceled
publish onInviteeCanceled
Invitee canceled event
Channel for invitee.canceled events. Triggered when an existing scheduled event is canceled by either the host or the invitee. Also triggered as part of a reschedule operation (the old booking being canceled). The payload includes cancellation details and the reason if provided.
/webhook/routing-form-submission-created
publish onRoutingFormSubmissionCreated
Routing form submission created event
Channel for routing_form_submission.created events. Triggered when someone submits a routing form, regardless of whether they subsequently book a meeting. The payload includes the form submission with all questions and answers.

Messages

InviteeCreatedEvent
Invitee Created
Delivered when a new invitee schedules a meeting through Calendly.
InviteeCanceledEvent
Invitee Canceled
Delivered when an invitee or host cancels a scheduled meeting.
RoutingFormSubmissionCreatedEvent
Routing Form Submission Created
Delivered when someone submits a routing form, whether or not they subsequently book a meeting.

Servers

https
production https://api.calendly.com
Calendly production server. Webhook subscriptions are managed via the REST API, and payloads are delivered to the subscriber-configured callback URL.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Calendly Webhook Events
  description: >-
    The Calendly Webhook API enables developers to receive real-time
    notifications when scheduling events occur in Calendly. By creating
    webhook subscriptions, applications can automatically receive data
    whenever invitees schedule, cancel, or reschedule meetings, or when
    routing form submissions are created. This eliminates the need for
    polling the API and allows for event-driven integrations that respond
    immediately to changes in scheduling activity. Webhook payloads are
    signed for verification and delivered via HTTP POST to the configured
    callback URL.
  version: '2.0.0'
  contact:
    name: Calendly Developer Support
    url: https://developer.calendly.com/
  license:
    name: Calendly Terms of Service
    url: https://calendly.com/pages/terms
servers:
  production:
    url: 'https://api.calendly.com'
    protocol: https
    description: >-
      Calendly production server. Webhook subscriptions are managed via
      the REST API, and payloads are delivered to the subscriber-configured
      callback URL.
    security:
      - bearerAuth: []
channels:
  /webhook/invitee-created:
    description: >-
      Channel for invitee.created events. Triggered when a new invitee
      schedules a meeting through Calendly. Also triggered as part of a
      reschedule operation (the new booking). The payload includes the
      full invitee resource with event details, contact information, and
      answers to custom questions.
    publish:
      operationId: onInviteeCreated
      summary: Invitee created event
      description: >-
        Fired when a new meeting is scheduled. The webhook delivers the
        full invitee object including name, email, timezone, event URI,
        custom question answers, and tracking parameters. For rescheduled
        events, the new_invitee and old_invitee fields link the new and
        previous bookings.
      message:
        $ref: '#/components/messages/InviteeCreatedEvent'
  /webhook/invitee-canceled:
    description: >-
      Channel for invitee.canceled events. Triggered when an existing
      scheduled event is canceled by either the host or the invitee. Also
      triggered as part of a reschedule operation (the old booking being
      canceled). The payload includes cancellation details and the reason
      if provided.
    publish:
      operationId: onInviteeCanceled
      summary: Invitee canceled event
      description: >-
        Fired when a scheduled meeting is canceled. The payload includes
        the invitee resource with cancellation details, including who
        canceled and the reason. For rescheduled events, the rescheduled
        field is set to true and the new_invitee field links to the
        replacement booking.
      message:
        $ref: '#/components/messages/InviteeCanceledEvent'
  /webhook/routing-form-submission-created:
    description: >-
      Channel for routing_form_submission.created events. Triggered when
      someone submits a routing form, regardless of whether they
      subsequently book a meeting. The payload includes the form
      submission with all questions and answers.
    publish:
      operationId: onRoutingFormSubmissionCreated
      summary: Routing form submission created event
      description: >-
        Fired when a routing form is submitted. The payload includes the
        routing form submission resource with all questions and answers,
        tracking parameters, and a reference to the resulting invitee if
        a booking was made.
      message:
        $ref: '#/components/messages/RoutingFormSubmissionCreatedEvent'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Personal access token or OAuth 2.1 access token used to manage
        webhook subscriptions via the REST API.
    webhookSignature:
      type: httpApiKey
      name: Calendly-Webhook-Signature
      in: header
      description: >-
        HMAC signature of the webhook payload for verifying authenticity.
        The signature is computed using the signing key provided when
        creating the webhook subscription.
  messages:
    InviteeCreatedEvent:
      name: invitee.created
      title: Invitee Created
      summary: >-
        Delivered when a new invitee schedules a meeting through Calendly.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
      headers:
        type: object
        properties:
          Calendly-Webhook-Signature:
            type: string
            description: >-
              The HMAC signature for payload verification.
      examples:
        - name: InviteeCreatedExample
          summary: A new meeting was scheduled
          payload:
            event: invitee.created
            created_at: '2024-01-15T10:30:00.000000Z'
            created_by: 'https://api.calendly.com/users/abc123'
            payload:
              uri: 'https://api.calendly.com/scheduled_events/evt123/invitees/inv456'
              email: '[email protected]'
              name: 'Jane Doe'
              status: active
              timezone: 'America/New_York'
              event: 'https://api.calendly.com/scheduled_events/evt123'
              created_at: '2024-01-15T10:30:00.000000Z'
              updated_at: '2024-01-15T10:30:00.000000Z'
              cancel_url: 'https://calendly.com/cancellations/inv456'
              reschedule_url: 'https://calendly.com/reschedulings/inv456'
    InviteeCanceledEvent:
      name: invitee.canceled
      title: Invitee Canceled
      summary: >-
        Delivered when an invitee or host cancels a scheduled meeting.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
      headers:
        type: object
        properties:
          Calendly-Webhook-Signature:
            type: string
            description: >-
              The HMAC signature for payload verification.
      examples:
        - name: InviteeCanceledExample
          summary: A meeting was canceled
          payload:
            event: invitee.canceled
            created_at: '2024-01-16T08:00:00.000000Z'
            created_by: 'https://api.calendly.com/users/abc123'
            payload:
              uri: 'https://api.calendly.com/scheduled_events/evt123/invitees/inv456'
              email: '[email protected]'
              name: 'Jane Doe'
              status: canceled
              timezone: 'America/New_York'
              event: 'https://api.calendly.com/scheduled_events/evt123'
              cancellation:
                canceled_by: 'Jane Doe'
                reason: 'Schedule conflict'
                canceler_type: invitee
                created_at: '2024-01-16T08:00:00.000000Z'
              rescheduled: false
    RoutingFormSubmissionCreatedEvent:
      name: routing_form_submission.created
      title: Routing Form Submission Created
      summary: >-
        Delivered when someone submits a routing form, whether or not they
        subsequently book a meeting.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/RoutingFormWebhookPayload'
      headers:
        type: object
        properties:
          Calendly-Webhook-Signature:
            type: string
            description: >-
              The HMAC signature for payload verification.
  schemas:
    WebhookPayload:
      type: object
      description: >-
        The top-level webhook payload delivered to the subscriber callback
        URL for invitee events.
      properties:
        event:
          type: string
          enum:
            - invitee.created
            - invitee.canceled
          description: >-
            The type of event that triggered the webhook.
        created_at:
          type: string
          format: date-time
          description: >-
            The timestamp when the webhook event was created in UTC.
        created_by:
          type: string
          format: uri
          description: >-
            The URI of the user associated with the event.
        payload:
          $ref: '#/components/schemas/InviteePayload'
    RoutingFormWebhookPayload:
      type: object
      description: >-
        The top-level webhook payload delivered for routing form submission
        events.
      properties:
        event:
          type: string
          enum:
            - routing_form_submission.created
          description: >-
            The type of event that triggered the webhook.
        created_at:
          type: string
          format: date-time
          description: >-
            The timestamp when the webhook event was created in UTC.
        created_by:
          type: string
          format: uri
          description: >-
            The URI of the user associated with the event.
        payload:
          $ref: '#/components/schemas/RoutingFormSubmissionPayload'
    InviteePayload:
      type: object
      description: >-
        The invitee data included in webhook payloads for invitee.created
        and invitee.canceled events.
      properties:
        uri:
          type: string
          format: uri
          description: >-
            The canonical URI of the invitee resource.
        email:
          type: string
          format: email
          description: >-
            The email address of the invitee.
        first_name:
          type: string
          description: >-
            The first name of the invitee.
        last_name:
          type: string
          description: >-
            The last name of the invitee.
        name:
          type: string
          description: >-
            The full name of the invitee.
        status:
          type: string
          enum:
            - active
            - canceled
          description: >-
            The current status of the invitee.
        timezone:
          type: string
          description: >-
            The IANA timezone of the invitee.
        event:
          type: string
          format: uri
          description: >-
            The URI of the associated scheduled event.
        text_reminder_number:
          type: string
          description: >-
            The phone number for text reminders.
        rescheduled:
          type: boolean
          description: >-
            Whether this event is part of a reschedule operation. True on the
            canceled side of a reschedule.
        old_invitee:
          type: string
          format: uri
          description: >-
            The URI of the previous invitee for rescheduled events.
        new_invitee:
          type: string
          format: uri
          description: >-
            The URI of the new invitee for rescheduled events.
        cancel_url:
          type: string
          format: uri
          description: >-
            The URL for the invitee to cancel the event.
        reschedule_url:
          type: string
          format: uri
          description: >-
            The URL for the invitee to reschedule the event.
        cancellation:
          type: object
          description: >-
            Cancellation details, present only for canceled invitees.
          properties:
            canceled_by:
              type: string
              description: >-
                The name of the person who canceled.
            reason:
              type: string
              description: >-
                The reason for cancellation.
            canceler_type:
              type: string
              enum:
                - host
                - invitee
              description: >-
                Whether the host or invitee canceled.
            created_at:
              type: string
              format: date-time
              description: >-
                When the cancellation occurred.
        questions_and_answers:
          type: array
          items:
            type: object
            properties:
              question:
                type: string
                description: >-
                  The text of the custom question.
              answer:
                type: string
                description: >-
                  The invitees answer.
              position:
                type: integer
                description: >-
                  The display position of the question.
          description: >-
            Answers to custom questions on the booking page.
        tracking:
          type: object
          description: >-
            UTM and tracking parameters captured at booking time.
          properties:
            utm_campaign:
              type: string
              description: >-
                The UTM campaign parameter.
            utm_source:
              type: string
              description: >-
                The UTM source parameter.
            utm_medium:
              type: string
              description: >-
                The UTM medium parameter.
            utm_content:
              type: string
              description: >-
                The UTM content parameter.
            utm_term:
              type: string
              description: >-
                The UTM term parameter.
            salesforce_uuid:
              type: string
              description: >-
                The Salesforce UUID if applicable.
        payment:
          type: object
          description: >-
            Payment information if the event type requires payment.
          properties:
            external_id:
              type: string
              description: >-
                The external payment processor ID.
            provider:
              type: string
              description: >-
                The payment provider name.
            amount:
              type: number
              description: >-
                The payment amount.
            currency:
              type: string
              description: >-
                The currency code.
            terms:
              type: string
              description: >-
                The payment terms.
            successful:
              type: boolean
              description: >-
                Whether the payment was successful.
        scheduled_event:
          type: object
          description: >-
            The scheduled event data included in the webhook payload.
          properties:
            uri:
              type: string
              format: uri
              description: >-
                The canonical URI of the scheduled event.
            name:
              type: string
              description: >-
                The name of the event.
            status:
              type: string
              enum:
                - active
                - canceled
              description: >-
                The status of the event.
            start_time:
              type: string
              format: date-time
              description: >-
                The start time in UTC.
            end_time:
              type: string
              format: date-time
              description: >-
                The end time in UTC.
            event_type:
              type: string
              format: uri
              description: >-
                The URI of the event type.
            location:
              type: object
              properties:
                type:
                  type: string
                  description: >-
                    The location type.
                location:
                  type: string
                  description: >-
                    The location details.
                join_url:
                  type: string
                  format: uri
                  description: >-
                    The URL to join the meeting.
              description: >-
                The event location details.
            event_memberships:
              type: array
              items:
                type: object
                properties:
                  user:
                    type: string
                    format: uri
                    description: >-
                      The URI of the event member.
                  user_email:
                    type: string
                    format: email
                    description: >-
                      The email of the event member.
              description: >-
                The hosts of the event.
            created_at:
              type: string
              format: date-time
              description: >-
                When the event was created.
            updated_at:
              type: string
              format: date-time
              description: >-
                When the event was last updated.
        created_at:
          type: string
          format: date-time
          description: >-
            The timestamp when the invitee was created.
        updated_at:
          type: string
          format: date-time
          description: >-
            The timestamp when the invitee was last updated.
    RoutingFormSubmissionPayload:
      type: object
      description: >-
        The routing form submission data included in webhook payloads for
        routing_form_submission.created events.
      properties:
        uri:
          type: string
          format: uri
          description: >-
            The canonical URI of the routing form submission.
        routing_form:
          type: string
          format: uri
          description: >-
            The URI of the routing form that was submitted.
        questions_and_answers:
          type: array
          items:
            type: object
            properties:
              question_uuid:
                type: string
                description: >-
                  The UUID of the question.
              question:
                type: string
                description: >-
                  The text of the question.
              answer:
                type: string
                description: >-
                  The respondents answer.
          description: >-
            The questions and answers from the submission.
        tracking:
          type: object
          description: >-
            UTM and tracking parameters captured at submission time.
          properties:
            utm_campaign:
              type: string
              description: >-
                The UTM campaign parameter.
            utm_source:
              type: string
              description: >-
                The UTM source parameter.
            utm_medium:
              type: string
              description: >-
                The UTM medium parameter.
        submitter:
          type: string
          format: uri
          description: >-
            The URI of the invitee created from this submission.
        submitter_type:
          type: string
          description: >-
            The type of submitter.
        created_at:
          type: string
          format: date-time
          description: >-
            When the submission was created.
        updated_at:
          type: string
          format: date-time
          description: >-
            When the submission was last updated.