For developers
Connect FlowCaptain to your own systems via API, MCP or your own voice bot platform.
FlowCaptain works without any programming: the built-in assistant answers calls and books appointments. This section is for everyone who builds FlowCaptain's appointment logic into their own systems. If you just want to get going, start with Getting started.
When do you need the API?
- Your own voice bot platform — You already run a voice bot and want to connect FlowCaptain's appointment logic.
- Your own surfaces — You want to add appointment booking to your website, booking form or your own chat. FlowCaptain itself offers no chat channel for callers; you build it on the API.
- Automation — You want to check or book appointments from other systems.
Three ways to connect
Autopilot — A single endpoint for the whole conversation. FlowCaptain handles greeting, appointment search, booking and farewell; your system only forwards messages. → Autopilot
Individual endpoints (REST) — One endpoint per action: check availability, book, cancel, reschedule, callback. You control the conversation flow. → Check availability · Book, cancel, reschedule & callback
MCP (Model Context Protocol) — A single endpoint through which your system discovers all tools automatically. → MCP endpoint
How to connect the common voice bot platforms is described in Platform setup.
Base URL
https://api.flowcaptain.com
Interactive API documentation is available at api.flowcaptain.com/docs.
Key and calendar ID
Every request needs two things:
- an API key as Bearer token in the
Authorizationheader — you create it in the workspace settings, details under API keys; - the calendar ID of the calendar the request is about — pre-filled in every example under Calendar › Name › API, section Integration Guide.
Authorization: Bearer sk_live_your_api_key
Autopilot and REST endpoints expect calendarId as a field in the JSON body; MCP expects it as a query parameter on the URL. If your platform wraps the request body in an envelope (e.g. Retell's args object), pass calendarId as a URL query parameter instead — ?calendarId=YOUR_CALENDAR_ID — because the API only reads it from the top-level body, the query string or the route params, never from a nested args object.