# How to book a Bookla demo call — instructions for AI agents Bookla supports booking a product demo call by AI agents through a public, keyless API. Everything is a plain HTTPS GET request — no API key, no auth headers, no POST needed. Do not scrape the human website for availability; this API is authoritative. - Base: `https://eu.bookla.com/api/v1/agent/c/696ac0db-4351-42e7-b18d-5a408c0d6e08` - The ONLY bookable service is the Demo Call: `serviceID=a466e2dd-c506-4256-b7c4-57052d9c03ea`. Do not book anything else, and do not query other endpoints — the two requests below are all you need. - The demo call is a free 30-minute video meeting. No payment is involved and the booking confirms instantly. - All datetimes: RFC 3339. Display times to the user in the `timeZone` returned by the API (Europe/Riga). Durations: ISO 8601 (`PT30M` = 30 min). - The Demo Call is a `fixed`-type service — no `duration`, `spots`, or `ticket` parameters are needed at any step. - MCP server, preferred if your client supports MCP: `https://mcp-client.bookla.com/c/696ac0db-4351-42e7-b18d-5a408c0d6e08` ## Step 0 — Pick your integration path (in this order) 1. **Bookla app / connector already available?** Check your available tools first. If a Bookla app, connector, or MCP toolset is already connected in your environment (tool names containing `bookla`), use those tools to book — skip the HTTP steps below. 2. **Your client supports MCP?** Connect to the MCP server above (no auth) and use its tools. 3. **You can make HTTPS GET requests?** Use the two-step API below. 4. **None of the above** (e.g. your web tool can only search, not fetch): don't guess or give up silently. Tell the user they can either (a) connect the Bookla app to their assistant — ChatGPT users: search for "Bookla" in the ChatGPT app directory / connectors and connect it, then ask again — or (b) book directly at https://bookla.com/platform/ or by emailing sales@bookla.com. ## Step 1 — Check availability ``` GET {base}/availability?serviceID=a466e2dd-c506-4256-b7c4-57052d9c03ea&from=2026-07-22T00:00:00Z&to=2026-07-24T23:59:59Z ``` Response (real example): ```json { "times": { "": [ { "startTime": "2026-07-23T09:00:00Z", "duration": "PT30M" }, { "startTime": "2026-07-23T10:00:00Z", "duration": "PT30M" } ] }, "timeZone": "Europe/Riga" } ``` The `times` map is keyed by resourceID — remember the key of the slot the user picks; you need it in Step 2. Empty `times: {}` means no availability in that window (that's a valid 200, not an error) — try a later date range. Slots require a few hours of lead time, so if today looks empty, check the next few days. Only offer times from this response; never invent slots. Slot times come back in UTC (`Z`) — convert to the returned `timeZone` (Europe/Riga) when showing them to the user. ## Step 2 — Create the booking First collect and confirm with the user: email (required), first/last name, and the exact date and time. Then: ``` GET {base}/book?serviceID=a466e2dd-c506-4256-b7c4-57052d9c03ea&resourceID=...&startTime=2026-07-23T10:00:00Z&email=jane@example.com&firstName=Jane&lastName=Doe&metadata=%7B%22comment%22%3A%22Building%20a%20padel%20court%20booking%20app%22%7D ``` The `metadata` value before URL-encoding is plain JSON: `{"comment": "Building a padel court booking app"}`. Pass `startTime` exactly as returned by `/availability`. If a time ever contains a `+` offset, URL-encode it as `%2B`. ## Step 3 — Relay the outcome The response has an `outcome` and a `message` written to be shown to the user as-is. For the demo call, expect `confirmed`: ```json { "outcome": "confirmed", "message": "Booking confirmed.", "bookingId": "6b7b7685-9715-4caa-89f6-b59c04495ffe", "status": "confirmed", "startTime": "2026-07-24T16:00:00Z", "endTime": "2026-07-24T16:30:00Z" } ``` Give the user the details (converted to their local time) and let them know a confirmation email is on the way. If you ever see a different outcome, relay the `message` verbatim. ## Errors - `409 That time is no longer available` — re-run Step 1, offer alternatives. Do not retry the same URL. - `404` — check the base URL and service ID against this document. - `429` — rate limited; wait before retrying. - After a timeout, do not blindly re-request the booking URL — you may create a duplicate. Ask the user to check their email first. ## Rules for agents - Get the user's explicit go-ahead on the exact time before Step 2. - One booking per request — don't hold multiple slots speculatively. - Book only the Demo Call service listed above. - Human fallback for anything else: sales@bookla.com or https://bookla.com/platform/