Skip to content

Book a meeting (book_meeting's backing operation)

POST
/v1/calendar/events
curl --request POST \
--url https://api.vocapable.com/v1/calendar/events \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "call_id": "example", "contact_id": "example", "start_time": "example", "duration_minutes": 1, "attendee_email": "example", "attendee_name": "example", "notes": "example", "contact_timezone": "example" }'

Replay-safe without idempotency middleware.

The runtime derives its tool idempotency key from the same arguments, so a replayed book_meeting turn re-presents the same (call_id, start_time) pair: find_for_call returns the existing appointment before any provider call, and uq_appointments_integration_connection_id_external_event_id closes the race two concurrent replays could still slip through.

Media typeapplication/json
CalendarEventCreateRequest

book_meeting’s backing request: the tool arguments plus their call context.

call_id and contact_id are supplied by the control-plane tool-execution path, never by the model; the remaining fields carry exactly the frozen tool schema’s constraints.

object
call_id
required
Call Id
string
contact_id
required
Contact Id
string
start_time
required
Start Time
string
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2})?(\.\d+)?(Z|[+-]\d{2}:\d{2})$/
duration_minutes
required
Duration Minutes
integer
>= 5 <= 240
attendee_email
required
Attendee Email
string
<= 320 characters /^[^@\s]+@[^@\s.]+\.[^@\s]+$/
attendee_name
Any of:
string
>= 1 characters <= 200 characters
notes
Any of:
string
<= 1000 characters
contact_timezone
Any of:
string
>= 1 characters <= 64 characters
Examplegenerated
{
"call_id": "example",
"contact_id": "example",
"start_time": "example",
"duration_minutes": 1,
"attendee_email": "example",
"attendee_name": "example",
"notes": "example",
"contact_timezone": "example"
}

Successful Response

Media typeapplication/json
Appointment
object
id
required
Id
string
call_id
required
Call Id
string
contact_id
required
Contact Id
string
integration_connection_id
Any of:
string
external_event_id
Any of:
string
starts_at
required
Starts At
string format: date-time
ends_at
required
Ends At
string format: date-time
contact_timezone
Any of:
string
attendees
Attendees
Array
status
required
Status
string
Allowed values: booked rescheduled cancelled completed no_show
invite_sent_at
Any of:
string format: date-time
created_at
required
Created At
string format: date-time
updated_at
required
Updated At
string format: date-time
Example
{
"status": "booked"
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object
Examplegenerated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}