Everything the WhenMeet.me UI does is available programmatically:
a documented HTTP API and a remote MCP server, both on this origin.
Machine-readable spec: /openapi.json (OpenAPI 3.1).
LLM-friendly product summary: /llms.txt.
Point any MCP client (Claude, Cursor, ChatGPT connectors, custom agents) at:
https://whenmeet.me/mcp
Transport: Streamable HTTP, stateless JSON responses. Tools:
| Tool | Auth | What it does |
|---|---|---|
find_common_slots | token | Ranked times when all participants are free (live Google/Microsoft data + hand-marked availability). |
create_meeting | token | Writes the calendar event with a Meet/Teams link, emails invites with an ICS, returns the share URL. |
get_meeting | none | Meeting details + proposed alternate times (share-link UUID is the capability). |
get_meeting_availability | none | Aggregated group heat-map for an existing meeting (counts only — no individual calendars). |
suggest_time | none | Propose a different time as a guest; the host is emailed. |
respond_to_suggestion | token | Host accepts (moves the event + re-invites) or declines. |
set_manual_availability | none | Publish hand-marked free slots for an email (the Apple/iCloud and no-calendar path). |
get_manual_availability | none | Read hand-marked free slots. |
POST /api/tokens (uses your browser session; the plaintext mn_… token is shown once).Authorization: Bearer mn_…Tokens act with your full authority; revoke any time with DELETE /api/tokens/:id.
Guest-side actions (reading a meeting, suggesting times, marking availability) need no token at all —
the share-link UUID or the email address is the capability, same as in the UI.
| Endpoint | Auth | Purpose |
|---|---|---|
POST /api/availability | token/session | Ranked everyone-free slots for arbitrary emails. Without a connected host calendar, falls back to hand-marked availability only (participants with none come back as source: "host", may look free) — never fabricated. |
POST /api/meetings | token/session | Create meeting + event + invites. |
GET /api/meetings/:id | none | Meeting + suggestions. |
POST /api/meetings/:id/availability | none | Aggregated group availability. |
POST /api/meetings/:id/suggest | none | Propose another time. |
POST /api/meetings/:id/suggestions/:sid | token/session (host) | Accept / decline. |
GET·POST /api/manual-availability | none | Read / publish hand-marked free slots. |
POST·GET /api/tokens, DELETE /api/tokens/:id | session | Manage access tokens. |
Times are unix milliseconds; tz is an IANA zone name used for business-hours
filtering and email formatting. Full schemas: /openapi.json.
« find slots »
curl -s https://whenmeet.me/api/availability \
-H "Authorization: Bearer $MEETNOW_TOKEN" -H "content-type: application/json" \
-d '{"participants":["anna@acme.com","bartek@contoso.com"],
"from":'$(date +%s000)',"to":'$(($(date +%s)+1209600))'000,
"durationMin":30,"tz":"Europe/Warsaw"}'
« book the top slot »
curl -s https://whenmeet.me/api/meetings \
-H "Authorization: Bearer $MEETNOW_TOKEN" -H "content-type: application/json" \
-d '{"participants":["anna@acme.com","bartek@contoso.com"],
"startsAt":1781344800000,"endsAt":1781346600000,
"title":"Cross-company sync","conference":"meet","tz":"Europe/Warsaw"}'
Last updated 2026-06-12 · openapi.json · llms.txt · llms-full.txt · WhenMeet.me