DEV Community

Alex Spinov
Alex Spinov

Posted on

Calendly Has a Free Scheduling API — Let People Book Meetings Without the Email Ping-Pong

Calendly Has a Free Scheduling API — Let People Book Meetings Without the Email Ping-Pong

"When are you free?" "How about Tuesday at 2?" "That doesn't work, what about Thursday?" Calendly eliminates this entire conversation — share a link, they pick a time, it's on the calendar.

Free Tier

  • 1 event type (e.g., "30-min meeting")
  • Unlimited bookings
  • Calendar integration (Google, Outlook, iCloud)
  • Automatic timezone detection
  • Email notifications
  • Embed on your website

Embedding on Your Website

<!-- Inline embed -->
<div class="calendly-inline-widget" 
     data-url="https://calendly.com/your-name/30min"
     style="min-width:320px;height:700px;">
</div>
<script src="https://assets.calendly.com/assets/external/widget.js"></script>

<!-- Popup button -->
<link href="https://assets.calendly.com/assets/external/widget.css" rel="stylesheet">
<script src="https://assets.calendly.com/assets/external/widget.js"></script>
<button onclick="Calendly.initPopupWidget({url: 'https://calendly.com/your-name/30min'})">
  Schedule a Call
</button>
Enter fullscreen mode Exit fullscreen mode

REST API (v2)

// Get scheduled events
const response = await fetch(
  'https://api.calendly.com/scheduled_events?user=https://api.calendly.com/users/YOUR_ID',
  {
    headers: { 'Authorization': 'Bearer your-token' }
  }
);
const { collection } = await response.json();
collection.forEach(event => {
  console.log(event.name, event.start_time, event.status);
});

// Get event invitees
const invitees = await fetch(
  \`https://api.calendly.com/scheduled_events/\${eventId}/invitees\`,
  {
    headers: { 'Authorization': 'Bearer your-token' }
  }
);
Enter fullscreen mode Exit fullscreen mode

Webhooks

// Receive booking notifications
app.post('/webhooks/calendly', (req, res) => {
  const { event, payload } = req.body;

  if (event === 'invitee.created') {
    console.log('New booking!');
    console.log('Name:', payload.name);
    console.log('Email:', payload.email);
    console.log('Time:', payload.scheduled_event.start_time);
    // Send to CRM, trigger onboarding email, etc.
  }

  if (event === 'invitee.canceled') {
    console.log('Booking canceled:', payload.email);
    // Update CRM, send follow-up, etc.
  }

  res.sendStatus(200);
});
Enter fullscreen mode Exit fullscreen mode

The Bottom Line

Calendly turns scheduling from a multi-email negotiation into a one-click action. The free tier with unlimited bookings is enough for freelancers, consultants, and small teams.


Need to extract scheduling data, monitor availability patterns, or build booking automation? I create custom solutions.

📧 Email me: spinov001@gmail.com
🔧 My tools: Apify Store

Top comments (0)