Generate a Personal Access Token (PAT) or use OAuth 2.0 from the Calendly developer portal at developer.calendly.com; include the token as 'Bearer your-access-token' in the Authorization header on all requests to https://api.calendly.com
Retrieve the current user's organization URI by calling GET /users/me; use the organization value to scope subsequent queries
List available event types via GET /event_types?user={userUri} to retrieve the event type URI and slug for the interview type you want to book
Retrieve available time slots by calling GET /event_type_available_times?event_type={eventTypeUri}&start_time={ISO8601}&end_time={ISO8601}; select a start_time from the returned slots
To programmatically create a booking without redirecting the user to Calendly UI, use the Create Event Invitee (Scheduling API) endpoint — POST /scheduled_events/{eventUuid}/invitees with the candidate's name and email; note this endpoint requires a paid Calendly plan
Subscribe to webhook events (invitee.created, invitee.canceled) via POST /webhook_subscriptions to receive real-time booking notifications and sync them back to your ATS
Known gotchas
The Scheduling API (programmatic booking without the Calendly UI) requires a paid Calendly plan; free-plan API keys will receive a 403 error when calling the Create Event Invitee endpoint
The start_time supplied to Create Event Invitee must exactly match an open slot returned by the available times endpoint; submitting an arbitrary timestamp will return a 409 conflict error
Personal Access Tokens grant access scoped to a single user's calendars; for multi-user (panel) scheduling, use OAuth 2.0 with each interviewer's authorization or use Calendly's team scheduling features
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp