Save a meeting type
Creates 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
From your agent’s balance. A call that fails costs nothing.
An example
Add a 45-minute bike fitting in the workshop on Saturdays, and ask people for their height when they book.
Your agent callscalendar_save_meeting_type$0.001 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.
{
"slug": "bike-fitting",
"title": "Bike fitting",
"length_minutes": 45,
"location": {
"kind": "in_person",
"value": "Halverson Cycle & Repair, 1830 SE Ash St, Portland, OR 97214"
},
"buffer_after": 15,
"hours": [
{
"day": "saturday",
"start": "10:00",
"end": "16:00"
}
],
"questions": [
{
"label": "Your height in inches",
"type": "number",
"required": false
}
]
}Use it when
The business offers a new kind of appointment, an appointment's length, place, hours or questions change, a kind of meeting should go to whichever of several people is free, or each booking should get a Google Meet room of its own (location kind google_meet).
- For the calendar's own hours, time zone and closed days, use
calendar_setup.
What it does
Create or change a kind of meeting people can book, like a Cal.com event type. It gets its own booking page. Only the fields you pass change. With person it is on that person's own calendar. A business type can be hosted by people like a Cal.com team event, once you choose how (there is no default): round_robin gives each booking to one host free then (the highest priority, then the fewest of this type that month for their weight, then whoever was booked longest ago; fixed hosts join every meeting), collective needs every host free and invites them all. Hosts use their own calendars' hours and Google calendars, unless the type sets hours of its own. Each host keeps their own page, which lists the business types they take; a round robin booked there goes to them. Location kinds: video (a link), phone (we call the attendee), call_us (they call a number), in_person (an address), custom.
What comes back
The meeting type as saved: slug, title, length, location, buffers, notice, days ahead, hours, questions, phone and confirmation-call options, whether it is active and its booking URL; for a hosted type its hosts, each with their own link to it. Every reply also carries cost_usd and balance_usd.
Inputs
| Name | Type | What it is |
|---|---|---|
slugRequired | string | Its address on the booking page, e.g. "intro-call". Matches ^[a-z0-9][a-z0-9-]{0,59}$. |
person | string | Put it on this person's own calendar (their email) instead of the business's. Up to 254 characters. |
title | string | 1 to 120 characters. |
description | string | Up to 2,000 characters. |
length_minutes | integer | 5 to 480. |
location | object | Where it happens. google_meet gives each booking a Google Meet room of its own once the calendar that takes it is connected to Google (a video link on meet.google.com does the same); video is one fixed link, phone means you call them, call_us your number in value, in_person an address. |
location.kind | string | One of: ,video,google_meet,phone,call_us,in_person,custom. |
location.value | string | Up to 500 characters. |
assignment | string | How a business type's hosts take its bookings, required with hosts (no default): round_robin or collective; "" takes the hosts off, back to the business's own calendar. One of: ,round_robin,collective. |
hosts | array of objects | The people who take its bookings, replacing the list. Each is on the account; their calendar is made with their name if they have none. Up to 50 items. |
hosts[].personRequired | string | Up to 254 characters. |
hosts[].fixed | boolean | In every meeting (round robin). |
hosts[].priority | string | Round robin: higher goes first (default medium). One of: lowest,low,medium,high,highest. |
hosts[].weight | integer | Round robin: 200 takes twice the share of 100 (default 100). 1 to 1,000. |
buffer_before | integer | 0 to 240. |
buffer_after | integer | 0 to 240. |
notice_minutes | integer | Minimum notice before a booking. 0 to 43,200. |
days_ahead | integer | 1 to 365. |
slot_interval | integer | Minutes between possible start times (default: the length). 5 to 480. |
max_per_day | integer | The most of this type a day; for a hosted type, each host's most. 1 to 200. |
hours | array of objects | Its own weekly hours; leave out to use the calendar's (for hosts, each one's own). Up to 50 items. |
hours[].dayRequired | string | One of: monday,tuesday,wednesday,thursday,friday,saturday,sunday. |
hours[].startRequired | string | Matches ^([01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$. |
hours[].endRequired | string | Matches ^([01][0-9]|2[0-3]):[0-5][0-9]$|^24:00$. |
questions | array of objects | Extra questions on the booking form: {label, type: text|long_text|select|checkbox|number|email|phone, required, options}. Up to 20 items. |
ask_phone | string | One of: off,optional,required. |
offer_confirmation_call | boolean | Offer "call me the day before to confirm" on the form. |
phone_assistant_books_this | boolean | What the phone assistant books when a caller asks (a business type). |
active | boolean |
The call
Over MCP, call calendar_save_meeting_type on https://api.conecto.chat/mcp/calendar. Over REST:
curl -X POST https://api.conecto.chat/v1/tools/calendar_save_meeting_type \
-H "Authorization: Bearer $CONECTO_KEY" \
-H "Content-Type: application/json" \
-d '{"slug":"bike-fitting","title":"Bike fitting","length_minutes":45,"location":{"kind":"in_person","value":"Halverson Cycle & Repair, 1830 SE Ash St, Portland, OR 97214"},"buffer_after":15,"hours":[{"day":"saturday","start":"10:00","end":"16:00"}],"questions":[{"label":"Your height in inches","type":"number","required":false}]}'When it refuses
A refused call costs nothing and says what to do next.
| Code | When | What to do |
|---|---|---|
not_set_up404 | The calendar, or a host's own calendar, is not set up yet and the account has no name for them. | Run calendar_setup (with person and name for a host), then call again. |
not_found404 | A host or person is not on the account. | Add them with admin_save_person, or leave them out. |
slug_taken409 | A routing form on that calendar already has the slug. | Pick another slug. |
invalid_input400 | A new meeting type has no title, its hours or questions are not valid, hosts came without an assignment, or hosts were given for a person's own type. | Give a title, hours as {day, start, end}, questions with a label and a type from the list, and hosts only on the business's types, with assignment round_robin or collective. |
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* - 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* - Book a meeting
calendar_bookBooks a free time for someone, who gets a confirmation email with an invite and a link to change it.$0.01 a call - 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