AGENT CAPABILITIES

Scheduling your assistants can use. Authority you can control.

Use the MCP endpoint or REST API to discover meetings, propose times, and execute approved bookings. Every connection has an explicit scope and expiry.

Connect in four steps

  1. Open Workspace → Automation → Agent connections as the owner. Choose meeting types, expiry and whether new bookings need individual approval.
  2. Copy the one-time token into your assistant’s secret settings. Use this site’s origin plus /api/mcp, with Authorization: Bearer followed by the token. Never place it in a URL or public code.
  3. Discover meeting types and request availability. Submit propose_booking with the guest details, answers and a fresh UUID requestId. Reuse that ID only when retrying the exact same request.
  4. Review pending proposals in the inbox. Approval is separate from execution. Call execute_proposal with the proposal ID, then get_receipt until the booking and email delivery states are known.

Connection details

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/call

Remote 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.

A calendar your agent can read

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=…

Let any compatible assistant book—with your permission

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.md

Public 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_profile

Discover a host’s published meetings and public booking protocol using its profile slug.

get_public_calendar

Read live availability and the required booking fields for one public event over at most seven days. Does not reserve a time.

request_booking

Send 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_status

Read a request receipt using its requestId and secret requestToken. Poll no faster than every 15 seconds.

complete_booking

Retry booking an email-verified request using its requestId and secret requestToken. Never bypasses guest verification, host settings or availability checks.

Available tools

discover_meetings

List the meeting types and rules this connection may use. Does not reveal private calendars.

find_times

Find available times within a range of up to seven days. Times are not reserved.

propose_booking

Create 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_proposal

Execute 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_receipt

Read this connection’s proposal and booking status. No private calendar event details or management secrets are returned.

start_coordination

Offer up to forty available candidate times to a second assistant through a short-lived scoped token. Does not reserve or book a time.

get_coordination

Read times accepted by the other participant. Availability must be checked again before booking.

get_journey

Read 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_context

Read 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_form

Read the exact JSON input schema and required questions for propose_booking. Ask the guest for missing answers; never invent them.

Approval, execution and delivery

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.

Shared limits, predictable retries

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.

Preparation, written alternatives, and replacement meetings

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.

Coordinate without exposing private calendars

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.

Signed webhook contract

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.

Browser tools for guests
get_available_times

Read the current availability

Returns the selected date, time zone, currently displayed slots, loading state, and any error. Times are not reservations.

select_booking_time

Prepare a booking for review

Selects an available time and opens the details step. It does not submit, reserve, charge, or send an email.

get_booking_review

Inspect the pending handoff

Returns the meeting title, selected time, time zone, duration, and current step. It does not expose the guest’s form entries.