Book a meeting
Books a free time for someone, who gets a confirmation email with an invite and a link to change it.
$0.01 a call
From your agent’s balance. A call that fails costs nothing.
An example
Book Rachel Kim in for the 11:30 bike fitting on Saturday the 24th. Her email is on her contact card.
Your agent callscalendar_book$0.01 a call
The example business is Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon. The reply is the one the tool really gives.
{
"meeting_type": "bike-fitting",
"start": "2026-10-24T11:30:00-07:00",
"name": "Rachel Kim",
"email": "rachel.kim@example.com",
"timezone": "America/Los_Angeles"
}Use it when
Someone asked the agent to book them a meeting, by chat, email or phone.
- For a meeting that is already booked and should move, use
calendar_move.
What it does
Book a free time (from calendar_find_times) for someone. They get a confirmation email with a calendar invite and a link to reschedule or cancel (if you give their email), and so do their guests (without the link). A round-robin type picks the host by its rules unless you name one. Set confirmation_call_agreed only if the person agreed to a call before the meeting asking whether they can still come.
What comes back
The booking: booking_id, reference, status, meeting type, start and end, the attendee's local time and details, the hosts and guests, answers, location, how it was booked, a manage link and the confirmation call. Every reply also carries cost_usd and balance_usd.
Inputs
| Name | Type | What it is |
|---|---|---|
meeting_typeRequired | string | Its slug, or "<person's address>/<slug>". |
person | string | The meeting type is on this person's own calendar. Up to 254 characters. |
host | string | A round-robin type: give it to this host (they must be free then). Up to 254 characters. |
startRequired | string (date-time) | |
nameRequired | string | 1 to 120 characters. |
email | string | Up to 254 characters. |
phone | string | Up to 30 characters. |
guests | array of strings | More people to invite, by email. Up to 10 items. |
timezone | string | The attendee's IANA time zone. Up to 80 characters. |
answers | object | Answers to the meeting type's questions, by key. |
confirmation_call_agreed | boolean | Default: false. |
notify | boolean | Email the attendee, the guests and the hosts (or the owner). Default: true. |
The call
Over MCP, call calendar_book on https://api.conecto.chat/mcp/calendar. Over REST:
curl -X POST https://api.conecto.chat/v1/tools/calendar_book \
-H "Authorization: Bearer $CONECTO_KEY" \
-H "Content-Type: application/json" \
-d '{"meeting_type":"bike-fitting","start":"2026-10-24T11:30:00-07:00","name":"Rachel Kim","email":"rachel.kim@example.com","timezone":"America/Los_Angeles"}'When it refuses
A refused call costs nothing and says what to do next.
| Code | When | What to do |
|---|---|---|
not_set_up404 | The business has no calendar yet. | Create it with calendar_setup, then call again. |
not_found404 | No meeting type has that slug. | Call calendar_list_meeting_types and use one of its slugs. |
time_taken409 | That time is not free: taken, outside the hours, too soon or too far ahead. | Pick a start from calendar_find_times; the message lists free times nearby. |
inactive409 | The meeting type is switched off. | Switch it on with calendar_save_meeting_type and active: true, or book another type. |
invalid_input400 | The name, email, phone, an answer or the time is missing or not valid. | Fix what the message names: phones in international form like +15035550123, times with their offset. |
payment_required_for_outbound402 | The balance is still free credit, which cannot email people outside the business. | Top up once (POST /v1/topups), or book with notify: false. |
new_recipient_limit429 | The business has emailed as many new addresses today as it may. | Book with notify: false and tell the person yourself, or book tomorrow. |
not_a_host400 | host is not one of the meeting type's round-robin hosts. | Leave host out to let the round robin pick, or name one of its hosts. |
sending_paused403 | Email from the business is paused, so the attendee cannot be emailed. | Call again with notify: false, and ask the owner to contact Conecto about the pause. |
suppressed422 | The attendee's address bounced, complained or unsubscribed before. | Call again with notify: false, or use another address for them. |
More Calendar tools
All 13 tools- Set up the calendar
calendar_setupSets the business's calendar or a person's own: name, booking address, time zone, weekly hours, closed days, reminder emails and confirmation calls.$0.001 a call - Get the calendar setup
calendar_get_setupThe calendar's settings, booking page, iCal link, connected Google calendar, meeting types, and its people's own calendars.Free* - Connect Google Calendar
calendar_connectA link that opens a page naming the business, where the owner, or a person for their own page, connects Google Calendar in one click.Free* - Save a meeting type
calendar_save_meeting_typeCreates or changes a kind of meeting people can book, on the business's calendar or a person's, taken by one host, a round robin or everyone.$0.001 a call - List meeting types
calendar_list_meeting_typesEvery meeting type people can book, the business's and each person's own, with its hosts and booking page.Free* - Find free times
calendar_find_timesFree start times for a meeting type between two dates, in the time zone you ask for.Free* - List bookings
calendar_list_bookingsBookings between two times (from now on by default), soonest first, with each one's hosts, guests and confirmation call.Free* - Move a meeting
calendar_moveMoves a booking to another free time and sends the attendee an updated invite.$0.01 a call
Give this to your agent.
Set up Conecto from https://conecto.chat/SKILL.md