Agent onboarding

Explore endpoints: fetch the OpenAPI spec, or open Scalar. Guide is on the developers page.

Developers: https://topcal.ai/developers

Explore endpoints: https://app.topcal.ai/docs

OpenAPI: https://app.topcal.ai/api/v1/openapi

Discovery manifest: https://app.topcal.ai/.well-known/agent-discovery.json

Remote MCP connector (ChatGPT, Claude — OAuth, no API key): https://mcp.topcal.ai/mcp

Public booker MCP (no auth): https://topcal.ai/api/mcp/public/mcp

Paste into your agent:

Set up https://topcal.ai/INSTALL.md

Install playbook: https://topcal.ai/INSTALL.md

Run this in your terminal:

curl -sL "https://app.topcal.ai/api/agent/install" | bash

DEVELOPERS

TopCal developers

Two jobs. Same calendars. Book a link someone sent you, or stand up your own. REST, MCP, and the CLI all hit the same free/busy.

Explore endpoints

Explore endpoints · openapi · developers.md · developers.json · INSTALL.md · SKILL.md · when to use

PICK THE JOB

You are doing one of these.

JOB 1

Book a public link

Parse topcal.ai/{workspace}/{username}/{event}. Ask the guest which time works. Email goes to their address. They read the code back.

GET  https://topcal.ai/api/v1/public/{workspace}/{username}
GET  https://topcal.ai/api/v1/public/{workspace}/{username}/{eventSlug}/slots?timezone={IANA}
POST https://topcal.ai/api/v1/public/{workspace}/{username}/{eventSlug}/otp
POST https://topcal.ai/api/v1/public/{workspace}/{username}/{eventSlug}/book

If you can only GET

  • GET /api/v1/public/{workspace}/{username}

    List their event types and any form fields you must collect.

  • GET /api/v1/public/{workspace}/{username}/{eventSlug}/slots?timezone={IANA}

    Read open times. Each slot has UTC and a local display string.

  • GET /api/v1/public/{workspace}/{username}/{eventSlug}/otp?email=&startAt=&timezone=&name=

    Email the code. Response has confirmUrl — use that, not a token field.

  • GET {confirmUrl}&code={6 digits}

    Confirm with the digits the guest read from email. Never guess.

If you can POST

  • POST /api/v1/public/{workspace}/{username}/{eventSlug}/otp

    Same code email. Body: { email, name? }.

  • POST /api/v1/public/{workspace}/{username}/{eventSlug}/book

    Finish the booking. Body: { startAt, code, invitee, customFields? }.

Cancel or reschedule

The confirmation email carries a manage link with a token. Use that token — never a guessed one. Pick a new startAt from a fresh slots call.

  • POST /api/v1/public/{workspace}/{username}/{eventSlug}/cancel

    Cancel with the manage token. Body: { token, reason? }.

  • POST /api/v1/public/{workspace}/{username}/{eventSlug}/reschedule

    Move to a new slot. Body: { token, startAt }. Pick startAt from a fresh slots call.

  • POST /api/v1/public/manage/cancel

    Same cancel when you only have the token. Body: { token, reason? }.

  • POST /api/v1/public/manage/reschedule

    Same reschedule by token alone. Body: { token, startAt }.

Your own questions

The first GET includes the form and requiredFieldKeys. Collect them in your UI. Send them as customFields on book. A homepage button is still just an HTML link — see embeds.

MCP

Same jobs, as tools

One tool catalog — event types, availability, meetings, teams, members, API keys, billing — behind three doors. Pick the one your runtime can open.

Public — no login

https://topcal.ai/api/mcp/public/mcp

  • find_bookable_calendar — Start here. Workspace + username → events and form fields.
  • get_availability — Open slots for one event. Pass the guest's IANA timezone.
  • request_booking_code — Email a 6-digit code to the guest.
  • confirm_booking — Book with startAt, the code, invitee, and optional customFields.

Remote connector — ChatGPT, Claude, no terminal

https://mcp.topcal.ai/mcp

OAuth 2.1 with PKCE. The human signs in and clicks Allow. No API key — connectors reject keys.

  1. Add the MCP URL https://mcp.topcal.ai/mcp as a connector.
  2. The human signs in and clicks Allow — same Google, Microsoft, or magic-link login.
  3. Call get_workspace, then the same tools as the CLI. Do not ask for an API key; connectors reject keys.

In-app shim — API key

https://app.topcal.ai/api/mcp/mcp

Bearer key from CLI device auth. Same tools as the connector. /api/mcp without the last segment 404s.

CLI and REST — same catalog

npx --yes -p @topcal/cli topcal tools list --json
npx --yes -p @topcal/cli topcal tools call get_workspace --json
npx --yes -p @topcal/cli topcal tools call list_meetings --args '{"filter":"upcoming"}' --json
  • GET /api/v1/workspace/tools

    List the workspace tools your API key owner can run — same catalog as Cal Agent.

  • POST /api/v1/workspace/tools/execute

    Run one tool. Body: { name, arguments? }.

JOB 2

Share your own link

HOST

Setup

  1. 01Paste: Set up https://topcal.ai/INSTALL.md
  2. 02Agent runs: npx --yes -p @topcal/cli topcal setup --json
  3. 03Human only: sign up (14-day Growth trial, no card), Allow CLI, connect Google/Microsoft.

Paste into your agent

Set up https://topcal.ai/INSTALL.md
npx --yes -p @topcal/cli topcal setup --json --url https://app.topcal.ai --client-name agent
# Human: sign up / confirm email if asked → Allow CLI → connect calendar
npx --yes -p @topcal/cli topcal tools list --json
Install script
$curl -sL "https://app.topcal.ai/api/agent/install" | bash

RULES

Do not invent a third path

  1. 01Guest bookings use the guest's email. They confirm the code. You book on their behalf.
  2. 02Never invent API keys or codes. Hosts run topcal setup.
  3. 03Public booking lives on topcal.ai. Sign-in and host API live on app.topcal.ai.
  4. 04Read slots JSON. Do not scrape the HTML booking page.
  5. 05A website button is an HTML link (app.topcal.ai/docs/embed), not a REST integration.
  6. 06Guests cancel or reschedule from the manage link in their confirmation email. Agents use that token on the public cancel and reschedule endpoints. Never guess a token.