Calendar

Book a meeting

calendar_book · Changes data · Markdown

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.

With these arguments
{
  "meeting_type": "bike-fitting",
  "start": "2026-10-24T11:30:00-07:00",
  "name": "Rachel Kim",
  "email": "rachel.kim@example.com",
  "timezone": "America/Los_Angeles"
}
What comes back
{
  "booking": {
    "booking_id": "4171ec2e-7840-4cea-98ae-6d838f73ece6",
    "reference": "86NAQ7U36W",
    "status": "scheduled",
    "meeting_type": "bike-fitting",
    "title": "Bike fitting",
    "start": "2026-10-24T18:30:00+00:00",
    "end": "2026-10-24T19:15:00+00:00",
    "attendee_local_time": "Saturday, October 24, 2026 at 11:30 (America/Los Angeles)",
    "attendee": {
      "name": "Rachel Kim",
      "email": "rachel.kim@example.com",
      "phone": null,
      "timezone": "America/Los_Angeles"
    },
    "hosts": [],
    "guests": [],
    "answers": {},
    "location": "Halverson Cycle & Repair, 1830 SE Ash St, Portland, OR 97214",
    "booked_via": "bot",
    "manage_url": "https://cncto.co/booking/4171ec2e-7840-4cea-98ae-6d838f73ece6?t=IjQxNzFlYzJlLTc4NDAtNGNlYS05OGFlLTZkODM4ZjczZWNlNiI:1xJYro:Q8e98jEbJrio_RLE2aJ-Bq5gIqRRIaYy61VCE7jYikc",
    "confirmation_call": null,
    "cancel_reason": null
  }
}

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

NameTypeWhat it is
meeting_typeRequiredstringIts slug, or "<person's address>/<slug>".
personstringThe meeting type is on this person's own calendar. Up to 254 characters.
hoststringA round-robin type: give it to this host (they must be free then). Up to 254 characters.
startRequiredstring (date-time)
nameRequiredstring1 to 120 characters.
emailstringUp to 254 characters.
phonestringUp to 30 characters.
guestsarray of stringsMore people to invite, by email. Up to 10 items.
timezonestringThe attendee's IANA time zone. Up to 80 characters.
answersobjectAnswers to the meeting type's questions, by key.
confirmation_call_agreedbooleanDefault: false.
notifybooleanEmail 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:

Terminal
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.

CodeWhenWhat to do
not_set_up404The business has no calendar yet.Create it with calendar_setup, then call again.
not_found404No meeting type has that slug.Call calendar_list_meeting_types and use one of its slugs.
time_taken409That 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.
inactive409The meeting type is switched off.Switch it on with calendar_save_meeting_type and active: true, or book another type.
invalid_input400The 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_outbound402The 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_limit429The 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_host400host 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_paused403Email 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.
suppressed422The attendee's address bounced, complained or unsubscribed before.Call again with notify: false, or use another address for them.

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md