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
onInviteeCreatedInvitee 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
onInviteeCanceledInvitee 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
onRoutingFormSubmissionCreatedRouting 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
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.