POST /api/book

Claims a 30-minute consultation slot that was returned by GET /api/availability. On success, returns a Google Meet link and emits a calendar invite to both parties.

Quick reference

MethodPOST
URLhttps://truvisory.com/api/book
Requestapplication/json
Responseapplication/json
OpenAPIbook.json

Request body

FieldRequiredTypeDescription
slotStartyesISO-8601Slot start as returned by /api/availability.
nameyesstringAttendee's name.
emailyesstring (email)Attendee's email — receives the calendar invite.
phonenostringE.164 preferred.
sourcenoenumweb | chat | phone. Defaults to web.
sessionIdnoUUID v4Links the booking to a chat session if booked from chat.
{
  "slotStart": "2026-05-20T09:00:00-06:00",
  "name": "Alex Procurement",
  "email": "alex@agency.gov",
  "phone": "+12025551234",
  "source": "web"
}

Response (200)

{
  "booked": true,
  "start": "2026-05-20T09:00:00-06:00",
  "meetLink": "https://meet.google.com/abc-defg-hij"
}

Errors

StatusBodyCause
400{ "error": "bad_request" }Missing/invalid required field.
409{ "error": "slot_taken" }Slot was claimed between availability fetch and booking.
429{ "error": "rate_limited" }Too many requests.