CIIFragments Studio is CII-accredited: recover up to 20% of your software development spendLearn more

API integration for Calendly

We build your Calendly connector

We integrate the Calendly API to capture the booking, create it from your product, and push the invitee into the CRM.

  • Senior product team
  • booking flows in production
  • from scoping to monitoring
In short

What does the Calendly API do and when should you integrate it into an application?

Calendly is the most widely used appointment scheduling tool in France for sales and consulting teams. Its API lets your application create a booking without redirecting to the Calendly site, receive an immediate notification each time a meeting is booked, and sync the meeting details into your CRM. You integrate it when the sales team is already using Calendly and meetings need to automatically feed a pipeline, trigger an email, or create an activity without any manual re-entry.

Use cases

What our clients build on the Calendly API

01

Voice agent that confirms the slot

POST /invitees during the call. No link to click later. That is the use case the vendor highlights, and it requires a paid plan.

02

Portal that books in its own UI

Slots render in your interface. The booking goes out through the API. Calendly stays the engine, the journey stays yours.

03

CRM fed on invitee.created

Contact, deal, custom-question answers, UTM. No re-keying after a "you will get a Calendly".

04

Catch-up on cancel and no-show

invitee.canceled and invitee_no_show.created trigger a follow-up, a requalification, a new slot. What nobody does by hand.

For you

What this changes in your booking

The engineering serves a measurable result: a meeting in the file, fewer no-shows, a cost per held appointment.

The meeting is no longer a naked link

It opens the file. Answers to custom questions arrive structured, not in a confirmation email.

You book without showing Calendly

Scheduling API: the prospect stays in your product or on the call. The iframe is no longer a given.

A cancellation has a sequel

A dropped slot follows up. A no-show requalifies. Planning and pipeline stay aligned.

UTM follows through to the held meeting

The tracking block ties the campaign to actual attendance. You measure cost per held meeting, not per form.

Method

How we deliver your Calendly connector

01

Scoping

Read-only or Scheduling API, user or organization scope, PAT or OAuth, a real paid plan. We settle this before promising POST /invitees.

02

Development

Signature over t + raw body, short handler, full URIs, booking idempotency, a queue for slot refusals. A demo every week.

03

Acceptance

403 on organization scope with a user role, slot already taken, signature outside the 3-minute window, PAT of someone who left. Replay before cutover.

04

Monitoring

state and retry_started_at on subscriptions, alert if a webhook leaves active. Reconciliation via GET /scheduled_events. A dead webhook produces no error on your side.

What the API allows

What the Calendly API allows

Event types and meetings
event_types, scheduled_events, invitees, scheduling_links. Everything is addressed by URI (https://api.calendly.com/event_types/<UUID>), not by a stripped UUID.
Scheduling API
POST /invitees creates the booking: event_type (URI), available UTC start_time, invitee (name, email, timezone), plus location, guests, questions, UTM. Paid plan required.
Signed webhooks
invitee.created, invitee.canceled, invitee_no_show.created. Calendly-Webhook-Signature (t=...,v1=...), HMAC-SHA256, 3-minute tolerance in the official example.
Organization, roles, compliance
users, organizations, memberships. A webhook GET at organization scope returns 200 for an admin, 403 for a user. Invitee deletion endpoints for erasure.
Glossary

Calendly API vocabulary

Resource URI
Canonical identifier, for example https://api.calendly.com/event_types/<UUID>. Extracting the UUID and injecting it back breaks the first endpoint that expects the URI.
POST /invitees
Scheduling API. Books a slot with no Calendly UI. Minimal body: event_type, start_time, invitee. Paid plan required. This is not a forced booking.
Calendly-Webhook-Signature
t=<unix>,v1=<hmac>. HMAC-SHA256 of t + "." + raw body. 3-minute tolerance. The Express or Nest JSON parser must leave the raw body, or verification fails 100% of the time.
scope
user: events for that user only. organization: the whole account, admin token, otherwise 403. This is bug number one of Calendly integrations.
invitee.created
Webhook fired on booking. Carries the invitee, questions, tracking. This is what creates the deal, not polling scheduled_events.
retry_started_at
Subscription field that signals Calendly is retrying. A webhook that leaves active with no alert is a deaf sales pipeline.
Good to know

The real constraints of the Calendly API

01

You do not own availability

Buffers, notice, daily caps: all live at Calendly. You read and you book a free slot. An atypical business rule (pair, travel, night) is a Cal.com conversation.

02

The paid plan is a condition

The Scheduling API is explicitly reserved to apps on a paid plan. A prospect on the free plan cannot receive POST /invitees. We say it at scoping, not at acceptance.

03

A user webhook is not the account

user scope explains "we are not getting every meeting". Switching to organization without an admin token produces 403. Two causes, one symptom, tested before production.

04

A PAT survives a departure poorly

A personal token is named. OAuth is the only clean scheme for multi-tenant. Business idempotency on POST /invitees, and an alternative shown if the slot was just taken.

Calendly or Cal.com

Calendly API or Cal.com API?

Two booking engines. The right one depends on who owns the availability rules.

CriterionCalendlyThis pageCal.comOpen source
Where the rules liveAt Calendly, you read themWith you if self-hosted, first-class API
Booking via APIPOST /invitees, paid planCreate, reschedule, cancel, reassign
HostingCalendly SaaSCal.com cloud or your instance (AGPL to scope)
Webhook signatureCalendly-Webhook-Signature, 3 minx-cal-signature-256, secret to enforce
Event cataloguecreated, canceled, no-showBooking, meeting, recording, M365 delegation
Estate already thereOften already used by salesTo install, or already chosen for control
The right caseCapture a Calendly already in placeAtypical rules, self-hosting, ICS

Google Calendar and Outlook are the work calendar, not the booking engine. The three combine: Calendly takes the meeting, Calendar or Graph writes it for the collaborator.

Our expertise

What we measure on a Calendly integration

15 d
first Calendly flow in production
HMAC
signature verified on the raw body
< 1 min
invitee.created through to the CRM deal
4
senior developers on the project
Compare

The other calendar APIs

If Calendly is not the right engine, these options belong in the scoping conversation.

We combine Calendly with

The stack around Calendly on our projects.

  • HubSpot
  • Twilio
  • n8n
  • PostgreSQL
  • Node.js
FAQ

Calendly integration: your questions

OAuth (multi-tenant) or PAT (internal), store event-type URIs, webhook subscription at organization scope if you want the whole account, HMAC on the raw body, a worker to create the deal. If you book from the product: POST /invitees with a paid plan, handle slot refusal, a business idempotency key. The hard part is not the first GET, it is scope, signature and watching retry_started_at. This is a scoping call, written down before the first request, not an acceptance surprise.

Yes. The Scheduling API (POST /invitees) books a slot with no iframe and no redirect. Body: event_type URI, actually available UTC start_time, invitee (name, email, timezone), optional location, guests, questions, UTM tracking. A paid plan is required. This is not a forced booking: between list and insert, the slot can go. Plenty of online content still claims the opposite; the Calendly developer portal documents the endpoint.

A first useful flow, typically invitee.created into the CRM with questions and UTM, ships in two to three weeks. Adding POST /invitees in a portal or voice agent, plus subscription monitoring and GDPR erasure, is closer to four to six weeks. The Calendly account's paid plan must be confirmed before the quote, or the project dies at acceptance. This is a scoping call, written down before the first request, not an acceptance surprise.

Calendly if the engine is already there and you want to capture the booking (webhooks, optionally Scheduling API). Cal.com if you must own the rules (rotas, pairs, night), self-host, or handle MEETING_ENDED / ICS / recordings. Both then talk to Google Calendar or Outlook. We sometimes recommend Cal.com against a Calendly quote: same scoping, not two religions. This is a scoping call, written down before the first request, not an acceptance surprise.

POST /webhook_subscriptions with invitee.created, canceled, no_show. Verify Calendly-Webhook-Signature (t.body, 3 minutes). Return 2xx immediately, dedupe on the invitee URI, create contact / deal / task in the worker. Watch state and retry_started_at. Reconcile with GET /scheduled_events. A user scope on an account with several salespeople explains most "the CRM does not have the meeting" reports.

A Calendly integration project?

Let's talk. 30 minutes to scope webhooks, Scheduling API, the paid plan, and tell you plainly if Cal.com is not the better tool.

Discuss my Calendly project
Discuss my Calendly project