Create Booking
cal.create_booking
ActionBusiness appsconnection required
Calls the Cal.com API with the connection's credentials.
Book a slot on an event type for an attendee, returning the booking Cal.com created.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- API key
- Providers
- Cal.com
- Secret shape
- the Cal.com API key (cal_live_… / cal_test_…), or {"api_key": "…"}
- Config it needs
- base_url
- Resolved by
- config.connection_id, else node.connection_id
Configuration
11 fields, 2 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
start When the booking starts, ISO-8601 in UTC. Must be a slot Cal.com currently offers for this event type. | string | Yes | — | iso8601 format | 2026-08-13T09:00:00Z |
attendee The person being booked, as a JSON object. Cal.com requires name and timeZone; include email for the confirmation mail, and language for a localised one. | object | Yes | — | — | {"email":"john.doe@example.com","language":"en","name":"John Doe","timeZone":"America/New_York"} |
event_type_id Numeric id of the event type. Use this or event_type_slug, not both. | string | No | — | — | 100 |
event_type_slug Slug of the event type, e.g. intro-call. Needs username or team_slug alongside it so Cal.com knows whose event type it is. | string | No | — | — | intro-call |
username Cal.com username that owns the event type named by event_type_slug. | string | No | — | — | alice |
team_slug Team slug that owns the event type named by event_type_slug. | string | No | — | — | sales |
guests Extra guest email addresses to add to the invite, as a JSON array of strings. | array | No | — | array of string | — |
location Which of the event type's locations to use, as the JSON object Cal.com's booking schema defines (for example {"type": "attendeePhone", "phone": "+12025550123"}). | object | No | — | — | {"phone":"+12025550123","type":"attendeePhone"} |
metadata Free-form key/value metadata stored on the booking. Cal.com allows at most 50 keys of up to 40 characters each. | object | No | — | — | — |
booking_fields_responses Answers to the event type's custom booking fields, keyed by field slug. | object | No | — | — | — |
length_in_minutes Book one of a multi-duration event type's lengths. Leave empty for its default. The 1-1440 range here is a sanity bound, not a Cal.com rule. | number | No | — | 1–1440 | — |
- At least one of event_type_id, event_type_slug must be set.
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"attendee": {
"email": "john.doe@example.com",
"language": "en",
"name": "John Doe",
"timeZone": "America/New_York"
},
"event_type_id": "100",
"event_type_slug": "intro-call",
"location": {
"phone": "+12025550123",
"type": "attendeePhone"
},
"start": "2026-08-13T09:00:00Z",
"team_slug": "sales",
"username": "alice"
}Output
One shape.
result
| Field | Type | Example |
|---|---|---|
booking The booking Cal.com returned, with id, uid, title, status, start, end, duration, eventTypeId, attendees and hosts. Empty when the uid named a recurring booking — see recurrences. | object | — |
recurrences Every occurrence, when the uid named a recurring booking. Empty for a normal booking. | array | — |
is_recurring True when Cal.com answered with a list of occurrences rather than a single booking, so the next node reads the right key. | boolean | false |
count How many bookings this result carries. | number | 1 |
{
"booking": {},
"count": 1,
"is_recurring": false,
"recurrences": []
}Notes
- Name the event type either by event_type_id, or by event_type_slug together with username or team_slug.
- A recurring event type answers with every occurrence, so read recurrences rather than booking.
See Create Booking run in a workflow.
In a technical demo we add the Cal.com connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.