get_profileDiscover a host’s published meetings and public booking protocol using its profile slug.
AGENT CAPABILITIES
Use the MCP endpoint or REST API to discover meetings, propose times, and execute approved bookings. Every connection has an explicit scope and expiry.
POST /api/mcp with Content-Type: application/json and Accept: application/json, text/event-stream. REST clients can POST {tool, input} to /api/agent/call with the same Bearer token. Never share a token between unrelated assistants.
/api/mcp/api/agent/callRemote MCP uses stateless Streamable HTTP with JSON responses. Your client must support a custom Authorization: Bearer header. Automatic OAuth connector setup is not available. Browser page tools are separate and never submit a booking.
Fetch calendar.md with your scoped Bearer token and eventId, from and to query parameters (UTC ISO timestamps, at most seven days). Each request reads current connected-calendar availability. The file includes available times, constraints, form fields, timestamps and a content revision. It excludes private calendar event details. Saved copies do not update themselves: fetch again before proposing a booking. External changes are visible on the next successful provider read; push subscriptions are not included.
/api/agent/calendar.md?eventId=…&from=…&to=…Public profiles expose published meeting types and live availability. Visitor agents use /api/public/mcp or /api/public/agent without an owner key. Each request sends the guest a short-lived verification email. The guest reviews and approves the exact details before booking. Host access, event revisions, availability and quotas are checked again before the booking is saved.
Enable Public profile and verified agent booking in workspace Settings, publish your meeting types, and share /your-workspace-address. Your agent document lives at /your-workspace-address/calendar.md. The profile address currently uses the workspace slug.
/your-workspace-address/calendar.mdPublic requests are limited to 120 calls per IP per minute. Calendar reads and execution share 10 calls per IP and 30 per workspace per minute. New verification requests allow 3 per IP per 10 minutes, 3 per email per hour, 30 per workspace per hour and 1,000 platform-wide per day. Status polling allows 6 per request per minute. These fixed-window limits are shared across public HTTP and MCP; retryAfter reports when to retry. Existing booking and email plan quotas still apply.
get_profileDiscover a host’s published meetings and public booking protocol using its profile slug.
get_public_calendarRead live availability and the required booking fields for one public event over at most seven days. Does not reserve a time.
request_bookingSend a guest a verification email for an immutable booking request. Requires guest consent to request the email; this does not book yet. Retry only with identical requestId, requestToken and details.
get_booking_statusRead a request receipt using its requestId and secret requestToken. Poll no faster than every 15 seconds.
complete_bookingRetry booking an email-verified request using its requestId and secret requestToken. Never bypasses guest verification, host settings or availability checks.
discover_meetingsList the meeting types and rules this connection may use. Does not reveal private calendars.
find_timesFind available times within a range of up to seven days. Times are not reserved.
propose_bookingCreate an immutable booking proposal with a caller-generated UUID requestId. Proposals expire in fifteen minutes. Approval and preparation may be required. Never executes the booking. For a move, provide rescheduleBookingId for a booking created by this same connection, with the original guest and journey. Moves always require owner approval.
execute_proposalExecute a current approved proposal. Revalidates permissions and calendar availability. Retries use the same proposal ID. Returns a receipt, not a promise of calendar or email delivery.
get_receiptRead this connection’s proposal and booking status. No private calendar event details or management secrets are returned.
start_coordinationOffer up to forty available candidate times to a second assistant through a short-lived scoped token. Does not reserve or book a time.
get_coordinationRead times accepted by the other participant. Availability must be checked again before booking.
get_journeyRead readiness and written-alternative recommendations for a supplied journey ID. Access requires the current stage’s meeting type in this connection’s scope. Never changes checklists or completes stages.
get_calendar_contextRead a fresh Markdown calendar snapshot, available times and booking form for one permitted event over at most seven days. This does not reserve a time.
get_booking_formRead the exact JSON input schema and required questions for propose_booking. Ask the guest for missing answers; never invent them.
An available time is not a reservation. Proposals expire after fifteen minutes. Execution rechecks calendar availability, approval, event scope and preparation. A pending receipt means delivery is still processing. Revoking a connection stops future requests; already accepted bookings continue through delivery.
All agent endpoints share fixed one-minute limits: 120 requests per IP, 60 per access key and 180 per workspace. Calendar reads, coordination starts, booking proposals and execution also share 10 calls per key and 30 per workspace per minute. HTTP 429 includes Retry-After; MCP tool errors include retryAfter in seconds. Wait before retrying and avoid tight receipt-polling loops. Limits do not grant extra booking or email quota.
Create a playbook from your real meeting types, then start a client journey. Give its ID to the assistant. get_journey returns preparation and a recommendation based on your explicit preference for written updates. Owners or admins complete checklists and stages. To move a future confirmed meeting created by the same connection, propose a replacement with rescheduleBookingId and the original guest and journey. Owner approval is always required. The original meeting stays in place until replacement processing succeeds.
start_coordination returns up to forty candidate times, a participant token, and an endpoint. The second assistant sends that token in an Authorization header to GET the candidates, then POSTs {accepted: [...]} to the endpoint. It can choose only offered times. get_coordination returns the intersection. The request expires in fifteen minutes, and neither step reserves or books a time.
Owner-configured destinations receive booking.confirmed, booking.cancelled and booking.failed. Delivery is at least once, with up to eight automatic attempts. Deduplicate by X-Gatherly-Delivery. Verify X-Gatherly-Signature (v1= plus a hex HMAC-SHA256) over timestamp + "." + delivery ID + "." + the exact raw body, using the one-time signing secret. Reject timestamps outside a five-minute tolerance. Delivery order is not guaranteed. A 2xx response means the destination accepted the event, not that its downstream workflow completed.
Payloads contain the delivery ID, event type, occurrence time, booking ID, meeting-type ID, status, start/end, replaced-booking ID and calendar sequence. They exclude guest contact details and management tokens. HTTPS Zapier and Make destinations work directly; custom domains must be approved in WEBHOOK_ALLOWED_HOSTS by the platform operator. Redirects are never followed.
get_available_timesReturns the selected date, time zone, currently displayed slots, loading state, and any error. Times are not reservations.
select_booking_timeSelects an available time and opens the details step. It does not submit, reserve, charge, or send an email.
get_booking_reviewReturns the meeting title, selected time, time zone, duration, and current step. It does not expose the guest’s form entries.