Skip to main content
RapidDev - Software Development Agency
openclaw-integrationsDirect API Integration

How to Connect Calendly to OpenClaw

To integrate Calendly with OpenClaw, store your CALENDLY_API_KEY in OpenClaw's config, then configure the direct API integration to call Calendly's REST API. OpenClaw can monitor scheduled events, receive booking notifications, and manage your availability windows — all without a ClawHub skill. This is an Intermediate integration requiring a Calendly Personal Access Token from the Calendly developer portal.

What you'll learn

  • How to generate a Calendly Personal Access Token and store it as CALENDLY_API_KEY in OpenClaw
  • How to configure OpenClaw to call the Calendly REST API v2 for event monitoring
  • How to set up Calendly webhooks to push booking notifications to OpenClaw in real time
  • How to retrieve scheduled events and filter by event type, date range, and invitee
  • How to manage your Calendly availability windows through OpenClaw automation workflows
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate13 min read20 minutesCalendar & MeetingsMarch 2026RapidDev Engineering Team
TL;DR

To integrate Calendly with OpenClaw, store your CALENDLY_API_KEY in OpenClaw's config, then configure the direct API integration to call Calendly's REST API. OpenClaw can monitor scheduled events, receive booking notifications, and manage your availability windows — all without a ClawHub skill. This is an Intermediate integration requiring a Calendly Personal Access Token from the Calendly developer portal.

Why Integrate Calendly with OpenClaw?

Calendly handles the mechanics of scheduling, but acting on that scheduling data — notifying team members, updating project management tools, sending custom follow-ups, or adjusting your workload — still requires manual work. Connecting Calendly to OpenClaw closes this gap. When a meeting is booked, changed, or cancelled, OpenClaw can detect it and trigger whatever downstream actions your workflow requires.

The Calendly REST API v2 gives you full access to your scheduling data: events, event types, availability schedules, invitees, and organization members. Through OpenClaw's direct API integration, you can query this data on a schedule or react to webhook events in real time. Typical automation patterns include syncing new bookings to a CRM, posting meeting summaries to Slack, sending personalized confirmation messages, or blocking additional time on your calendar when a consultation is booked.

This is an Intermediate integration because it involves both REST API configuration and optional webhook setup, but neither requires programming experience — just careful configuration of your OpenClaw config file and the Calendly developer portal. The most common use case is monitoring incoming bookings and routing that information to other tools in your stack.

Integration method

Direct API Integration

The Calendly integration connects OpenClaw directly to Calendly's REST API v2 using a Personal Access Token. OpenClaw calls Calendly API endpoints to retrieve scheduled events, manage availability rules, and receive webhook notifications when bookings are created or cancelled. Unlike ClawHub skills, this integration requires manual API configuration in your OpenClaw config file and uses Calendly webhooks for real-time event delivery.

Prerequisites

  • OpenClaw installed and running (version 1.0 or later)
  • A Calendly account — Professional, Teams, or Enterprise plan required for API access and webhooks (free plans have limited API access)
  • A Calendly Personal Access Token from app.calendly.com/integrations/api_webhooks
  • Your Calendly user URI from the /users/me API endpoint (needed to scope API calls to your account)
  • Basic familiarity with YAML config files and HTTP APIs

Step-by-step guide

1

Generate Your Calendly Personal Access Token

Log in to your Calendly account and navigate to app.calendly.com/integrations/api_webhooks. This is Calendly's developer integrations page — it is accessible from the main navigation under Integrations > API and Webhooks. Scroll to the 'Personal Access Tokens' section and click 'Generate New Token'. Give the token a descriptive name like 'OpenClaw Integration' — this helps you identify it later if you need to revoke it. Calendly will display the token value once. Copy it immediately and store it somewhere secure — you cannot view it again after closing the dialog. The token grants access to all Calendly resources associated with your account: events, event types, availability, users, and webhooks. Treat it like a password. Calendly Personal Access Tokens do not expire automatically, but you can revoke them at any time from the same page. Also note your Calendly user URI. You can find it by making a test API call to the /users/me endpoint (shown in the next step). The URI looks like `https://api.calendly.com/users/XXXXXXXXXXXXXXXXXXX` and is required as a filter parameter for most list endpoints.

terminal
1# Test your token and get your user URI (run in terminal)
2curl -H "Authorization: Bearer YOUR_CALENDLY_API_KEY" \
3 -H "Content-Type: application/json" \
4 https://api.calendly.com/users/me
5
6# Expected response includes:
7# {
8# "resource": {
9# "uri": "https://api.calendly.com/users/XXXXXXXXXXXXXXXXXXX",
10# "name": "Your Name",
11# "email": "you@example.com",
12# ...
13# }
14# }
15
16# Copy the "uri" value you will need it for scoped API calls

Pro tip: Store your user URI alongside the API key in your OpenClaw config. Most Calendly list endpoints require `user=YOUR_USER_URI` as a query parameter — forgetting this filter returns a 403 error even with a valid token.

Expected result: You have a Calendly Personal Access Token and your user URI copied and ready to add to OpenClaw's config.

2

Configure CALENDLY_API_KEY in OpenClaw

Open your OpenClaw configuration file at `~/.openclaw/config.yaml` and add the Calendly integration block under the `integrations` key. This is a direct API integration, so it uses the `integrations` section rather than the `skills` section. The `api_key` field is your Calendly Personal Access Token. The `user_uri` field is the URI you retrieved in Step 1 — it is required to scope list endpoints to your own account. Without it, requests to list events or event types will return authorization errors. The `base_url` should always be `https://api.calendly.com` — do not change this. The `webhook_signing_key` field is optional and covered in Step 3; leave it empty for now. After saving the config file, reload OpenClaw with `openclaw reload` or restart the process. OpenClaw will validate that the API key can authenticate against the Calendly /users/me endpoint. Check the OpenClaw log for a confirmation message.

~/.openclaw/config.yaml
1# ~/.openclaw/config.yaml
2integrations:
3 calendly:
4 api_key: "YOUR_CALENDLY_PERSONAL_ACCESS_TOKEN"
5 user_uri: "https://api.calendly.com/users/XXXXXXXXXXXXXXXXXXX"
6 base_url: "https://api.calendly.com"
7 webhook_signing_key: "" # Added in Step 3 if using webhooks
8 poll_interval: 300 # Seconds between event checks when not using webhooks (default: 300)
9 lookback_days: 1 # How many past days to include in event queries (default: 0)

Pro tip: If you are on a Calendly Teams or Enterprise account, you may want to add your organization URI as well. Retrieve it from /organizations/{uuid} or check the user_uri response — it contains an `organization` field with the URI.

Expected result: The config file is saved. Running `openclaw reload` shows no config errors and the Calendly integration initializes successfully in the log.

3

Test the API Connection by Querying Scheduled Events

With the config in place, verify the integration is working by querying your upcoming Calendly events. The Calendly API's `/scheduled_events` endpoint lists all events matching filters you provide. The `user` parameter scopes results to your account. The date format for `min_start_time` and `max_start_time` is ISO 8601: `2026-03-30T00:00:00.000000Z`. The API returns events in pages of up to 100 — if you have many events, use the `next_page_token` from the response to paginate. You can also query event types to see all the different meeting types you have configured in Calendly. Event types are the templates your invitees see when booking — knowing their URIs is useful for filtering events by meeting category. Run the test commands below and confirm you see your real Calendly data returned in the JSON responses. If you see a 403, double-check that the `user` parameter matches your user URI exactly.

terminal
1# List your upcoming scheduled events (next 7 days)
2curl -H "Authorization: Bearer YOUR_CALENDLY_API_KEY" \
3 "https://api.calendly.com/scheduled_events?user=https://api.calendly.com/users/YOUR_USER_ID&min_start_time=2026-03-30T00:00:00.000000Z&max_start_time=2026-04-06T00:00:00.000000Z&sort=start_time:asc"
4
5# List your event types (meeting templates)
6curl -H "Authorization: Bearer YOUR_CALENDLY_API_KEY" \
7 "https://api.calendly.com/event_types?user=https://api.calendly.com/users/YOUR_USER_ID"
8
9# Get details on a specific scheduled event
10curl -H "Authorization: Bearer YOUR_CALENDLY_API_KEY" \
11 "https://api.calendly.com/scheduled_events/EVENT_UUID/invitees"

Pro tip: Event UUIDs in the Calendly API appear at the end of the event URI. If an event URI is `https://api.calendly.com/scheduled_events/ABCD1234`, the UUID is `ABCD1234`. Use this to look up invitee details for a specific meeting.

Expected result: The API returns a JSON list of your upcoming Calendly events with invitee names, times, and event type information.

4

Set Up Calendly Webhooks for Real-Time Notifications

Polling the API every few minutes works for scheduled summaries, but if you need OpenClaw to react immediately when a meeting is booked or cancelled, configure Calendly webhooks. Calendly will POST a payload to your OpenClaw webhook URL within seconds of each scheduling event. Webhooks require OpenClaw to be running in server mode with an accessible HTTP endpoint. If OpenClaw is running locally behind a router, you will need to expose it via a public URL — tools like ngrok, Cloudflare Tunnel, or a VPS deployment give you a stable public address. Create the webhook subscription via the Calendly API. The `url` parameter is your OpenClaw webhook endpoint. The `events` array specifies which Calendly events trigger the webhook — `invitee.created` fires on new bookings, `invitee.canceled` fires on cancellations. Calendly will provide a signing key in the response — add this to your OpenClaw config as `webhook_signing_key` to verify that payloads are genuinely from Calendly. For complex webhook workflows, RapidDev's team can help design multi-step automation flows that combine Calendly webhook data with other integrations in your OpenClaw stack.

terminal
1# Create a Calendly webhook subscription
2curl -X POST \
3 -H "Authorization: Bearer YOUR_CALENDLY_API_KEY" \
4 -H "Content-Type: application/json" \
5 -d '{
6 "url": "https://your-openclaw-endpoint.example.com/webhooks/calendly",
7 "events": ["invitee.created", "invitee.canceled"],
8 "organization": "https://api.calendly.com/organizations/YOUR_ORG_UUID",
9 "user": "https://api.calendly.com/users/YOUR_USER_UUID",
10 "scope": "user"
11 }' \
12 https://api.calendly.com/webhook_subscriptions
13
14# List existing webhook subscriptions
15curl -H "Authorization: Bearer YOUR_CALENDLY_API_KEY" \
16 "https://api.calendly.com/webhook_subscriptions?organization=https://api.calendly.com/organizations/YOUR_ORG_UUID&scope=user"
17
18# Example Calendly webhook payload (invitee.created):
19# {
20# "event": "invitee.created",
21# "payload": {
22# "event_type": { "name": "30 Minute Meeting", ... },
23# "invitee": { "name": "Jane Doe", "email": "jane@example.com", ... },
24# "scheduled_event": { "start_time": "2026-04-01T14:00:00Z", ... }
25# }
26# }

Pro tip: Calendly sends a signing key in the webhook subscription response. Add it to `webhook_signing_key` in your config immediately — OpenClaw uses it to validate that incoming webhook payloads actually came from Calendly and reject forged requests.

Expected result: Calendly shows the webhook subscription as active and sends test notifications to your OpenClaw endpoint when test bookings are created.

5

Build an Automated Booking Response Workflow

With event data flowing into OpenClaw via webhooks or polling, configure an automation workflow that reacts to new bookings. The pattern is: receive the Calendly event payload, extract invitee details (name, email, event type, scheduled time), then trigger downstream actions. A simple starting workflow posts a Slack message or sends an email when a new booking arrives. A more complex workflow might look up the invitee email in your CRM, add meeting notes to Notion, and send the invitee a personalized pre-meeting questionnaire — all triggered by a single Calendly booking. The OpenClaw workflow config uses the Calendly integration as the trigger source, specifying which event types activate the workflow. The `payload` fields from the Calendly webhook are available as template variables in the actions block. Test the workflow by creating a real test booking through your Calendly link with a test email address. Verify the automation fires correctly before routing real invitees through it.

~/.openclaw/config.yaml
1# ~/.openclaw/config.yaml booking notification workflow
2workflows:
3 calendly-booking-notify:
4 trigger:
5 integration: calendly
6 event: invitee.created
7 actions:
8 - type: log
9 message: "New Calendly booking: {{payload.invitee.name}} ({{payload.invitee.email}}) for {{payload.event_type.name}} at {{payload.scheduled_event.start_time}}"
10
11 calendly-cancellation-alert:
12 trigger:
13 integration: calendly
14 event: invitee.canceled
15 actions:
16 - type: log
17 message: "Cancelled: {{payload.invitee.name}} cancelled {{payload.event_type.name}} scheduled for {{payload.scheduled_event.start_time}}"

Pro tip: Use the `conditions` key in the trigger block to filter workflows by event type name — for example, only trigger the high-touch follow-up workflow for 'Strategy Call' event types, not for quick 15-minute check-ins.

Expected result: OpenClaw logs new bookings and cancellations from Calendly and executes the configured downstream actions for each scheduling event.

Common use cases

New Booking Notifications and CRM Sync

Automatically detect when someone books a meeting through your Calendly link and trigger downstream actions — log the invitee details to a CRM, post a notification to your team's Slack channel, or send the new contact a personalized pre-meeting email. OpenClaw processes the webhook payload and routes the booking data to wherever it needs to go.

OpenClaw Prompt

Build an OpenClaw config that listens for Calendly booking webhooks and posts new meeting details — name, email, event type, and time — to a specified endpoint when a booking is created

Copy this prompt to try it in OpenClaw

Daily Scheduling Overview

Pull a summary of today's and tomorrow's Calendly bookings each morning. OpenClaw queries the Calendly API for scheduled events in a date range, formats a readable summary, and delivers it through your preferred channel — useful for starting each day with a clear picture of your meeting load.

OpenClaw Prompt

Configure OpenClaw to query Calendly for all events scheduled in the next 48 hours and format a daily briefing with invitee names, event types, and start times

Copy this prompt to try it in OpenClaw

Availability Management Automation

Adjust your Calendly availability windows programmatically. When your workload changes — a project deadline, travel, or a high-priority week — OpenClaw can update your scheduling rules via the API rather than requiring manual edits in the Calendly dashboard. Pair this with calendar events to block availability automatically.

OpenClaw Prompt

Set up an OpenClaw workflow that checks my current Calendly event load for the next 7 days and blocks off availability if more than 8 meetings are already scheduled

Copy this prompt to try it in OpenClaw

Troubleshooting

API calls return 403 Forbidden even though the token appears valid

Cause: The most common cause is a missing or incorrect `user` parameter in the request URL. Most Calendly list endpoints require you to scope the request to your user URI — without it, Calendly denies the request even with a valid token.

Solution: Verify your user URI by calling `/users/me` first. Then ensure every list endpoint call includes `?user=https://api.calendly.com/users/YOUR_USER_UUID` as a query parameter. The URI must be URL-encoded if embedded in a larger query string.

typescript
1# Always include the full user URI as a query parameter:
2curl -H "Authorization: Bearer YOUR_CALENDLY_API_KEY" \
3 "https://api.calendly.com/scheduled_events?user=https://api.calendly.com/users/YOUR_USER_UUID"

OpenClaw config shows 'invalid api_key' or 401 Unauthorized on startup

Cause: The CALENDLY_API_KEY value in your config is incorrect, has been revoked, or was copied with extra whitespace or line breaks.

Solution: Go to app.calendly.com/integrations/api_webhooks and verify the token still exists and is active. If you cannot view the token value, generate a new one — tokens are only shown once at creation. Update `~/.openclaw/config.yaml` with the new token and ensure there are no leading or trailing spaces.

typescript
1# Test the token directly before adding to config:
2curl -H "Authorization: Bearer PASTE_TOKEN_HERE" \
3 https://api.calendly.com/users/me
4# Returns 200 if valid, 401 if not

Webhook payloads arrive but OpenClaw rejects them with 'invalid signature'

Cause: The `webhook_signing_key` in OpenClaw's config does not match the signing key Calendly provided when the webhook subscription was created.

Solution: Retrieve the signing key from the webhook subscription details via the Calendly API (`GET /webhook_subscriptions/WEBHOOK_UUID`). If you cannot recover the original key, delete the subscription and create a new one — the new creation response will include a fresh signing key. Update `webhook_signing_key` in your OpenClaw config.

typescript
1# Get webhook subscription details to find the signing key:
2curl -H "Authorization: Bearer YOUR_CALENDLY_API_KEY" \
3 "https://api.calendly.com/webhook_subscriptions/YOUR_WEBHOOK_UUID"

clawhub update or integration reload returns a 429 rate limit error

Cause: Calendly's REST API enforces rate limits — the free API tier allows 110 requests per minute. Polling at too-short intervals or making many requests during setup can exhaust this limit.

Solution: Increase the `poll_interval` in your OpenClaw config to at least 60 seconds (300 recommended for non-time-critical workflows). If you are hitting rate limits during initial setup, wait 60 seconds and retry. For high-frequency needs, use webhooks instead of polling — webhooks do not count against your rate limit.

typescript
1# In ~/.openclaw/config.yaml, increase poll interval:
2integrations:
3 calendly:
4 poll_interval: 300 # 5 minutes safe for most workflows

Best practices

  • Use webhooks over polling for any workflow where booking notifications need to arrive within seconds — polling at 5-minute intervals creates noticeable delays that degrade the user experience of automated responses.
  • Always store your user URI in the OpenClaw config alongside the API key — forgetting to include it as a query parameter is the single most common source of 403 errors with the Calendly API.
  • Generate a dedicated Calendly API token named specifically for OpenClaw so you can revoke it independently if needed without disrupting other integrations or tools connected to your Calendly account.
  • Validate webhook payloads using the `webhook_signing_key` — Calendly signs all webhook payloads and OpenClaw can verify authenticity, protecting your workflows from forged booking events.
  • Test your workflows with a real booking using a personal test email before routing real customers through the integration — this catches formatting issues in notification messages and confirms downstream actions fire correctly.
  • Set appropriate `lookback_days` in your config for polling workflows — a value of 1 catches any events that may have been missed during downtime without processing months of historical data on every poll cycle.
  • For Teams or Enterprise accounts, use organization-scoped API calls when building workflows that need visibility across multiple team members' calendars, not just your own.

Alternatives

Frequently asked questions

How do I set up Calendly integration in OpenClaw?

Generate a Personal Access Token at app.calendly.com/integrations/api_webhooks, then add it as `api_key` under the `calendly` key in `~/.openclaw/config.yaml`. Also retrieve your user URI from the `/users/me` endpoint and store it in the config. Reload OpenClaw with `openclaw reload` to activate the integration.

What is the CALENDLY_API_KEY and where do I find it?

CALENDLY_API_KEY is a Calendly Personal Access Token — a long alphanumeric string that authenticates API requests as your Calendly account. Generate it at app.calendly.com/integrations/api_webhooks under the 'Personal Access Tokens' section. Calendly only shows the token value once at creation, so copy it immediately.

Does the Calendly OpenClaw integration require a paid Calendly plan?

Yes — Calendly API access and webhooks require a Professional, Teams, or Enterprise plan. The free Calendly plan does not include API access. Check your plan at app.calendly.com/account/billing before attempting the integration.

Why is my OpenClaw Calendly integration not receiving webhook notifications?

Common causes include: the OpenClaw webhook endpoint is not publicly accessible (check firewall and URL), the webhook subscription was not created via the Calendly API, or the `webhook_signing_key` in your config is wrong causing OpenClaw to reject valid payloads. Verify the subscription exists by calling `GET /webhook_subscriptions` with your API key.

How do I monitor all Calendly events across a team, not just my own?

Use organization-scoped API calls with your organization URI instead of your user URI. Retrieve your organization URI from the `/users/me` response — it appears in the `current_organization` field. Replace `user=` with `organization=` in API queries and use `scope: organization` when creating webhook subscriptions.

Can RapidDev help with complex Calendly OpenClaw workflows?

Yes — RapidDev's team specializes in OpenClaw integration workflows and can help design multi-step automations that chain Calendly events with CRM updates, email sequences, and team notifications. The integration itself is straightforward, but connecting multiple systems together in a reliable pipeline is where expert guidance saves significant time.

What Calendly events can OpenClaw react to via webhooks?

The Calendly API supports two webhook event types: `invitee.created` (fires when someone books a meeting through your Calendly link) and `invitee.canceled` (fires when a booking is cancelled by the invitee or by you). Both events include full payload details about the invitee, event type, and scheduled time.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.