An open source Calendly API v2 MCP server and shared CLI with 66 tools, private accounts and a Claude Desktop extension.
This free Calendly MCP server and CLI gives your AI real access to Calendly API v2 scheduling, contacts and meeting recaps. Find available slots, book specifically approved meetings, manage event types and contacts, inspect authorized transcripts, and administer organization resources.
It's one install with 2 ways in. Claude, Codex, Cursor or any other MCP app calls its 66 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.
Here's what the Calendly MCP server and CLI is, how to set it up in each app, and every tool it has.
What is the Calendly MCP server & CLI?
The Calendly MCP server & CLI is a free, open source program that lets AI agents work with scheduling, contacts, availability, meeting recaps and requested account administration for you, in 2 ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.
You ask in plain language. Your AI picks the right tool, and the server makes the call directly to Calendly API v2.
The CLI is the same program as commands. calendly-cli get-current-user runs the same code your AI runs when you ask which Calendly user your private credentials identify, whether an agent like Claude Code runs it or you do.
What can you ask it?
Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:
Try askingShow my current user and accessible event types.
Find available slots for the event type and time zone I choose.
Book only the specific slot and invitee I approved.
Read this booking before cancelling it.
Inspect a contact and its custom field definitions.
Read my authorized meeting recap and transcript.
Inspect the current availability rules before changing them.
Calendly already offers an official hosted MCP. This local package adds a task CLI, private PAT or REST OAuth accounts, current Contacts/Notetaker coverage and controlled JSON output. The official supported-tools documentation was reviewed on October 2, 2026; no authenticated competitor handshake or measured superiority is claimed.
How to install the Calendly MCP server
Choose your client in the install box. The npm package supplies MCP and CLI; GitHub Releases supplies the versioned Claude Desktop bundle. Configure private account access before a network call.
Watch out: Installation grants no account access. Never put actual credentials into a repository, issue, guide, screenshot or model conversation.
Set up Calendly access
Personal Access Token for your own account
- Sign in to the intended Calendly account.
- Open Integrations > API and webhooks, or the token page.
- Create a named Personal Access Token with the scopes your workflow requires. Copy it once into private storage.
- Set
CALENDLY_API_TOKENin private local client/shell settings, orCALENDLY_TOKEN_FILEto an absolute token-only file outside repositories. - Run
calendly-cli doctor, thencalendly-cli doctor --networkto check a user read.
See current PAT setup. The token is a Bearer credential, not your Calendly password or browser cookie. Revocation is done in Calendly. GUI clients may not inherit terminal variables; this package does not load .env automatically. On POSIX, a credential file must be owner-only, such as mode 0600; on Windows protect the file and its directory with user-only ACLs. Readers refuse symlinks and files larger than 64 KB. A PAT file takes precedence over the environment PAT, and is cached until restart.
Existing REST OAuth grant
Use your own authorized REST OAuth application when acting for users who consent to your application. This local package does not create an OAuth app, open a browser, host a callback or exchange the first authorization code. login prints setup instructions. Put an existing access token in CALENDLY_ACCESS_TOKEN, or the full grant in a private file selected by CALENDLY_TOKENS_FILE. Do not mix PAT and OAuth settings for the same account.
The token file is a JSON object containing access_token, and optionally refresh_token, client_id, client_secret, created_at (Unix seconds) and expires_in (seconds). Keep all actual values outside model context and repositories. A file is required for automatic refresh; an environment-only access token is never refreshed. The file is read on each request, allowing separate processes to observe a saved rotation. Without valid expiry metadata, one GET 401 can trigger one configured refresh; writes never retry after a 401.
Calendly's single-use refresh-token rule took effect by August 31, 2026. This package refreshes against https://calendly.com/oauth/token, uses Basic client authentication for confidential clients or a body client_id without a secret, and atomically replaces both returned tokens in mode 0600 storage. Concurrent in-process refreshes share one promise, and a per-file .refresh.lock prevents another process from consuming the same token. An existing lock produces a configuration error instead of a second refresh. A crashed process can leave a lock; stop all users of that grant and verify its state before manually removing a stale lock. Never remove an active lock.
A refresh HTTP failure, unknown timeout, incomplete response or failed save requires reauthorization/private storage repair and a restart. No automatic refresh retry occurs. The old refresh token is not deliberately reused after an uncertain result. OAuth access tokens last two hours according to the current token reference; actual expiry metadata governs proactive refresh. Token rotation fixtures are verified; live grants remain unverified.
Scopes, roles and plans
API operation descriptions list their required scopes. :write grants include the family's read access. Start with users:read for doctor, then select only needed scheduling, availability, contacts, meeting_recaps, organization, routing, group or webhook scopes. Webhooks need webhooks:write plus the corresponding event family's read scope. Reauthorize or replace the token if scopes change; an installed command cannot raise permissions.
Direct booking through create_invitee requires a paid Standard-or-higher account. Routing Forms require Teams or higher; Activity Log, outgoing communications and data-compliance deletion require Enterprise and suitable organization permissions. Notetaker endpoints require a paid plan; Contacts/Notetaker data exists only where the account and associated feature provide it. API access does not create transcripts or bypass recording/consent policy. Administrative operations depend on your actual role. See authorization scopes and the current endpoint reference before choosing a plan.
Current request limits
The quota reference documents 50 requests per user/minute on Free and 500 on paid plans. Booking has tighter limits: trial 5/day; paid non-Enterprise 10/minute, 50/hour and 100/day; Enterprise 500/minute. OAuth token requests are limited to 8/user/minute. These are shared provider limits, not allowances reserved for this process.
Default local pacing is 1,300 ms per account/process; multiple account labels for one user and other integrations share that user's quota. GET 429 handling respects Retry-After or X-RateLimit-Reset when the wait is at most ten seconds. Longer waits surface exit 7 so a script can pause explicitly, rather than retry too early. Writes and OAuth refresh requests have zero automatic retries. Every page and retried read consumes quota.
Official hosted MCP is a separate connection
Calendly's official MCP is hosted at https://mcp.calendly.com. It uses OAuth 2.1, PKCE S256, resource discovery and Dynamic Client Registration. It does not accept a PAT or a manually provisioned console client_id/client_secret connection. A client prompting only for static OAuth credentials is incompatible with that documented flow. The documentation search MCP at https://developer.calendly.com/_mcp/server reads docs; it does not operate your account. Keep all three entries distinct.
Check that it works
Start with local configuration checks, then explicitly opt into one authorized user read.
calendly-cli --version
calendly-cli doctor
calendly-cli doctor --network
calendly-cli list-accounts --agent
calendly-cli get-current-user --agentcalendly-cli --version
calendly-cli doctor
calendly-cli doctor --network
calendly-cli list-accounts --agent
calendly-cli get-current-user --agentThe local doctor checks configuration. Network doctor reads /users/me and reports success without printing user details; it does not book, cancel or invite anyone. A successful read proves that read's access, not every endpoint/plan permission. Full discovery has 66 tools; read-only has 44. Use the returned canonical user and organization URIs in subsequent filters, rather than substituting a bare UUID.
Use the Calendly CLI
The CLI is the same 66 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.
Every tool name becomes a command with dashes, so list_events runs as calendly-cli list-events.
calendly-cli
calendly-cli list-events --help
calendly-cli schema create-invitee
calendly-cli list-events --user https://api.calendly.com/users/USER_UUID --count 10 --agent
calendly-cli list-contacts --email user@example.com --count 5 --agentThe bare calendly-cli lists every command, and calendly-cli <command> --help shows what a command takes. Every mutation requires --confirm. --yes and --agent never authorize a write. UUIDs and URIs in examples are placeholders; discover your own authorized resources.
These flags work on every command:
| Flag | What it does |
|---|---|
| --json | Structured JSON |
| --compact | One-line JSON |
| --agent | Compact JSON without prompts or color |
| --select a,b.c | Select local result fields |
| --confirm | Confirm the specific requested mutation |
| --account NAME | Choose the private credential label |
| --payload JSON / --payload-file PATH | Complete body instead of body flags |
A script can branch on the exit code:
| Exit code | What it means |
|---|---|
| 0 | Success |
| 2 | Invalid arguments or refused write |
| 3 | Resource not found |
| 4 | Authentication or permission failure |
| 5 | API or transport failure |
| 7 | Rate limit |
| 10 | Missing or invalid private configuration |
MCP server or CLI: which one?
Both surfaces call the same tools. Codex can connect to the local MCP server or run the CLI directly. Neither requires Claude Code.
MCP provides structured tool discovery; the CLI supports scripts, compact JSON, field selection and command/schema discovery. Official hosted MCP connection and local CLI authentication have different setup requirements.
Codex-specific token measurements are pending. Record the actual client/model versions, discovery configuration, input/output usage, caching, latency and equivalent successful outcomes. Standing definitions and full task cost are separate measurements; CLI commands, selected help, results and reasoning still consume tokens.
No efficiency percentage or Claude-derived figure is presented as a Codex result. Other-client benchmarks can be added separately.
Scheduling, contacts and meeting recap workflows
Find the right event type and available slot
Read get_current_user for canonical user and organization URIs. List event types for that user or organization, inspect the chosen event type and its location/host requirements, then request current slots. Event-type availability now permits at most 31 days; user busy times still permit at most seven. Both need a future increasing time range. Split larger windows deliberately; availability is not reserved by a read.
calendly-cli get-current-user --agent
calendly-cli list-event-types --user https://api.calendly.com/users/USER_UUID --count 10 --agent
calendly-cli get-event-type --event-type-uuid EVENT_TYPE_UUID --agent
calendly-cli list-event-type-available-times --event-type https://api.calendly.com/event_types/EVENT_TYPE_UUID --start-time 2030-01-02T00:00:00Z --end-time 2030-01-16T00:00:00Z --agentDates/URIs are illustrative. Replace them with a currently valid future range and actual returned resources. Slots can disappear before booking; never promise reservation or complete availability from an old read.
Book only the confirmed invitee and slot
Create a private payload file containing event_type URI, start_time in UTC, and invitee email, timezone and name or first_name. Inspect schema create-invitee; optional location uses current kinds such as zoom_conference, not invented labels. Do not send location for a round-robin event type. Location must match what that event type permits. Guest emails are capped at ten. Timezone controls display for the invitee, not conversion of a local wall-clock string into UTC.
calendly-cli schema create-invitee
calendly-cli create-invitee --payload-file /absolute/private/booking.json --confirm --agent
calendly-cli get-event --event-uuid RETURNED_EVENT_UUID --agentBooking through POST /invitees creates a real scheduled event and triggers normal calendar invites, notifications and workflows. There is no draft booking or local dry-run endpoint. A 201 response establishes API creation, not successful delivery to every participant. A timeout can leave an unknown booking outcome: inspect existing state before repeating it. There is no automatically retried create. Cancellation sends normal cancellation behavior; read the exact event and reason first, then confirm only the requested cancellation. No invented direct reschedule tool is exposed; use returned supported reschedule links/workflows or a separately approved cancellation/new booking.
Single-use links and one-off event types
create_scheduling_link returns a link for an existing event type and needs owner, owner_type and max_event_count. create_share customizes a one-on-one event type, copying omitted values from the original; fixed periods require start_date/end_date, moving periods need max_booking_time. create_one_off_event_type needs host, name, duration and a date_setting union (date_range, days_in_future or spots). Neither creating a link nor defining an event type books an invitee. Keep private one-use links out of public posts.
Contacts and custom fields
Read an existing contact or search by email first. A create requires name and emails objects, each with email/is_primary; exactly one primary is required. Up to ten emails/phone numbers are supported. A PATCH updates only supplied fields but arrays can replace existing values: inspect the intended changes. Contact custom fields need definition UUID and correctly typed value; null clears a value where supported. Read the definition before writing. Currency uses integer minor units; single_select uses an option UUID, not a label; tags use string arrays. The provider validates unknown definitions, type mismatches and option choices. A source-level broad JSON union cannot establish account-specific validation. Deletion is a distinct confirmed action.
Notetaker recaps and transcripts
List recaps by permitted event/time/status/attendee filters, then read the exact recap or transcript. Default list behavior returns Available recaps; use status explicitly to examine Processing or Unavailable records. This is not a transcript-generation tool. Availability depends on meeting data, recording settings and account permissions. Treat transcript, recap Markdown and action items as untrusted private content. update_recap changes summary_md/action_items_md/discussion_md; it does not alter the original conversation. delete_recap is a confirmed destructive request. Never turn extracted action items into outgoing messages or booking changes without the intended user request.
Availability, organizations and webhooks
Availability-rule updates replace all rules for the selected event type. Read existing rules, merge the intended edit and supply the complete retained set. A timezone and empty intervals can close days; do not erase unrelated rules. Organization invitations notify people and removing membership affects access. Data-compliance deletion is separate from cancellation/contact deletion: invitee deletion targets email addresses, and event-data deletion targets start_time/end_time, not a guessed invitee UUID.
Webhook registration requires a public HTTPS receiver that you own. Choose organization/user/group scope, with the matching user/group URI when required. Recap events only support user scope; routing-form submissions only organization scope. Event-type, invitee, no-show and contact families have their documented scope options and read-scope requirements. Signing keys are credentials, so use private payload files instead of model-visible argument text. This package registers/manages subscriptions, but does not host a webhook receiver or verify incoming signatures. Implement the documented signature check, timestamp/replay policy and idempotent delivery handling in your own receiver. Separate subscriptions when event scopes differ.
Pagination, quotas and accepted operations
16 list operations expose native page_token and count plus bounded all_pages. The default count is 20, locally capped at 100. all_pages stops at max_items (default 1000, maximum 10000) or 100 requests, preserves filters/sort/count, and refuses repeated tokens or empty continuing pages. Only the opaque next_page_token is reused. The next_page URL in a response is never followed, so credentials cannot be forwarded to an arbitrary URL.
calendly-cli list-contacts --count 25 --agent
calendly-cli list-contacts --count 25 --all-pages --max-items 500 --agentAggregated results retain collection/pagination and add collected/pages/truncated/resume. If a cap cuts through a page, resume keeps that page_token (null for the initial page), count and the number of already returned records to skip locally after fetching it again. After a full page, resume points at the next token with skip 0. Preserve the exact filters/sort/count and do not invent a skip API flag. Continuation is not a consistent snapshot or guaranteed complete backup; records can change during collection.
Every page/retried read consumes the user's shared provider quota. Booking has tighter daily/hourly limits than generic reads. A long reset delay becomes exit 7 rather than an early retry. POST/DELETE/PATCH have zero automatic retries. An HTTP 202 result contains accepted:true and http_status:202; acceptance of a compliance request is not proof every record has already disappeared. Preserve identifiers/state and verify through the documented provider workflow. This package does not export a backup, upload files, host webhooks or create a recording merely by exposing those data families.
Every Calendly tool
Actual discovery supplies 66 tools: 44 reads and 22 confirmed writes. The complete arguments, scopes and nested body fields follow below; schema COMMAND returns the exact JSON Schema.
Activity log
list_activity_log- What it does
- List activity log entries.
- Kind
- Reads
Availability
get_availability_schedule- What it does
- Get User Availability Schedule.
- Kind
- Reads
list_event_type_availability_schedules- What it does
- List Event Type Availability Schedules.
- Kind
- Reads
update_event_type_availability_schedules- What it does
- Update Event Type Availability Schedules.
- Kind
- Asks first
list_availability_schedules- What it does
- List User Availability Schedules.
- Kind
- Reads
list_user_busy_times- What it does
- List User Busy Times.
- Kind
- Reads
Contacts
create_contact- What it does
- Create Contact.
- Kind
- Asks first
list_contacts- What it does
- List Contacts.
- Kind
- Reads
delete_contact- What it does
- Delete Contact.
- Kind
- Asks first
get_contact- What it does
- Get Contact.
- Kind
- Reads
update_contact- What it does
- Update Contact.
- Kind
- Asks first
get_contact_custom_field_definition- What it does
- Get Contact Custom Field Definition.
- Kind
- Reads
list_contact_custom_field_definitions- What it does
- List Contact Custom Field Definitions.
- Kind
- Reads
Data compliance
delete_invitee_data- What it does
- Delete Invitee Data.
- Kind
- Asks first
delete_scheduled_event_data- What it does
- Delete Scheduled Event Data.
- Kind
- Asks first
Event types
create_event_type- What it does
- Create Event Type.
- Kind
- Asks first
list_event_types- What it does
- List User's Event Types.
- Kind
- Reads
create_one_off_event_type- What it does
- Create One-Off Event Type.
- Kind
- Asks first
get_event_type- What it does
- Get Event Type.
- Kind
- Reads
update_event_type- What it does
- Update Event Type.
- Kind
- Asks first
list_event_type_available_times- What it does
- List Event Type Available Times.
- Kind
- Reads
list_event_type_hosts- What it does
- List Event Type Hosts.
- Kind
- Reads
Groups
get_group- What it does
- Get Group.
- Kind
- Reads
get_group_relationship- What it does
- Get Group Relationship.
- Kind
- Reads
list_group_relationships- What it does
- List Group Relationships.
- Kind
- Reads
list_groups- What it does
- List Groups.
- Kind
- Reads
Locations
list_user_locations- What it does
- List User Meeting Locations.
- Kind
- Reads
Notetaker
delete_recap- What it does
- Delete Recap.
- Kind
- Asks first
get_recap- What it does
- Get Recap.
- Kind
- Reads
update_recap- What it does
- Update Recap.
- Kind
- Asks first
get_transcript- What it does
- Get Transcript.
- Kind
- Reads
list_recaps- What it does
- List Recaps.
- Kind
- Reads
Organizations
get_organization- What it does
- Get Organization.
- Kind
- Reads
get_organization_invitation- What it does
- Get Organization Invitation.
- Kind
- Reads
revoke_organization_invitation- What it does
- Revoke User's Organization Invitation.
- Kind
- Asks first
get_organization_membership- What it does
- Get Organization Membership.
- Kind
- Reads
remove_from_organization- What it does
- Remove User from Organization.
- Kind
- Asks first
get_team- What it does
- Get Team.
- Kind
- Reads
invite_to_organization- What it does
- Invite User to Organization.
- Kind
- Asks first
list_organization_invitations- What it does
- List Organization Invitations.
- Kind
- Reads
list_organization_memberships- What it does
- List Organization Memberships.
- Kind
- Reads
list_teams- What it does
- List Teams.
- Kind
- Reads
Outgoing communications
list_outgoing_communications- What it does
- List outgoing communications.
- Kind
- Reads
Routing forms
get_routing_form- What it does
- Get Routing Form.
- Kind
- Reads
get_routing_form_submission- What it does
- Get Routing Form Submission.
- Kind
- Reads
list_routing_form_submissions- What it does
- List Routing Form Submissions.
- Kind
- Reads
list_routing_forms- What it does
- List Routing Forms.
- Kind
- Reads
Scheduled events
cancel_event- What it does
- Cancel Event.
- Kind
- Asks first
create_invitee- What it does
- Create Event Invitee (Scheduling API).
- Kind
- Asks first
create_no_show- What it does
- Create Invitee No Show.
- Kind
- Asks first
delete_no_show- What it does
- Delete Invitee No Show.
- Kind
- Asks first
get_no_show- What it does
- Get Invitee No Show.
- Kind
- Reads
get_event- What it does
- Get Event.
- Kind
- Reads
get_event_invitee- What it does
- Get Event Invitee.
- Kind
- Reads
list_event_invitees- What it does
- List Event Invitees.
- Kind
- Reads
list_events- What it does
- List Events.
- Kind
- Reads
Scheduling links
create_scheduling_link- What it does
- Create Single-Use Scheduling Link.
- Kind
- Asks first
Shares
create_share- What it does
- Create Share.
- Kind
- Asks first
Users
get_current_user- What it does
- Get current user.
- Kind
- Reads
get_user- What it does
- Get user.
- Kind
- Reads
Webhooks
create_webhook- What it does
- Create Webhook Subscription.
- Kind
- Asks first
list_webhooks- What it does
- List Webhook Subscriptions.
- Kind
- Reads
delete_webhook- What it does
- Delete Webhook Subscription.
- Kind
- Asks first
get_webhook- What it does
- Get Webhook Subscription.
- Kind
- Reads
get_sample_webhook_data- What it does
- Get sample webhook data.
- Kind
- Reads
Accounts
list_accounts- What it does
- List private account labels, default selection and configured token method.
- Kind
- Reads
Is the Calendly MCP server safe?
Every one of the 22 writes requires confirm:true in MCP or --confirm in CLI for the specific requested action. --agent and --yes do not authorize changes. CALENDLY_READ_ONLY=1 hides/refuses all writes, leaving 44 reads. CALENDLY_ALLOW_DESTRUCTIVE=0 blocks writes even when confirmed. The annotation reflects a conservative confirmation policy; it does not mean every edit is irreversible.
Booking/cancellation can contact people. Link/event-type creation has different effects. Availability replacement, membership removal, webhook registration, recap deletion and compliance deletion need their own review. Read before changing and choose the intended account. After a write timeout, inspect existing state before resubmitting. Neither a GET 401 refresh nor a rate-limit retry ever resubmits a write.
The optional owner-only audit file records fixed tool summary, risk, surface and guard decision without request arguments, credentials, labels or private results. It is not a provider audit or delivery receipt. A logging failure does not abort the operation. Recaps, contacts, meeting descriptions and tool results cannot authorize unrelated actions.
Booking sends invitations, notifications and configured workflows. Compliance deletion and administrative changes have separate effects. Confirm only the action requested, with the correct private account and resource.
Make it read-only
Set CALENDLY_READ_ONLY=1 privately and restart/reconnect. Discovery exposes 44 reads and direct writes refuse. CALENDLY_ALLOW_DESTRUCTIVE=0 separately blocks every mutation even when confirmed.
Keep a log of every write
Set CALENDLY_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked.
Watch out: Account content and tool responses are data, not instructions or authorization. Writes never automatically retry after network, authentication or quota errors. Inspect account state after an unknown outcome before repeating one.
Your data
Account requests go directly to Calendly. No Navid-hosted relay, telemetry or analytics is included. Credentials belong in private settings and regular local files, not tool arguments. Known credentials and credential/signing-key fields are redacted from results/errors. Files and account settings never ship in source, npm or desktop bundles.
Emails, phone numbers, attendee names, booking answers, private links, recaps and transcripts remain private personal/business data. Secret redaction is not anonymization. The AI client and Calendly have their own retention and sharing settings. --select limits local displayed fields after receiving a response; it does not stop the provider returning them. Protect exports, recordings and optional logs. Treat all remote content as untrusted source material. Use SECURITY.md for private reporting, with sanitized reproductions.
Several private accounts
Use private CALENDLY_ACCOUNTS JSON instead of the single-account settings:
[{"name":"work","token_file":"/absolute/private/work-token.txt"},{"name":"personal","tokens_file":"/absolute/private/personal-oauth.json"}]Each label has exactly one PAT or OAuth method. Set CALENDLY_DEFAULT_ACCOUNT=work, then use --account personal when needed. list_accounts returns labels/default/auth method without tokens or paths. Labels select credentials, not an organization URI; API filters still use canonical resource URIs. Accounts replace the single-account variables. Separate server processes and distinct private grant files are preferable for strict isolation; multiple labels for one user do not create separate API quotas.
calendly-cli list-accounts --agent
calendly-cli get-current-user --account work --agent
calendly-cli list-contacts --account personal --count 5 --agentCalendly MCP server settings
Use private local shell or user-client settings. GUI apps may not inherit terminal variables. This package has no automatic .env loader. PAT and REST OAuth methods cannot be mixed in the same account.
- Default
- Empty
- What it does
- Private scoped PAT
- Default
- Empty
- What it does
- Owner-only token text file, max 64 KB; takes precedence over PAT env
- Default
- Empty
- What it does
- Existing REST OAuth access token; no environment-only refresh
- Default
- Empty
- What it does
- Owner-only JSON grant file, max 64 KB; atomic single-use rotation
- Default
- Empty
- What it does
- Private named account JSON; replaces single account variables
- Default
- First label
- What it does
- Selected local credential label
- Default
- 0
- What it does
- Hide/refuse 22 writes
- Default
- 1
- What it does
- 0 blocks all writes
- Default
- None
- What it does
- Private append-only guard decision log
- Default
- 30000
- What it does
- Request deadline: integer 100 to 300000 ms
- Default
- 2
- What it does
- GET 429 retries: 0 to 5
- Default
- 1300
- What it does
- Per-account/process pacing: 0 to 10000 ms
Troubleshooting
Run the doctor first. It names the step that failed and the fix.
| What you see | What to do |
|---|---|
| No configured account | Set a private PAT/token file or authorized REST OAuth tokens file. |
| 401/403 | Check token scope, user role, feature eligibility and selected account. |
| OAuth refresh blocked | Wait for the active lock; unknown or invalid rotation requires reauthorization, repaired private storage and restart. |
| CLI works; GUI fails | Configure the actual GUI process or private user settings. |
| Invalid request body | Read the current schema and choose one body input method. |
| First page only | Use native page_token and count or bounded all_pages. Preserve resume metadata. |
| 429 | Respect shared user and booking quotas. Longer delays return exit 7. |
| Unknown booking outcome | Inspect events/invitees before repeating creation. |
| No transcript | Notetaker needs a paid plan, authorized recap access and an available recording; the wrapper creates no recordings. |
| Desktop bundle rejected | Check the runtime and organization extension policy. |
If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.
Every argument, route and scope
All 65 API operations come from the pinned current official OpenAPI. list_accounts is local. Each tool is the same dashed CLI command. Top-level flags and nested request fields are shown below; schema COMMAND returns complete unions, enums and conditional rules. Body requirements apply whether you use individual flags or payload/payload_file.
list_activity_log- REST operation
GET /activity_log_entries- Mode
- Read
- Required scope
activity_log:read
get_availability_schedule- REST operation
GET /user_availability_schedules/{uuid}- Mode
- Read
- Required scope
availability:read
list_event_type_availability_schedules- REST operation
GET /event_type_availability_schedules- Mode
- Read
- Required scope
availability:read
update_event_type_availability_schedules- REST operation
PATCH /event_type_availability_schedules- Mode
- Write, confirms
- Required scope
availability:write
list_availability_schedules- REST operation
GET /user_availability_schedules- Mode
- Read
- Required scope
availability:read
list_user_busy_times- REST operation
GET /user_busy_times- Mode
- Read
- Required scope
availability:read
create_contact- REST operation
POST /contacts- Mode
- Write, confirms
- Required scope
contacts:write
list_contacts- REST operation
GET /contacts- Mode
- Read
- Required scope
contacts:read
delete_contact- REST operation
DELETE /contacts/{uuid}- Mode
- Write, confirms
- Required scope
contacts:write
get_contact- REST operation
GET /contacts/{uuid}- Mode
- Read
- Required scope
contacts:read
update_contact- REST operation
PATCH /contacts/{uuid}- Mode
- Write, confirms
- Required scope
contacts:write
get_contact_custom_field_definition- REST operation
GET /contacts/custom_field_definitions/{uuid}- Mode
- Read
- Required scope
contacts:read
list_contact_custom_field_definitions- REST operation
GET /contacts/custom_field_definitions- Mode
- Read
- Required scope
contacts:read
delete_invitee_data- REST operation
POST /data_compliance/deletion/invitees- Mode
- Write, confirms
- Required scope
data_compliance:write
delete_scheduled_event_data- REST operation
POST /data_compliance/deletion/events- Mode
- Write, confirms
- Required scope
data_compliance:write
create_event_type- REST operation
POST /event_types- Mode
- Write, confirms
- Required scope
event_types:write
list_event_types- REST operation
GET /event_types- Mode
- Read
- Required scope
event_types:read
create_one_off_event_type- REST operation
POST /one_off_event_types- Mode
- Write, confirms
- Required scope
event_types:write
get_event_type- REST operation
GET /event_types/{uuid}- Mode
- Read
- Required scope
event_types:read
update_event_type- REST operation
PATCH /event_types/{uuid}- Mode
- Write, confirms
- Required scope
event_types:write
list_event_type_available_times- REST operation
GET /event_type_available_times- Mode
- Read
- Required scope
availability:read
list_event_type_hosts- REST operation
GET /event_type_memberships- Mode
- Read
- Required scope
event_types:read
get_group- REST operation
GET /groups/{uuid}- Mode
- Read
- Required scope
groups:read
get_group_relationship- REST operation
GET /group_relationships/{uuid}- Mode
- Read
- Required scope
groups:read
list_group_relationships- REST operation
GET /group_relationships- Mode
- Read
- Required scope
groups:read
list_groups- REST operation
GET /groups- Mode
- Read
- Required scope
groups:read
list_user_locations- REST operation
GET /locations- Mode
- Read
- Required scope
locations:read
delete_recap- REST operation
DELETE /meeting_recaps/{uuid}- Mode
- Write, confirms
- Required scope
meeting_recaps:write
get_recap- REST operation
GET /meeting_recaps/{uuid}- Mode
- Read
- Required scope
meeting_recaps:read
update_recap- REST operation
PATCH /meeting_recaps/{uuid}- Mode
- Write, confirms
- Required scope
meeting_recaps:write
get_transcript- REST operation
GET /meeting_recaps/{uuid}/transcript- Mode
- Read
- Required scope
meeting_recaps:read
list_recaps- REST operation
GET /meeting_recaps- Mode
- Read
- Required scope
meeting_recaps:read
get_organization- REST operation
GET /organizations/{uuid}- Mode
- Read
- Required scope
organizations:read
get_organization_invitation- REST operation
GET /organizations/{org_uuid}/invitations/{uuid}- Mode
- Read
- Required scope
organizations:read
revoke_organization_invitation- REST operation
DELETE /organizations/{org_uuid}/invitations/{uuid}- Mode
- Write, confirms
- Required scope
organizations:write
get_organization_membership- REST operation
GET /organization_memberships/{uuid}- Mode
- Read
- Required scope
organizations:read
remove_from_organization- REST operation
DELETE /organization_memberships/{uuid}- Mode
- Write, confirms
- Required scope
organizations:write
get_team- REST operation
GET /teams/{team_uuid}- Mode
- Read
- Required scope
organizations:read
invite_to_organization- REST operation
POST /organizations/{uuid}/invitations- Mode
- Write, confirms
- Required scope
organizations:write
list_organization_invitations- REST operation
GET /organizations/{uuid}/invitations- Mode
- Read
- Required scope
organizations:read
list_organization_memberships- REST operation
GET /organization_memberships- Mode
- Read
- Required scope
organizations:read
list_teams- REST operation
GET /teams- Mode
- Read
- Required scope
organizations:read
list_outgoing_communications- REST operation
GET /outgoing_communications- Mode
- Read
- Required scope
outgoing_communications:read
get_routing_form- REST operation
GET /routing_forms/{uuid}- Mode
- Read
- Required scope
routing_forms:read
get_routing_form_submission- REST operation
GET /routing_form_submissions/{uuid}- Mode
- Read
- Required scope
routing_forms:read
list_routing_form_submissions- REST operation
GET /routing_form_submissions- Mode
- Read
- Required scope
routing_forms:read
list_routing_forms- REST operation
GET /routing_forms- Mode
- Read
- Required scope
routing_forms:read
cancel_event- REST operation
POST /scheduled_events/{uuid}/cancellation- Mode
- Write, confirms
- Required scope
scheduled_events:write
create_invitee- REST operation
POST /invitees- Mode
- Write, confirms
- Required scope
scheduled_events:write
create_no_show- REST operation
POST /invitee_no_shows- Mode
- Write, confirms
- Required scope
scheduled_events:write
delete_no_show- REST operation
DELETE /invitee_no_shows/{uuid}- Mode
- Write, confirms
- Required scope
scheduled_events:write
get_no_show- REST operation
GET /invitee_no_shows/{uuid}- Mode
- Read
- Required scope
scheduled_events:read
get_event- REST operation
GET /scheduled_events/{uuid}- Mode
- Read
- Required scope
scheduled_events:read
get_event_invitee- REST operation
GET /scheduled_events/{event_uuid}/invitees/{invitee_uuid}- Mode
- Read
- Required scope
scheduled_events:read
list_event_invitees- REST operation
GET /scheduled_events/{uuid}/invitees- Mode
- Read
- Required scope
scheduled_events:read
list_events- REST operation
GET /scheduled_events- Mode
- Read
- Required scope
scheduled_events:read
create_scheduling_link- REST operation
POST /scheduling_links- Mode
- Write, confirms
- Required scope
scheduling_links:write
create_share- REST operation
POST /shares- Mode
- Write, confirms
- Required scope
shares:write
get_current_user- REST operation
GET /users/me- Mode
- Read
- Required scope
users:read
get_user- REST operation
GET /users/{uuid}- Mode
- Read
- Required scope
users:read
create_webhook- REST operation
POST /webhook_subscriptions- Mode
- Write, confirms
- Required scope
scheduled_events:read,event_types:read,meeting_recaps:read,routing_forms:read,contacts:read,webhooks:write
list_webhooks- REST operation
GET /webhook_subscriptions- Mode
- Read
- Required scope
webhooks:read
delete_webhook- REST operation
DELETE /webhook_subscriptions/{webhook_uuid}- Mode
- Write, confirms
- Required scope
webhooks:write
get_webhook- REST operation
GET /webhook_subscriptions/{webhook_uuid}- Mode
- Read
- Required scope
webhooks:read
get_sample_webhook_data- REST operation
GET /sample_webhook_data- Mode
- Read
- Required scope
webhooks:read
list_accounts- REST operation
- Local, no network
- Mode
- Read
- Required scope
- None
list_activity_log
calendly-cli list-activity-log · GET /activity_log_entries
organization- Route
- query
organization - Required
- Yes
- Type
- string
- Details
- Return activity log entries from the organization associated with this URI format:
uri.
search_term- Route
- query
search_term - Required
- No
- Type
- string
- Details
- Filters entries based on the search term. Supported operators: -
/- to allow filtering by one term or another. Example:this / that-+- to allow filtering by one term and another. Example:this + that-"- to allow filtering by an exact search term. Example:"email@website.com"--- to omit specific terms from results. Example:Added -User-()- to allow specifying precedence during a search. Example:(this + that) OR (person + place)-*- to allow prefix searching. Example*@other-website.commaxLength:300.
actor- Route
- query
actor - Required
- No
- Type
- array
- Details
- Return entries from the user(s) associated with the provided URIs Array items: string.
sort- Route
- query
sort - Required
- No
- Type
- array
- Details
- Order results by the specified field and direction. List of {field}:{direction} values. default:
['occurred_at:desc']. Array items: string.
min_occurred_at- Route
- query
min_occurred_at - Required
- No
- Type
- string
- Details
- Include entries that occurred after this time (sample time format: "2020-01-02T03:04:05.678Z"). This time should use the UTC timezone. format:
date-time.
max_occurred_at- Route
- query
max_occurred_at - Required
- No
- Type
- string
- Details
- Include entries that occurred prior to this time (sample time format: "2020-01-02T03:04:05.678Z"). This time should use the UTC timezone. format:
date-time.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next portion of the collection
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
namespace- Route
- query
namespace - Required
- No
- Type
- array
- Details
- The categories of the entries Array items: string.
action- Route
- query
action - Required
- No
- Type
- array
- Details
- The action(s) associated with the entries Array items: string.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
get_availability_schedule
calendly-cli get-availability-schedule · GET /user_availability_schedules/{uuid}
schedule_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The UUID of the availability schedule. minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
list_event_type_availability_schedules
calendly-cli list-event-type-availability-schedules · GET /event_type_availability_schedules
event_type- Route
- query
event_type - Required
- Yes
- Type
- string
- Details
- The URI associated with the event type format:
uri.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
update_event_type_availability_schedules
calendly-cli update-event-type-availability-schedules · PATCH /event_type_availability_schedules
event_type- Route
- query
event_type - Required
- Yes
- Type
- string
- Details
- Event Type uri in which to update the availability schedule format:
uri.
availability_rule- Route
- Body
- Required
- Yes in body
- Type
- object
- Details
- Object requires:
timezone.
availability_rule.timezone- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- The timezone for which this Event Type Availability Schedule is originated in.
availability_rule.rules- Route
- Nested body
- Required
- No
- Type
- array
- Details
- The rules for an availability schedule. Warning: Updating rules will overwrite all existing rules for the event type. Use the GET endpoint to first retrieve the existing rules and then pass the modified rules to the rules object. Array items: object.
availability_rule.rules[].type- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- The type of this Availability Rule; can be "wday" or a specific "date". Values:
wday,date.
availability_rule.rules[].intervals- Route
- Nested body
- Required
- Yes in body
- Type
- array
- Details
- The intervals to be applied to this Rule. Each interval represents when booking a meeting is allowed. If the interval array is empty, then there is no booking availability for that day. Time is in 24h format (i.e. "17:30") and local to the timezone in the Availability Schedule. Array items: object.
availability_rule.rules[].intervals[].from- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Format:
"hh:mm"pattern:(\d\d):(\d\d).
availability_rule.rules[].intervals[].to- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Format:
"hh:mm"pattern:(\d\d):(\d\d).
availability_rule.rules[].wday- Route
- Nested body
- Required
- No
- Type
- string
- Details
- The day of the week for which this Rule should be applied to. Values:
sunday,monday,tuesday,wednesday,thursday,friday,saturday.
availability_rule.rules[].date- Route
- Nested body
- Required
- No
- Type
- string
- Details
- A specific date in the future that this should be applied to (i.e. "2030-12-31"). pattern:
^\d{4}-(0?[1-9]/1[012])-(0?[1-9]/[12][0-9]/3[01])$.
availability_rule.user- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Required when an admin or org owner is making the call to update a specific users availability schedule format:
uri.
availability_setting- Route
- Body
- Required
- No
- Type
- string
- Details
- By default every host on the Event Type shares an identical schedule. default:
host. Values:host.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
list_availability_schedules
calendly-cli list-availability-schedules · GET /user_availability_schedules
user- Route
- query
user - Required
- Yes
- Type
- string
- Details
- A URI reference to a user format:
uri.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
list_user_busy_times
calendly-cli list-user-busy-times · GET /user_busy_times
user- Route
- query
user - Required
- Yes
- Type
- string
- Details
- The uri associated with the user format:
uri.
start_time- Route
- query
start_time - Required
- Yes
- Type
- string
- Details
- Start time of the requested availability range. Date cannot be in the past.
end_time- Route
- query
end_time - Required
- Yes
- Type
- string
- Details
- End time of the requested availability range. Date must be in the future of start_time.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
create_contact
calendly-cli create-contact · POST /contacts
name- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- Current schema
emails- Route
- Body
- Required
- Yes in body
- Type
- array
- Details
- The user's email addresses. Max 10. minItems:
1. maxItems:10. Array items: object.
emails[].email- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- Email address. format:
email.
emails[].is_primary- Route
- Nested body
- Required
- Yes in body
- Type
- boolean
- Details
- Whether this is the primary email.
phone_numbers- Route
- Body
- Required
- No
- Type
- array
- Details
- The user's phone numbers. Max 10. maxItems:
10. Array items: object.
phone_numbers[].phone_number- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- Phone number.
timezone- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
job_title- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
company- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
country- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
state- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
city- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
linkedin- Route
- Body
- Required
- No
- Type
- string
- Details
- format:
uri.
custom_fields- Route
- Body
- Required
- No
- Type
- array
- Details
- Custom field values to set on the contact. Each item requires a
uuid(the custom field definition identifier) and avalue; any other keys (such aslabel) are ignored. The entire request is rejected if anyuuidis unknown, anyvalueis the wrong type for its field (including an array for a scalar field or a scalar for an array field), or anysingle_selectvalueis not one of the field definition's optionuuids. Array items: object.
custom_fields[].uuid- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- Unique identifier of the custom field definition.
custom_fields[].value- Route
- Nested body
- Required
- Yes in body
- Type
- JSON union
- Details
- The custom field value; the accepted type is set by the field definition's
field_type.textandsingle_selecttake a string (single_selectmust equal one of the definition's optionuuids);numbertakes a number;booleantakes a boolean;currencytakes an integer amount in the currency's minor units (the ISO currency code lives on the field definition, not on this entry);datetakes a string in ISO 8601 date format (YYYY-MM-DD);tagstakes an array of strings. Scalar fields reject array values, andtagsrejects non-array values. Exactly one of 2 schema branches; inspect schema for nested requirements.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
list_contacts
calendly-cli list-contacts · GET /contacts
sort- Route
- query
sort - Required
- No
- Type
- string
- Details
- Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: created_at, updated_at. Sort direction is specified as: asc, desc.
email- Route
- query
email - Required
- No
- Type
- string
- Details
- Filter results by exact match on email address. Accepts a comma-separated list.
phone_number- Route
- query
phone_number - Required
- No
- Type
- string
- Details
- Filter results by exact match on phone number. Accepts a comma-separated list.
timezone- Route
- query
timezone - Required
- No
- Type
- string
- Details
- Filter results by exact match on the IANA time zone name(s). Accepts a comma-separated list of time zones.
name- Route
- query
name - Required
- No
- Type
- string
- Details
- Filter results by partial match on name(s). Accepts a comma-separated list-- each segment is matched independently (commas in the query string separate values).
job_title- Route
- query
job_title - Required
- No
- Type
- string
- Details
- Filter results by partial match on job title(s). Accepts a comma-separated list-- each segment is matched independently (commas in the query string separate values).
company- Route
- query
company - Required
- No
- Type
- string
- Details
- Filter results by partial match on company name(s). Accepts a comma-separated list-- each segment is matched independently (commas in the query string separate values).
country- Route
- query
country - Required
- No
- Type
- string
- Details
- Filter results by exact match on two-letter country code (ISO 3166-1 alpha-2). Accepts a comma-separated list.
state- Route
- query
state - Required
- No
- Type
- string
- Details
- Filter results by exact match on state(s), province(s), or region(s). Accepts a comma-separated list of values.
city- Route
- query
city - Required
- No
- Type
- string
- Details
- Filter results by partial match on city(ies). Accepts a comma-separated list-- each segment is matched independently (commas in the query string separate values).
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
exclude- Route
- query
exclude - Required
- No
- Type
- string
- Details
- Omit the listed fields from the response. Currently only
custom_fieldsis supported. When omitted, all fields are returned.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
delete_contact
calendly-cli delete-contact · DELETE /contacts/{uuid}
contact_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
get_contact
calendly-cli get-contact · GET /contacts/{uuid}
contact_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
exclude- Route
- query
exclude - Required
- No
- Type
- string
- Details
- Omit the listed fields from the response. Currently only
custom_fieldsis supported. When omitted, all fields are returned.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
update_contact
calendly-cli update-contact · PATCH /contacts/{uuid}
contact_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
name- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
emails- Route
- Body
- Required
- No
- Type
- array
- Details
- The user's email addresses. Max 10. Warning: Updating emails will overwrite all existing emails for the contact. Use the GET endpoint to first retrieve the existing emails and then pass the modified emails to the emails array. minItems:
1. maxItems:10. Array items: object.
emails[].email- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- Email address. format:
email.
emails[].is_primary- Route
- Nested body
- Required
- Yes in body
- Type
- boolean
- Details
- Whether this is the primary email.
phone_numbers- Route
- Body
- Required
- No
- Type
- array
- Details
- The user's phone numbers. Max 10. Warning: Updating phone_numbers will overwrite all existing phone numbers for the contact. Use the GET endpoint to first retrieve the existing phone numbers and then pass the modified phone_numbers to the phone_numbers array. maxItems:
10. Array items: object.
phone_numbers[].phone_number- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- Phone number.
timezone- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
job_title- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
company- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
country- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
state- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
city- Route
- Body
- Required
- No
- Type
- string
- Details
- Current schema
linkedin- Route
- Body
- Required
- No
- Type
- string
- Details
- format:
uri.
custom_fields- Route
- Body
- Required
- No
- Type
- array
- Details
- Custom field values to set on the contact. Each item requires a
uuid(the custom field definition identifier) and avalue; any other keys (such aslabel) are ignored. The entire request is rejected if anyuuidis unknown, anyvalueis the wrong type for its field (including an array for a scalar field or a scalar for an array field), or anysingle_selectvalueis not one of the field definition's optionuuids. Array items: object.
custom_fields[].uuid- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- Unique identifier of the custom field definition.
custom_fields[].value- Route
- Nested body
- Required
- Yes in body
- Type
- JSON union
- Details
- The custom field value; the accepted type is set by the field definition's
field_type.textandsingle_selecttake a string (single_selectmust equal one of the definition's optionuuids);numbertakes a number;booleantakes a boolean;currencytakes an integer amount in the currency's minor units (the ISO currency code lives on the field definition, not on this entry);datetakes a string in ISO 8601 date format (YYYY-MM-DD);tagstakes an array of strings. Scalar fields reject array values, andtagsrejects non-array values. Exactly one of 2 schema branches; inspect schema for nested requirements.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
get_contact_custom_field_definition
calendly-cli get-contact-custom-field-definition · GET /contacts/custom_field_definitions/{uuid}
definition_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
list_contact_custom_field_definitions
calendly-cli list-contact-custom-field-definitions · GET /contacts/custom_field_definitions
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
delete_invitee_data
calendly-cli delete-invitee-data · POST /data_compliance/deletion/invitees
emails- Route
- Body
- Required
- Yes in body
- Type
- array
- Details
- Array items: string.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
delete_scheduled_event_data
calendly-cli delete-scheduled-event-data · POST /data_compliance/deletion/events
start_time- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- The scheduled events UTC timestamp at which data deletion should begin. format:
date-time.
end_time- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- The scheduled events UTC timestamp at which data deletion should end. format:
date-time.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
create_event_type
calendly-cli create-event-type · POST /event_types
active- Route
- Body
- Required
- No
- Type
- boolean
- Details
- Indicates if the event type is active or not default:
False.
owner- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- The owner for this event type format:
uri.
name- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- The event type name
description- Route
- Body
- Required
- No
- Type
- string
- Details
- The event type description
duration- Route
- Body
- Required
- No
- Type
- integer
- Details
- The length of sessions booked with this event type. Must be one of the duration options if they're provided. minimum:
1. maximum:720.
duration_options- Route
- Body
- Required
- No
- Type
- array
- Details
- A maximum of 4 unique options is allowed. Each option must be >= 1 and <= 720. Array items: integer.
locations- Route
- Body
- Required
- No
- Type
- array
- Details
- Configuration information for each possible location for this event type Array items: object.
locations[].kind- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Values:
ask_invitee,custom,google_conference,gotomeeting_conference,inbound_call,microsoft_teams_conference,outbound_call,physical,webex_conference,zoom_conference.
locations[].location- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Current schema
locations[].additional_info- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Current schema
locations[].phone_number- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Current schema
color- Route
- Body
- Required
- No
- Type
- string
- Details
- The hexadecimal color value of the event type's scheduling page pattern:
^#[a-f\d]{6}$.
locale- Route
- Body
- Required
- No
- Type
- string
- Details
- The locale on the event type, used to determine the language of the event type's scheduling page Values:
de,en,es,fr,it,nl,pt,uk.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
list_event_types
calendly-cli list-event-types · GET /event_types
active- Route
- query
active - Required
- No
- Type
- boolean
- Details
- Return only active event types if true, only inactive if false, or all event types if this parameter is omitted.
organization- Route
- query
organization - Required
- No
- Type
- string
- Details
- View available personal, team, and organization event types associated with the organization's URI. format:
uri.
user- Route
- query
user - Required
- No
- Type
- string
- Details
- View available personal, team, and organization event types associated with the user's URI. format:
uri.
user_availability_schedule- Route
- query
user_availability_schedule - Required
- No
- Type
- string
- Details
- Used in conjunction with
userparameter, returns a filtered list of Event Types that use the given primary availability schedule. format:uri.
sort- Route
- query
sort - Required
- No
- Type
- string
- Details
- Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values.Supported fields are: name, position, created_at, updated_at. Sort direction is specified as: asc, desc. default:
name:asc.
admin_managed- Route
- query
admin_managed - Required
- No
- Type
- boolean
- Details
- Return only admin managed event types if true, exclude admin managed event types if false, or include all event types if this parameter is omitted.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
create_one_off_event_type
calendly-cli create-one-off-event-type · POST /one_off_event_types
name- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- Event type name maxLength:
55.
host- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- Host user uri format:
uri.
co_hosts- Route
- Body
- Required
- No
- Type
- array
- Details
- Collection of meeting co-host(s) user URIs Array items: string.
duration- Route
- Body
- Required
- Yes in body
- Type
- number
- Details
- Duration of meeting in minutes maximum:
720.
timezone- Route
- Body
- Required
- No
- Type
- string
- Details
- Time zone used for meeting. Defaults to host's time zone.
date_setting- Route
- Body
- Required
- Yes in body
- Type
- JSON union
- Details
- Exactly one of 3 schema branches; inspect schema for nested requirements.
location- Route
- Body
- Required
- No
- Type
- JSON union
- Details
- Exactly one of 10 schema branches; inspect schema for nested requirements.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
get_event_type
calendly-cli get-event-type · GET /event_types/{uuid}
event_type_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
update_event_type
calendly-cli update-event-type · PATCH /event_types/{uuid}
event_type_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
active- Route
- Body
- Required
- No
- Type
- boolean
- Details
- Indicates if the event type is active or not
name- Route
- Body
- Required
- No
- Type
- string
- Details
- The event type name
color- Route
- Body
- Required
- No
- Type
- string
- Details
- The hexadecimal color value of the event type's scheduling page pattern:
^#[a-f\d]{6}$.
description- Route
- Body
- Required
- No
- Type
- string
- Details
- The event type description
duration- Route
- Body
- Required
- No
- Type
- integer
- Details
- The length of sessions booked with this event type. Must be one of the duration options if they're provided. minimum:
1. maximum:720.
duration_options- Route
- Body
- Required
- No
- Type
- array
- Details
- A maximum of 4 unique options is allowed. Each option must be >= 1 and <= 720. Array items: integer.
locale- Route
- Body
- Required
- No
- Type
- string
- Details
- The locale on the event type, used to determine the language of the event type's scheduling page Values:
de,en,es,fr,it,nl,pt,uk.
locations- Route
- Body
- Required
- No
- Type
- array
- Details
- Configuration information for each possible location for this Event Type Array items: object.
locations[].kind- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Values:
ask_invitee,custom,google_conference,gotomeeting_conference,inbound_call,microsoft_teams_conference,outbound_call,physical,webex_conference,zoom_conference.
locations[].location- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Current schema
locations[].additional_info- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Current schema
locations[].phone_number- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Current schema
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
list_event_type_available_times
calendly-cli list-event-type-available-times · GET /event_type_available_times
event_type- Route
- query
event_type - Required
- Yes
- Type
- string
- Details
- The uri associated with the event type format:
uri.
start_time- Route
- query
start_time - Required
- Yes
- Type
- string
- Details
- Start time of the requested availability range. Date cannot be in the past. format:
date-time.
end_time- Route
- query
end_time - Required
- Yes
- Type
- string
- Details
- End time of the requested availability range. Date must be in the future and no greater than 31 days from start_time. format:
date-time.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
list_event_type_hosts
calendly-cli list-event-type-hosts · GET /event_type_memberships
event_type- Route
- query
event_type - Required
- Yes
- Type
- string
- Details
- The uri associated with the event type format:
uri.
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
get_group
calendly-cli get-group · GET /groups/{uuid}
group_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- Group unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
get_group_relationship
calendly-cli get-group-relationship · GET /group_relationships/{uuid}
relationship_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
list_group_relationships
calendly-cli list-group-relationships · GET /group_relationships
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
organization- Route
- query
organization - Required
- No
- Type
- string
- Details
- Indicates the results should be filtered by organization format:
uri.
owner- Route
- query
owner - Required
- No
- Type
- string
- Details
- Indicates the results should be filtered by owner One Of: - Organization Membership URI -
https://api.calendly.com/organization_memberships/AAAAAAAAAAAAAAAA- Organization Invitation URI -https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA/invitations/BBBBBBBBBBBBBBBBformat:uri.
group- Route
- query
group - Required
- No
- Type
- string
- Details
- Indicates the results should be filtered by group format:
uri.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
list_groups
calendly-cli list-groups · GET /groups
organization- Route
- query
organization - Required
- Yes
- Type
- string
- Details
- Return groups that are associated with the organization associated with this URI format:
uri.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
list_user_locations
calendly-cli list-user-locations · GET /locations
user- Route
- query
user - Required
- Yes
- Type
- string
- Details
- The URI associated with the user format:
uri.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
delete_recap
calendly-cli delete-recap · DELETE /meeting_recaps/{uuid}
recap_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
get_recap
calendly-cli get-recap · GET /meeting_recaps/{uuid}
recap_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
update_recap
calendly-cli update-recap · PATCH /meeting_recaps/{uuid}
recap_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
summary_md- Route
- Body
- Required
- No
- Type
- string/null
- Details
- Summary in Markdown.
action_items_md- Route
- Body
- Required
- No
- Type
- string/null
- Details
- Action items in Markdown.
discussion_md- Route
- Body
- Required
- No
- Type
- string/null
- Details
- Discussion notes in Markdown.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
get_transcript
calendly-cli get-transcript · GET /meeting_recaps/{uuid}/transcript
recap_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The meeting recap uuid minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
list_recaps
calendly-cli list-recaps · GET /meeting_recaps
event- Route
- query
event - Required
- No
- Type
- string
- Details
- Filter results to recaps associated with a specific event scheduled via Calendly. This field corresponds to the
/scheduled_eventsendpoint. format:uri.
start_time- Route
- query
start_time - Required
- No
- Type
- string
- Details
- Return recaps for meetings that end after (or end at) this time (ISO 8601). format:
date-time.
end_time- Route
- query
end_time - Required
- No
- Type
- string
- Details
- Return recaps for meetings that start before (or start at) this time (ISO 8601). format:
date-time.
status- Route
- query
status - Required
- No
- Type
- string
- Details
- Filter by recap availability. When omitted, returns Available recaps only. -
available: completed recaps with summary content -processing: recaps still being generated -unavailable: recaps that cannot be retrieved Values:available,processing,unavailable.
attendee- Route
- query
attendee - Required
- No
- Type
- string
- Details
- Filter results to recaps that include a specific attendee email address. format:
email.
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
get_organization
calendly-cli get-organization · GET /organizations/{uuid}
org_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The organization's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
get_organization_invitation
calendly-cli get-organization-invitation · GET /organizations/{org_uuid}/invitations/{uuid}
org_uuid- Route
- path
org_uuid - Required
- Yes
- Type
- string
- Details
- The organization’s unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
invitation_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The organization invitation's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
revoke_organization_invitation
calendly-cli revoke-organization-invitation · DELETE /organizations/{org_uuid}/invitations/{uuid}
org_uuid- Route
- path
org_uuid - Required
- Yes
- Type
- string
- Details
- The organization’s unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
invitation_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The organization invitation's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
get_organization_membership
calendly-cli get-organization-membership · GET /organization_memberships/{uuid}
membership_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The organization membership's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
remove_from_organization
calendly-cli remove-from-organization · DELETE /organization_memberships/{uuid}
membership_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The organization membership's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
get_team
calendly-cli get-team · GET /teams/{team_uuid}
team_uuid- Route
- path
team_uuid - Required
- Yes
- Type
- string
- Details
- Team UUID minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
invite_to_organization
calendly-cli invite-to-organization · POST /organizations/{uuid}/invitations
org_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The organization's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
email- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- The email of the user being invited
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
list_organization_invitations
calendly-cli list-organization-invitations · GET /organizations/{uuid}/invitations
org_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The organization's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
sort- Route
- query
sort - Required
- No
- Type
- string
- Details
- Order results by the field name and direction specified (ascending or descending). Returns multiple sets of results in a comma-separated list. default:
created_at:asc.
email- Route
- query
email - Required
- No
- Type
- string
- Details
- Indicates if the results should be filtered by email address format:
email.
status- Route
- query
status - Required
- No
- Type
- string
- Details
- Indicates if the results should be filtered by status ("pending", "accepted", or "declined") Values:
pending,accepted,declined.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
list_organization_memberships
calendly-cli list-organization-memberships · GET /organization_memberships
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
email- Route
- query
email - Required
- No
- Type
- string
- Details
- Indicates if the results should be filtered by email address format:
email.
organization- Route
- query
organization - Required
- No
- Type
- string
- Details
- Indicates if the results should be filtered by organization format:
uri.
user- Route
- query
user - Required
- No
- Type
- string
- Details
- Indicates if the results should be filtered by user format:
uri.
role- Route
- query
role - Required
- No
- Type
- string
- Details
- Indicates if the results should be filtered by role Values:
owner,admin,user.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
list_teams
calendly-cli list-teams · GET /teams
user- Route
- query
user - Required
- No
- Type
- string
- Details
- Filter results to Teams associated with a specific user format:
uri.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
list_outgoing_communications
calendly-cli list-outgoing-communications · GET /outgoing_communications
organization- Route
- query
organization - Required
- Yes
- Type
- string
- Details
- Return outgoing communications from the organization associated with this URI format:
uri.
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of records to return minimum:
1. maximum:100. default:20.
min_created_at- Route
- query
min_created_at - Required
- No
- Type
- string
- Details
- Include outgoing communications that were created after this time (sample time format: "2020-01-02T03:04:05.678Z"). This time should use the UTC timezone format:
date-time.
max_created_at- Route
- query
max_created_at - Required
- No
- Type
- string
- Details
- Include outgoing communications that were created prior to this time (sample time format: "2020-01-02T03:04:05.678Z"). This time should use the UTC timezone format:
date-time.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next portion of the collection
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
get_routing_form
calendly-cli get-routing-form · GET /routing_forms/{uuid}
form_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
get_routing_form_submission
calendly-cli get-routing-form-submission · GET /routing_form_submissions/{uuid}
submission_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
list_routing_form_submissions
calendly-cli list-routing-form-submissions · GET /routing_form_submissions
form- Route
- query
form - Required
- Yes
- Type
- string
- Details
- View routing form submissions associated with the routing form's URI. format:
uri.
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
sort- Route
- query
sort - Required
- No
- Type
- string
- Details
- Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: created_at. Sort direction is specified as: asc, desc.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
list_routing_forms
calendly-cli list-routing-forms · GET /routing_forms
organization- Route
- query
organization - Required
- Yes
- Type
- string
- Details
- View organization routing forms associated with the organization's URI. format:
uri.
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
sort- Route
- query
sort - Required
- No
- Type
- string
- Details
- Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: created_at. Sort direction is specified as: asc, desc.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
cancel_event
calendly-cli cancel-event · POST /scheduled_events/{uuid}/cancellation
event_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The event's unique indentifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
reason- Route
- Body
- Required
- No
- Type
- string
- Details
- Reason for cancellation maxLength:
10000.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
create_invitee
calendly-cli create-invitee · POST /invitees
event_type- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- Canonical reference (unique identifier) for the event type being scheduled format:
uri.
start_time- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- The start time in UTC of the scheduled event format:
date-time.
invitee- Route
- Body
- Required
- Yes in body
- Type
- object
- Details
- Object requires:
email,timezone. At least one schema branch must match.
invitee.name- Route
- Nested body
- Required
- No
- Type
- string
- Details
- The full name of the invitee. Required if
first_nameis not provided
invitee.first_name- Route
- Nested body
- Required
- No
- Type
- string
- Details
- The first name of the invitee. Required if
nameis not provided
invitee.last_name- Route
- Nested body
- Required
- No
- Type
- string
- Details
- The last name of the invitee
invitee.email- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- The email of the invitee format:
email.
invitee.timezone- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- The timezone of the invitee minLength:
1.
invitee.text_reminder_number- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Invitee's phone number for SMS reminders. Must be a valid phone number (e.g. +14155551234)
location- Route
- Body
- Required
- No
- Type
- JSON union
- Details
- The polymorphic base type for an event location that Calendly supports. Note: - Location.kind must be supplied if location is defined. - Location must match location specified on the EventType. - Do not pass the location object for an EventType with a round_robin pooling_type. Exactly one of 10 schema branches; inspect schema for nested requirements.
questions_and_answers- Route
- Body
- Required
- No
- Type
- array
- Details
- Array items: object.
questions_and_answers[].question- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- A question for the invitee. String is case sensitive and must exactly match the question.
questions_and_answers[].answer- Route
- Nested body
- Required
- Yes in body
- Type
- string
- Details
- The invitee's response to the question
questions_and_answers[].position- Route
- Nested body
- Required
- Yes in body
- Type
- integer
- Details
- The position of the question in relation to others
tracking- Route
- Body
- Required
- No
- Type
- object
- Details
- The UTM and Salesforce tracking parameters associated with an Invitee Object requires:
utm_campaign,utm_source,utm_medium,utm_content,utm_term,salesforce_uuid.
tracking.utm_campaign- Route
- Nested body
- Required
- Yes in body
- Type
- string/null
- Details
- The UTM parameter used to track a campaign
tracking.utm_source- Route
- Nested body
- Required
- Yes in body
- Type
- string/null
- Details
- The UTM parameter that identifies the source (platform where the traffic originates)
tracking.utm_medium- Route
- Nested body
- Required
- Yes in body
- Type
- string/null
- Details
- The UTM parameter that identifies the type of input (e.g. Cost Per Click (CPC), social media, affiliate or QR code)
tracking.utm_content- Route
- Nested body
- Required
- Yes in body
- Type
- string/null
- Details
- UTM content tracking parameter
tracking.utm_term- Route
- Nested body
- Required
- Yes in body
- Type
- string/null
- Details
- The UTM parameter used to track keywords
tracking.salesforce_uuid- Route
- Nested body
- Required
- Yes in body
- Type
- string/null
- Details
- The Salesforce record unique identifier
event_guests- Route
- Body
- Required
- No
- Type
- array
- Details
- Emails of invitee guests. Max 10. maxItems:
10. Array items: string.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
create_no_show
calendly-cli create-no-show · POST /invitee_no_shows
invitee- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- format:
uri.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
delete_no_show
calendly-cli delete-no-show · DELETE /invitee_no_shows/{uuid}
no_show_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
get_no_show
calendly-cli get-no-show · GET /invitee_no_shows/{uuid}
no_show_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
get_event
calendly-cli get-event · GET /scheduled_events/{uuid}
event_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- The event's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
get_event_invitee
calendly-cli get-event-invitee · GET /scheduled_events/{event_uuid}/invitees/{invitee_uuid}
event_uuid- Route
- path
event_uuid - Required
- Yes
- Type
- string
- Details
- The event's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
invitee_uuid- Route
- path
invitee_uuid - Required
- Yes
- Type
- string
- Details
- The invitee's unique identifier minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
list_event_invitees
calendly-cli list-event-invitees · GET /scheduled_events/{uuid}/invitees
event_uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
status- Route
- query
status - Required
- No
- Type
- string
- Details
- Indicates if the invitee "canceled" or still "active" Values:
active,canceled.
sort- Route
- query
sort - Required
- No
- Type
- string
- Details
- Order results by the created_at field and direction specified: ascending ("asc") or descending ("desc") default:
created_at:asc.
email- Route
- query
email - Required
- No
- Type
- string
- Details
- Indicates if the results should be filtered by email address format:
email.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
list_events
calendly-cli list-events · GET /scheduled_events
user- Route
- query
user - Required
- No
- Type
- string
- Details
- Return events that are scheduled with the user associated with this URI format:
uri.
organization- Route
- query
organization - Required
- No
- Type
- string
- Details
- Return events that are scheduled with the organization associated with this URI format:
uri.
invitee_email- Route
- query
invitee_email - Required
- No
- Type
- string
- Details
- Return events that are scheduled with the invitee associated with this email address format:
email.
status- Route
- query
status - Required
- No
- Type
- string
- Details
- Whether the scheduled event is
activeorcanceledValues:active,canceled.
sort- Route
- query
sort - Required
- No
- Type
- string
- Details
- Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: start_time. Sort direction is specified as: asc, desc.
min_start_time- Route
- query
min_start_time - Required
- No
- Type
- string
- Details
- Include events with start times after this time (sample time format: "2020-01-02T03:04:05.678123Z"). This time should use the UTC timezone. format:
date-time.
max_start_time- Route
- query
max_start_time - Required
- No
- Type
- string
- Details
- Include events with start times prior to this time (sample time format: "2020-01-02T03:04:05.678123Z"). This time should use the UTC timezone. format:
date-time.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
group- Route
- query
group - Required
- No
- Type
- string
- Details
- Return events that are scheduled with the group associated with this URI format:
uri.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
create_scheduling_link
calendly-cli create-scheduling-link · POST /scheduling_links
max_event_count- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- The max number of events that can be scheduled using this scheduling link. Values:
1.
owner- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- A link to the resource that owns this Scheduling Link (currently, this is always an Event Type) format:
uri.
owner_type- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- Resource type (currently, this is always EventType) Values:
EventType.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
create_share
calendly-cli create-share · POST /shares
event_type- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- format:
uri.
name- Route
- Body
- Required
- No
- Type
- string
- Details
- maxLength:
55.
duration- Route
- Body
- Required
- No
- Type
- integer
- Details
- Must be one of the provided duration options. If duration options aren't provided then duration must be one of the duration options inherited from the event type. minimum:
1. maximum:720.
duration_options- Route
- Body
- Required
- No
- Type
- array
- Details
- A maximum of 4 unique options is allowed. Each option must be >= 1 and <= 720. Array items: integer.
period_type- Route
- Body
- Required
- No
- Type
- string
- Details
- Values:
available_moving,moving,fixed,unlimited.
start_date- Route
- Body
- Required
- No
- Type
- string
- Details
- is required when
period_typeis 'fixed' Format:YYYY-MM-DDformat:date.
end_date- Route
- Body
- Required
- No
- Type
- string
- Details
- is required when
period_typeis 'fixed' Format:YYYY-MM-DDformat:date.
max_booking_time- Route
- Body
- Required
- No
- Type
- integer
- Details
- is required when
period_typeis 'moving' or 'available_moving'
hide_location- Route
- Body
- Required
- No
- Type
- boolean
- Details
- determines if a location is hidden until invitee books a spot, only respected when there is a single custom location configured
location_configurations- Route
- Body
- Required
- No
- Type
- array
- Details
- Array items: object.
location_configurations[].location- Route
- Nested body
- Required
- No
- Type
- string
- Details
- is only supported when
kindis 'physical', 'custom' or 'ask_invitee' maxLength:255.
location_configurations[].additional_info- Route
- Nested body
- Required
- No
- Type
- string
- Details
- is only supported when
kindis 'physical' or 'inbound_call' maxLength:255.
location_configurations[].phone_number- Route
- Nested body
- Required
- No
- Type
- string
- Details
- is required when
kindis 'inbound_call'
location_configurations[].position- Route
- Nested body
- Required
- No
- Type
- integer
- Details
- Current schema
location_configurations[].kind- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Values:
physical,ask_invitee,custom,outbound_call,inbound_call,google_conference,gotomeeting_conference,microsoft_teams_conference,webex_conference,zoom_conference.
availability_rule- Route
- Body
- Required
- No
- Type
- object
- Details
- Current schema
availability_rule.rules- Route
- Nested body
- Required
- No
- Type
- array
- Details
- are required when an availability rule is provided Array items: object.
availability_rule.rules[].type- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Values:
wday,date.
availability_rule.rules[].wday- Route
- Nested body
- Required
- No
- Type
- string
- Details
- is required when
typeis 'wday' Values:sunday,monday,tuesday,wednesday,thursday,friday,saturday.
availability_rule.rules[].date- Route
- Nested body
- Required
- No
- Type
- string
- Details
- is required when
typeis 'date' Format:YYYY-MM-DDformat:date.
availability_rule.rules[].intervals- Route
- Nested body
- Required
- No
- Type
- array
- Details
- Array items: object.
availability_rule.rules[].intervals[].from- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Format:
"hh:mm"pattern:(\d\d):(\d\d).
availability_rule.rules[].intervals[].to- Route
- Nested body
- Required
- No
- Type
- string
- Details
- Format:
"hh:mm"pattern:(\d\d):(\d\d).
availability_rule.timezone- Route
- Nested body
- Required
- No
- Type
- string
- Details
- is required when an availability rule is provided
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
get_current_user
calendly-cli get-current-user · GET /users/me
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
get_user
calendly-cli get-user · GET /users/{uuid}
uuid- Route
- path
uuid - Required
- Yes
- Type
- string
- Details
- User unique identifier, or the constant "me" to reference the caller minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
create_webhook
calendly-cli create-webhook · POST /webhook_subscriptions
url- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- The URL where you want to receive POST requests for events you are subscribed to. format:
uri.
events- Route
- Body
- Required
- Yes in body
- Type
- array
- Details
- List of user events to subscribe to. minItems:
1. Array items: string.
organization- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- The unique reference to the organization that the webhook will be tied to. format:
uri.
user- Route
- Body
- Required
- No
- Type
- string
- Details
- The unique reference to the user that the webhook will be tied to. format:
uri.
group- Route
- Body
- Required
- No
- Type
- string
- Details
- The unique reference to the group that the webhook will be tied to. format:
uri.
scope- Route
- Body
- Required
- Yes in body
- Type
- string
- Details
- Indicates whether the webhook subscription scope is
organization,user, orgroupValues:organization,user,group.
signing_key- Route
- Body
- Required
- No
- Type
- string
- Details
- Optional secret key shared between your application and Calendly. See https://developer.calendly.com/api-docs/overview/webhooks/webhook-signatures for additional information.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
payload- Route
- Complete body
- Required
- Alternative
- Type
- object
- Details
- Complete current body JSON; no mixed body flags
payload_file- Route
- Complete body
- Required
- Alternative
- Type
- string
- Details
- Regular local JSON file, at most 5 MB
list_webhooks
calendly-cli list-webhooks · GET /webhook_subscriptions
organization- Route
- query
organization - Required
- Yes
- Type
- string
- Details
- The given organization that owns the subscriptions being returned. This field is always required. format:
uri.
user- Route
- query
user - Required
- No
- Type
- string
- Details
- Indicates if the results should be filtered by user. This parameter is only required if the
scopeparameter is set touser. format:uri.
group- Route
- query
group - Required
- No
- Type
- string
- Details
- Indicates if the results should be filtered by group. This parameter is only required if the
scopeparameter is set togroup. format:uri.
page_token- Route
- query
page_token - Required
- No
- Type
- string
- Details
- The token to pass to get the next or previous portion of the collection
count- Route
- query
count - Required
- No
- Type
- integer
- Details
- The number of rows to return minimum:
1. maximum:100. default:20.
sort- Route
- query
sort - Required
- No
- Type
- string
- Details
- Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: created_at. Sort direction is specified as: asc, desc.
scope- Route
- query
scope - Required
- Yes
- Type
- string
- Details
- Filter the list by organization, user, or group Values:
organization,user,group.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
all_pages- Route
- Local paging
- Required
- No
- Type
- boolean
- Details
- Bounded native page_token collection; at most 100 requests
max_items- Route
- Local paging
- Required
- No
- Type
- integer
- Details
- 1 to 10000, default 1000; requires all_pages
delete_webhook
calendly-cli delete-webhook · DELETE /webhook_subscriptions/{webhook_uuid}
webhook_uuid- Route
- path
webhook_uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
confirm- Route
- Guard
- Required
- Yes to execute
- Type
- boolean
- Details
- Explicit true for this requested mutation
get_webhook
calendly-cli get-webhook · GET /webhook_subscriptions/{webhook_uuid}
webhook_uuid- Route
- path
webhook_uuid - Required
- Yes
- Type
- string
- Details
- minLength:
1. pattern:^[A-Za-z0-9_-]+$.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
get_sample_webhook_data
calendly-cli get-sample-webhook-data · GET /sample_webhook_data
event- Route
- query
event - Required
- Yes
- Type
- string
- Details
- Values:
invitee.created,invitee.canceled,invitee_no_show.created,invitee_no_show.deleted,routing_form_submission.created,event_type.created,event_type.deleted,event_type.updated,meeting_recap.created,meeting_recap.updated,meeting_recap.deleted,contact.created,contact.updated,contact.deleted.
organization- Route
- query
organization - Required
- Yes
- Type
- string
- Details
- format:
uri.
user- Route
- query
user - Required
- No
- Type
- string
- Details
- format:
uri.
scope- Route
- query
scope - Required
- Yes
- Type
- string
- Details
- Values:
user,organization,group.
group- Route
- query
group - Required
- No
- Type
- string
- Details
- format:
uri.
account- Route
- Local
- Required
- No
- Type
- string
- Details
- Named private credential label
list_accounts
calendly-cli list-accounts lists private labels, defaults and credential method without tokens, file paths or account content. It accepts no arguments.
Complete client, OS and desktop setup
Put actual values only into private user settings. INSTALL.md ships in npm. Remote-only clients can use the official hosted MCP with supported DCR OAuth.
Claude Code
For a user-scoped connection, after privately configuring credentials:
claude mcp add --scope user calendly -- npx -y @thenavidm/calendly-mcp-cli@latest
claude mcp listUse the client's private local environment settings for the account variable if they are not inherited. Claude's -e NAME=value registration option writes values into its config; only use it locally through your secret manager, with no shared command transcript. Never place credentials in a project .mcp.json. Reconnect and ask Claude to verify credentials.
Alternatively install the CLI, make SKILL.md available to Claude, and use shell commands. Registering both surfaces is optional.
Codex
Codex is a first-class client for both surfaces. The installed Codex CLI 0.159.3 accepts the local stdio command and private environment forwarding below. No Claude Code is required.
codex mcp add calendly -- npx -y @thenavidm/calendly-mcp-cli@latest
codex mcp listAccount credentials must reach the server through private environment settings. codex mcp add --env NAME=value stores values in your local config, so never commit that config or put secrets in a shared command. In TOML, the equivalent server is:
[mcp_servers.calendly]
command = "npx"
args = ["-y", "@thenavidm/calendly-mcp-cli@latest"]
env_vars = ["CALENDLY_API_TOKEN", "CALENDLY_TOKEN_FILE", "CALENDLY_ACCESS_TOKEN", "CALENDLY_TOKENS_FILE"]env_vars forwards those names from the environment available to Codex. If that environment does not contain them, configure private env settings locally. Codex can also call the CLI directly with SKILL.md and --agent output.
Claude Desktop
Install the .mcpb extension
- Download
calendly-2.0.0.mcpbfrom GitHub Releases. - In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
- Enter a private PAT in the sensitive setting, or an absolute private token-file path. Leave the unused credential routes empty. For OAuth select the separate private JSON grant-file path.
- Enable read-only if you want only the 44 reads. Reconnect and ask for account verification.
The bundle includes production dependencies and no credentials. Use a regular private token-only file if you prefer file-based credentials. The manifest requires Node 22 or newer from a compatible host. Organization policy may restrict custom extensions. Manual bundle updates require installing the new version; no automatic directory updates are promised. GUI installation remains unverified separately from archive/protocol checks.
Manual config
Open Settings > Developer > Edit Config, or use your platform's config file:
| OS | Typical config path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json; confirm the location through Edit Config in your installed build |
{
"mcpServers": {
"calendly": {
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PRIVATE_PAT",
"CALENDLY_TOKEN_FILE": "",
"CALENDLY_ACCESS_TOKEN": "",
"CALENDLY_TOKENS_FILE": ""
}
}
}
}Replace the placeholders only in your private file. Merge the server entry into an existing mcpServers object instead of replacing other integrations. Fully quit and reopen Claude Desktop. Do not enable an extension and a manual entry with the same name; choose one route.
If a Windows launcher cannot execute npx directly, use "command": "cmd" with "args": ["/c", "npx", "-y", "@thenavidm/calendly-mcp-cli@latest"]. An absolute node executable and installed dist/index.js path also avoids launcher/PATH problems.
Cursor
Use private user settings at ~/.cursor/mcp.json, or Settings > Tools & MCP. Cursor documents environment interpolation and envFile support.
{
"mcpServers": {
"calendly": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "${env:CALENDLY_API_TOKEN}",
"CALENDLY_TOKEN_FILE": "${env:CALENDLY_TOKEN_FILE}",
"CALENDLY_ACCESS_TOKEN": "${env:CALENDLY_ACCESS_TOKEN}",
"CALENDLY_TOKENS_FILE": "${env:CALENDLY_TOKENS_FILE}"
}
}
}
}The environment values must exist for the Cursor process. If you use envFile, keep that file private and outside version control. A project's .cursor/mcp.json must not contain actual credentials. Reconnect the server after saving.
VS Code and Copilot
Use MCP: Open User Configuration. VS Code uses servers and secure inputs, rather than a mcpServers root:
{
"inputs": [
{"type": "promptString", "id": "calendly-api-key", "description": "Calendly PAT (leave empty for a private token file)", "password": true},
{"type": "promptString", "id": "calendly-token-file", "description": "Optional private token-file path (leave empty for PAT)"}
],
"servers": {
"calendly": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "${input:calendly-api-key}",
"CALENDLY_TOKEN_FILE": "${input:calendly-token-file}",
"CALENDLY_ACCESS_TOKEN": "",
"CALENDLY_TOKENS_FILE": ""
}
}
}
}Start Calendly through the MCP controls, approve trust if prompted, and enter credentials in the private input prompts. Workspace .vscode/mcp.json may contain this placeholder-only structure, but never resolved secret values. Remote development runs the server in the selected remote environment, so local file paths refer to that environment.
Windsurf
Open Cascade's MCP settings or edit the private user file ~/.codeium/windsurf/mcp_config.json. Use the Claude Desktop manual mcpServers block above with your locally configured env values. See Windsurf's current MCP documentation. Restart or reconnect Calendly in Cascade; project files must not contain secrets.
Zed
Open Settings > AI > MCP Servers > Add Server > Add Local Server, or your user settings file. Zed uses context_servers:
{
"context_servers": {
"calendly": {
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PRIVATE_PAT",
"CALENDLY_TOKEN_FILE": "",
"CALENDLY_ACCESS_TOKEN": "",
"CALENDLY_TOKENS_FILE": ""
}
}
}
}Enter actual values only in private user settings. Check the active-server indicator before prompting. Do not wrap command and args inside a nested command object from older Zed examples.
Gemini CLI
Merge the Claude Desktop manual mcpServers block into your private ~/.gemini/settings.json. Configure the private credential values locally, then restart Gemini CLI and inspect /mcp. See Gemini CLI's MCP configuration. Its project settings must not contain real credentials. You can instead use the CLI from an agent shell.
Other local stdio clients use the same command and arguments, adapted to their config format. A client that only accepts a remote MCP URL cannot connect directly: this package does not ship a public HTTP listener. ChatGPT's remote connector setup is not a substitute for local stdio installation.
Docker
Build locally from the reviewed source; no prebuilt registry image is claimed:
git clone https://github.com/thenavidm/calendly-mcp-cli.git
cd calendly-mcp-cli
docker build -t calendly-mcp-cli .
docker run --rm -i -e CALENDLY_API_TOKEN calendly-mcp-cli-e CALENDLY_API_TOKEN forwards the shell's already configured private value. MCP needs -i and stdio. For file-based tokens, mount the private token file read-only and set the absolute in-container CALENDLY_TOKEN_FILE path. Host paths do not automatically exist inside a container. PAT files are read-only and cached until restart. For OAuth, mount the private grant directory with narrowly scoped read/write access so atomic replacement and lock creation work; a read-only mount cannot rotate credentials. Do not mount a whole home directory.
Cline and other local MCP clients
Use the client's Add MCP server flow with command npx, arguments -y and @thenavidm/calendly-mcp-cli@latest, stdio transport, and private local PAT or OAuth credential settings. UI names depend on the installed client. Reconnect and discover tools before an account call. Browser-only clients need a remote HTTPS connector; use Calendly's official server rather than this local stdio command.
Command inputs, JSON and output
Tool names become dashed commands; underscores are accepted too. Path parameter names follow the discovered schema, such as event_uuid → --event-uuid. Body tools accept individual top-level flags, complete --payload JSON, or --payload-file pointing to a regular JSON body file up to 5 MB. Do not mix those body routes. Path/query flags remain separate. Nested objects take JSON and array flags repeat once per item; a whole array is not a single item.
calendly-cli get-event --help
calendly-cli schema create-invitee
calendly-cli list-events --user https://api.calendly.com/users/USER_UUID --count 10 --agent
calendly-cli list-contacts --email user@example.com --count 5 --agentUUIDs and URIs are illustrative; use resources discovered in your own account. Nullable fields require an actual JSON null inside payload; --field null is a string. Nested request properties follow the current schema; unknown top-level body fields are refused. Body-required fields are validated during execution even when the wrapper schema allows an alternative payload route. Operations whose upstream request body is required need body flags or an explicit payload; a deliberately supplied empty object is sent as JSON, never omitted.
| Flag | Behavior |
|---|---|
| --help / schema COMMAND | Current argument help / full JSON Schema |
| --json | Structured JSON |
| --compact | One-line JSON |
| --agent | Compact JSON, no prompts or color |
| --select a,b.c | Keep selected fields, including nested objects/arrays |
| --no-color / --no-input | Noninteractive house flags |
| --yes | Never replaces write confirmation |
| --confirm | Confirm only the requested mutation |
| --account NAME | Select private local credentials |
| --payload JSON / --payload-file PATH | Complete request body, mutually exclusive with body flags |
| Exit | Meaning |
|---|---|
| 0 | Success |
| 2 | Invalid arguments or refused write |
| 3 | Resource not found |
| 4 | Authentication/permission failure |
| 5 | API/transport failure |
| 7 | Rate limit |
| 10 | Missing or invalid private configuration |
Results go to stdout, errors as JSON to stderr. Selection changes local output, not the original API response or quota charge. API success is not proof of notification delivery or a completed export.
Official MCP and community comparisons
- Surface
- Hosted https://mcp.calendly.com, DCR OAuth/PKCE
- Documented scope and tradeoff
- Strong scheduling and user/organization coverage plus provider skills; no PAT/static console OAuth connection
- Surface
- Local MCP + shared CLI + desktop archive
- Documented scope and tradeoff
- 65 current REST operations plus local helper; Contacts/custom fields/Notetaker, private PAT/REST OAuth, named accounts, bounded cursors and explicit guards; local maintenance required
- Surface
- https://developer.calendly.com/_mcp/server
- Documented scope and tradeoff
- Documentation search/reference; not authenticated account scheduling
- Surface
- Community CLI + MCP
- Documented scope and tradeoff
- Documents PAT login, user/organization auto-resolution, agent JSON and scheduling commands; its current README still states a seven-day event-slot range, versus the official July 2026 change to 31
- Surface
- Community MCP
- Documented scope and tradeoff
- Documents PAT/OAuth and end-to-end booking, discovery, availability and locations; review its current implementation/permissions before use
Checked October 2, 2026. The official supported-tools table lists 34 account operations plus two skills, but this is a documentation count, not authenticated tools/list. It does not list Contacts/Notetaker in the reviewed table. It shows several paths that differ from the current REST spec (availability schedules, locations, share and routing submissions). Our API routes use the current OpenAPI; that discrepancy does not prove the official hosted MCP fails. Neither tool counts nor schema size establish task success or token savings.
No dedicated Calendly-published task CLI was identified in the reviewed official developer pages. A community CLI does exist, so we do not claim the CLI category is empty. Community scope observations are documentation/source reviews, not competitor handshakes or live booking tests. See COMPARISON.md for evidence scope and the pending matched task comparison.
Current primary sources: API reference, OpenAPI, scopes, quota, release notes and MCP tools. Original/sanitized hashes and reviewed schema corrections are in src/tools/api-source.json.
Versions and migration
- Current baseline
- 2.0.0
- Meaning
- Shared MCP/CLI, current API and guarded workflows
- Current baseline
- API v2
- Meaning
- Fixed api.calendly.com, no /v2 URL prefix
- Current baseline
- 1.0.0
- Meaning
- Document metadata, not service version
- Current baseline
- ^1.32.0
- Meaning
- Same protocol server for all surfaces
- Current baseline
- 22+
- Meaning
- CLI/manual MCP and compatible desktop runtime
- Current baseline
- 1.0.0 / 38 declared tools
- Meaning
- Manually assembled MCP-only implementation
Many old tool names remain, but use current schema arguments and routes. Path identifiers use meaningful *_uuid flags; filters use canonical full URIs. Availability updates use PATCH /event_type_availability_schedules with event_type query URI; user locations use /locations, customized links /shares, and form submissions the global resource with form filter. New Contacts/Notetaker families and current webhook scope/event rules are included. API v1 ended March 31, 2025. The July 2026 event-slot limit is 31 days; the user busy-time limit stays seven. OAuth refresh tokens have rotated once since the August 2026 deadline.
See CHANGELOG.md for exact legacy-name migration and current corrections. Preserve AGPL-3.0-or-later. Build/typecheck, 25 realistic fixture checks and actual discovery are distinct from live account outcomes, GUI installation and fresh token/task measurements. Those remain separately recorded.
Updates and removal
npm install -g @thenavidm/calendly-mcp-cli@latest
calendly-cli --version
claude mcp remove --scope user calendly
codex mcp remove calendly
npm uninstall -g @thenavidm/calendly-mcp-cliRestart @latest MCP entries to resolve the new version; a running process does not update itself. Pin a reviewed version for reproducible automation. Read CHANGELOG.md and GitHub Releases before major updates. Manually installed desktop extensions need the new versioned .mcpb installed separately. No directory-driven automatic desktop update is claimed.
Remove each manual client entry and copied skill as appropriate. Uninstalling does not revoke tokens, undo bookings, revoke OAuth grants, remove account data or reverse invitations. Revoke tokens in Calendly separately. Preserve private data before removing local private files. Do not overwrite an existing npm version to roll back.
Validation and remaining evidence
Typecheck, build, 25 behavior/shared-CLI tests and real stdio discovery pass. Full discovery exposes 66 tools; read-only exposes 44. All 22 writes require confirmation. Production dependency audit has zero findings; development-only packaging advisories are documented in SECURITY.md and excluded from runtime artifacts. Source history, npm and desktop artifacts are scanned for credentials. Public CI, fresh installation and downloaded desktop discovery are verified for the released version. Live provider account outcomes and desktop GUI installation remain separately unverified.
Codex is the current validation and measurement priority. Codex CLI 0.159.3 accepts the documented stdio registration and private environment forwarding. Neither surface requires Claude Code; other-client benchmarks are deferred. Codex-specific standing context and matched successful task measurements remain pending.
More tools for your creator business
Connect the tools needed for your requested workflow.
Calendly MCP Server & CLI FAQs
CLI and official MCP differences, private authentication, OAuth rotation, bookings, contacts, Notetaker, desktop installation and safety.
A local stdio server exposing Calendly operations to an AI client through structured tool schemas.
calendly-cli runs the same operations through the actual shared MCP implementation.
Shell agents and scripts can use it.
Yes, hosted at https://mcp.calendly.com, using DCR OAuth 2.1 and PKCE.
It is a strong scheduling option.
Local CLI use, PAT/REST OAuth grants, named accounts, Contacts/Notetaker operations, bounded pagination and explicit guards.
No overall superiority or efficiency percentage is claimed.
Yes.
The reviewed bcharleson/calendly-cli repository offers a community CLI and MCP.
No dedicated provider-published task CLI was identified in the official pages reviewed.
The wrapper preserves AGPL-3.0-or-later.
Calendly plan charges, permissions and quotas remain separate.
In your intended Calendly account, open Integrations > API and webhooks, generate a scoped token and store it privately.
Use private local settings or owner-only files outside repositories.
Never put tokens or signing keys in chats, issues or shared project configs.
No, it prints setup instructions.
Bring your own authorized REST grant; the official hosted MCP separately handles DCR OAuth in a compatible client.
A private JSON token file is required.
Rotation is locked, single-use and atomically saved.
Failed or unknown rotations require reauthorization/repair and restart, rather than repeated token use.
The versioned .mcpb bundles production dependencies and supports private sensitive PAT/file settings.
Compatible host/runtime and custom-extension policy apply; GUI installation is separately unverified.
It needs local stdio.
For remote URL clients, check the official hosted MCP and DCR compatibility.
It creates a real booking with normal calendar invites, notifications and workflows.
There is no draft booking; explicit confirmation is required.
No invented reschedule endpoint is exposed.
Use supported returned links/workflows or a separately approved cancellation/new booking.
Event-type available slots now allow up to 31 days; user busy-time queries remain capped at seven.
Both need future increasing ranges.
Supported native page_token lists have bounded all_pages, max_items and a 100-request cap.
Every page uses quota, and continuation is not a snapshot.
The result cap cut through a page.
Fetch the same token with identical filters/count and skip that many records locally.
There is no skip API flag.
It reads existing Notetaker transcript/recap data where your account provides it.
It does not record a meeting or bypass access/consent requirements.
No.
Inspect state after an unknown booking or edit outcome before repeating it.
GET retries and auth refresh do not resubmit writes.
Fresh eager/deferred MCP, skill and matched task usage measurements are pending.
No estimates or borrowed savings figures are substituted.
Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Learn more.
More MCP servers & CLIs
Related free tools
Free AI newsletterThe most actionable AI newsletter for founders
Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.
No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.
P.S. Sign up now to get free access to my ultimate AI tools guide for creators.












