---
name: quorum
description: "Use Quorum to schedule: create and manage booking links, polls (including suggested times) and recurring meeting series for a person or an org's teams, list bookings, manage org members, invites and teams, and set up webhooks. Use when the user mentions Quorum, quorumcal.com, a booking link, scheduling poll, or asks to find a meeting time for a group."
---

# Quorum

Quorum is group scheduling: **booking links** (a person's or a team's), **polls** (manual, or suggested from everyone's free/busy), and **recurring poll series** (a weekly meeting that re-polls or keeps a standing time). People belong to **orgs**, which hold **teams**; links, polls and series are owned by a person or by a team. API version 2026-10-20.

## Reach it three ways

1. **CLI**, if `quorum` is installed (`npm i -g @quorumcal/cli`). `quorum login` opens the browser once; `QUORUM_TOKEN` (a personal token) works for CI. Add `--json` for machine-readable output. Every API operation is a command: see [references/commands.md](references/commands.md).
2. **MCP**, if a Quorum server is connected (`https://api.quorumcal.com/mcp`, OAuth). Tools are the commands with underscores (`links_create`). A session starts with the `core` toolset; call `list_toolsets`, then `enable_toolset` for what you need, or `call_tool`. See [references/toolsets.md](references/toolsets.md).
3. **REST**, `https://api.quorumcal.com/v1` with `Authorization: Bearer <token>`. The spec is at `https://api.quorumcal.com/v1/openapi.json`.

## Before you act

- Start with `quorum whoami`, `quorum orgs list` and `quorum teams mine` (MCP: `whoami`, `orgs_list`, `teams_mine`) to learn the person's handle, orgs and teams. Team commands take an org handle and a team slug (`--org`, `--team`; defaults from `QUORUM_ORG` and `QUORUM_TEAM`).
- A credential can do only what its **scopes** allow and no more than its owner's role: `links:*`, `bookings:*`, `polls:*`, `availability:*`, `contacts:*` and `workspace:admin` (members, teams, invites, webhooks). A 403 `insufficient_scope` names the scope to ask for. Tokens can't mint or approve tokens.
- Personal things live under `me`; a team's under `team ...` commands. Pick by who should own the result: a team's links and polls survive people leaving.

## Do it well

- **Read before you write.** List links or polls before creating a duplicate; slugs are unique per owner (and per org at the root).
- **Confirm destructive or outward-facing steps** (deleting a link, finalizing a poll, which invites every respondent, cancelling a booking, removing a member, creating a webhook) unless the user asked for exactly that.
- **Times** are ISO 8601 UTC in the API; each link or poll has an IANA `timezone` that decides how it is shown. Never guess a time zone: ask.
- **Voting needs no account.** Share a poll's public link; don't ask people to sign up.
- **Errors** are JSON `{"error": "code", "message": "..."}`. `409` means the state changed or conflicts (slot taken, already finalized); re-read and retry once, then report.
- **Webhooks** (org admins): events are listed in [references/webhooks.md](references/webhooks.md); deliveries are signed per Standard Webhooks and must be verified.

## References

- [references/commands.md](references/commands.md): every command, its arguments and the scope it needs.
- [references/toolsets.md](references/toolsets.md): the MCP toolsets and which tools are in each.
- [references/webhooks.md](references/webhooks.md): event types and how to verify a delivery.
- Full docs: https://docs.quorumcal.com
