Overview
Build scheduling and booking experiences with the Transactional Calendar API.
What is Calendar?
Transactional Calendar is a complete scheduling infrastructure that lets you add booking capabilities to any application. Create event types, manage availability, and let customers book time with your team.
Why Calendar?
Modern Scheduling Infrastructure
- Embeddable booking - Drop booking widgets into any website
- Flexible availability - Define complex schedules and overrides
- Team scheduling - Round-robin, collective, and pooled events
- Calendar sync - Two-way sync with Google, Outlook, Apple
Built for Developers
- Simple API - RESTful endpoints with comprehensive SDKs
- Webhooks - Real-time notifications for all booking events
- White-label - Full customization of booking experience
- Multi-tenant - Each organization has isolated calendars
Core Concepts
Event Types
Event types define what can be booked:
const eventType = await client.calendar.eventTypes.create({
title: '30-minute Consultation',
slug: 'consultation-30',
duration: 30,
description: 'Quick consultation call',
location: { type: 'GOOGLE_MEET' },
});Availability
Schedules define when bookings can happen:
const schedule = await client.calendar.schedules.create({
name: 'Work Hours',
timezone: 'America/New_York',
availability: [
{ day: 'MONDAY', startTime: '09:00', endTime: '17:00' },
{ day: 'TUESDAY', startTime: '09:00', endTime: '17:00' },
{ day: 'WEDNESDAY', startTime: '09:00', endTime: '17:00' },
{ day: 'THURSDAY', startTime: '09:00', endTime: '17:00' },
{ day: 'FRIDAY', startTime: '09:00', endTime: '17:00' },
],
});Bookings
When customers book time:
const booking = await client.calendar.bookings.create({
eventTypeId: 'evt_xxx',
startTime: '2024-01-15T10:00:00Z',
attendee: {
name: 'John Doe',
email: 'john@example.com',
},
});Key Features
Scheduling Logic
| Feature | Description |
|---|---|
| Buffer time | Add breaks between meetings |
| Minimum notice | Prevent same-day bookings |
| Maximum advance | Limit how far ahead users can book |
| Slot intervals | Control booking slot granularity |
Team Features
| Feature | Description |
|---|---|
| Round-robin | Distribute meetings evenly |
| Collective | Require all team members |
| Group events | Allow multiple attendees |
Integrations
| Platform | Features |
|---|---|
| Google Calendar | Two-way sync, Meet links |
| Outlook/Office 365 | Two-way sync, Teams links |
| Apple Calendar | CalDAV sync |
| Zoom | Automatic meeting links |
Architecture
Your Application
↓
Transactional Calendar
Scheduling
Availability
Reminders
↓
Google Calendar
Outlook
Apple
Use Cases
SaaS Platforms
Add scheduling to your product:
- Customer success calls
- Demo bookings
- Support appointments
- Onboarding sessions
Marketplaces
Connect service providers with customers:
- Consultations
- Coaching sessions
- Professional services
Healthcare
Medical appointment scheduling:
- Patient appointments
- Telehealth visits
- Follow-up scheduling
Education
Academic scheduling:
- Office hours
- Tutoring sessions
- Parent-teacher meetings
Getting Started
- Create an event type - Define what can be booked
- Set up availability - Configure when bookings are allowed
- Connect calendars - Sync with existing calendars
- Embed or integrate - Add booking to your application
- Handle webhooks - React to booking events
Quick Example
import { Transactional } from '@usetransactional/node';
const client = new Transactional({ apiKey: 'tr_live_xxx' });
// 1. Create an event type
const eventType = await client.calendar.eventTypes.create({
title: 'Product Demo',
slug: 'demo',
duration: 45,
location: { type: 'ZOOM' },
});
// 2. Get available slots
const slots = await client.calendar.availability.get({
eventTypeId: eventType.id,
startDate: '2024-01-15',
endDate: '2024-01-22',
});
// 3. Create a booking
const booking = await client.calendar.bookings.create({
eventTypeId: eventType.id,
startTime: slots.available[0].startTime,
attendee: {
name: 'Jane Smith',
email: 'jane@company.com',
},
});
console.log('Booking confirmed:', booking.uid);
console.log('Meeting link:', booking.meetingUrl);Next Steps
- Quickstart - Get up and running in 5 minutes
- Event Types - Configure bookable events
- Availability - Set up schedules