Skip to content

API: links

Create, change and delete booking links, for you or a team, and choose your handle.

All paths are under https://api.quorumcal.com. Send Authorization: Bearer <token>, and optionally Quorum-Version: 2026-10-20. Body properties are listed as arguments with In = body.

Choose your handle: PUT /v1/me/handle

Claims your address in the shared namespace (quorumcal.com/{handle}); personal links and polls need it. Set once: renames aren’t supported yet, so a second call answers 409 handle_already_set. Reserved names, taken handles and handles held for 90 days after release are refused. Needs a session or a credential with links:write that isn’t limited to orgs.

  • Needs: links:write (not for credentials limited to some orgs)
  • CLI: quorum handle set
  • MCP tool: handle_set
  • Returns: 200 Me
Argument In Type Required Description
handle body string yes

Create a booking link: POST /v1/me/links

The link is yours, public at quorumcal.com/{your handle}/{link slug}. The link is public once it is ready. Its slug must be free among the owner’s links; at an org’s root (publishAtRoot, teams with root publishing only) it must also be free among the org’s team slugs and root links.

  • Needs: links:write (not for credentials limited to some orgs)
  • CLI: quorum links create
  • MCP tool: links_create
  • Returns: 201 BookingLink
Argument In Type Required Description
slug body string yes
publishAtRoot body boolean Team links only, and only for a team with root publishing: publish at quorumcal.com/{org}/{slug} instead of under the team. The other address redirects. Root slugs share one namespace with the org’s team slugs. Defaults to false
title body string yes
description body string
durationMinutes body integer yes
intervalMinutes body integer Start times are offered every this many minutes. Defaults to 30
minNoticeMinutes body integer Defaults to 60
bufferBeforeMinutes body integer
bufferAfterMinutes body integer
timezone body string yes
hoursMode body LinkHoursMode schedules: each person’s default schedule applies. link: only the link’s own weekly hours apply
weekly body WeeklyInterval[] The link’s own hours, used when hoursMode is link
hostId body string (uuid) Optional. A host must be free and never counts toward a pool. Without one, a slot needs only the pools
organizer body LinkOrganizer Whose calendar holds the event when there is no host: the link’s creator (default) or the first person assigned. A creator who isn’t attending sees the event as free
meet body boolean Null follows the workspace default
pools body LinkPoolInput[]
cc body LinkCcInput[] Invited to every booking as optional and never reserved

Delete a booking link: DELETE /v1/me/links/{linkId}

Past and upcoming bookings stay (and keep their reservations); the link just stops taking new ones.

  • Needs: links:write (not for credentials limited to some orgs)
  • CLI: quorum links delete
  • MCP tool: links_delete
  • Returns: no body
Argument In Type Required Description
linkId path string (uuid) yes

Get a booking link: GET /v1/me/links/{linkId}

  • Needs: links:read (not for credentials limited to some orgs)
  • CLI: quorum links get
  • MCP tool: links_get
  • Returns: 200 BookingLink
Argument In Type Required Description
linkId path string (uuid) yes

Change a booking link: PATCH /v1/me/links/{linkId}

Send only what changes. pools and cc, when sent, replace the whole list: pools carrying an existing id keep their assignment history, and pools left out are deleted. Existing bookings are unaffected. Changing the slug leaves a permanent redirect from the old address.

  • Needs: links:write (not for credentials limited to some orgs)
  • CLI: quorum links update
  • MCP tool: links_update
  • Returns: 200 BookingLink
Argument In Type Required Description
linkId path string (uuid) yes
slug body string
publishAtRoot body boolean Team links only, and only for a team with root publishing: publish at quorumcal.com/{org}/{slug} instead of under the team. The other address redirects. Root slugs share one namespace with the org’s team slugs. Defaults to false
title body string
description body string
durationMinutes body integer
intervalMinutes body integer Start times are offered every this many minutes. Defaults to 30
minNoticeMinutes body integer Defaults to 60
bufferBeforeMinutes body integer
bufferAfterMinutes body integer
timezone body string
hoursMode body LinkHoursMode schedules: each person’s default schedule applies. link: only the link’s own weekly hours apply
weekly body WeeklyInterval[] The link’s own hours, used when hoursMode is link
hostId body string (uuid) Optional. A host must be free and never counts toward a pool. Without one, a slot needs only the pools
organizer body LinkOrganizer Whose calendar holds the event when there is no host: the link’s creator (default) or the first person assigned. A creator who isn’t attending sees the event as free
meet body boolean Null follows the workspace default
pools body LinkPoolInput[]
cc body LinkCcInput[] Invited to every booking as optional and never reserved

Create a booking link: POST /v1/orgs/{handle}/teams/{teamPath}/links

Team admins and org admins only. The link is public at its team’s address. The link is public once it is ready. Its slug must be free among the owner’s links; at an org’s root (publishAtRoot, teams with root publishing only) it must also be free among the org’s team slugs and root links.

  • Needs: links:write
  • CLI: quorum team links create
  • MCP tool: team_links_create
  • Returns: 201 BookingLink
Argument In Type Required Description
handle path string yes
teamPath path string yes The team’s slug or id
slug body string yes
publishAtRoot body boolean Team links only, and only for a team with root publishing: publish at quorumcal.com/{org}/{slug} instead of under the team. The other address redirects. Root slugs share one namespace with the org’s team slugs. Defaults to false
title body string yes
description body string
durationMinutes body integer yes
intervalMinutes body integer Start times are offered every this many minutes. Defaults to 30
minNoticeMinutes body integer Defaults to 60
bufferBeforeMinutes body integer
bufferAfterMinutes body integer
timezone body string yes
hoursMode body LinkHoursMode schedules: each person’s default schedule applies. link: only the link’s own weekly hours apply
weekly body WeeklyInterval[] The link’s own hours, used when hoursMode is link
hostId body string (uuid) Optional. A host must be free and never counts toward a pool. Without one, a slot needs only the pools
organizer body LinkOrganizer Whose calendar holds the event when there is no host: the link’s creator (default) or the first person assigned. A creator who isn’t attending sees the event as free
meet body boolean Null follows the workspace default
pools body LinkPoolInput[]
cc body LinkCcInput[] Invited to every booking as optional and never reserved

Delete a booking link: DELETE /v1/orgs/{handle}/teams/{teamPath}/links/{linkId}

Past and upcoming bookings stay (and keep their reservations); the link just stops taking new ones.

  • Needs: links:write
  • CLI: quorum team links delete
  • MCP tool: team_links_delete
  • Returns: no body
Argument In Type Required Description
handle path string yes
teamPath path string yes The team’s slug or id
linkId path string (uuid) yes

Get a booking link: GET /v1/orgs/{handle}/teams/{teamPath}/links/{linkId}

  • Needs: links:read
  • CLI: quorum team links get
  • MCP tool: team_links_get
  • Returns: 200 BookingLink
Argument In Type Required Description
handle path string yes
teamPath path string yes The team’s slug or id
linkId path string (uuid) yes

Change a booking link: PATCH /v1/orgs/{handle}/teams/{teamPath}/links/{linkId}

Send only what changes. pools and cc, when sent, replace the whole list: pools carrying an existing id keep their assignment history, and pools left out are deleted. Existing bookings are unaffected. Changing the slug leaves a permanent redirect from the old address.

  • Needs: links:write
  • CLI: quorum team links update
  • MCP tool: team_links_update
  • Returns: 200 BookingLink
Argument In Type Required Description
handle path string yes
teamPath path string yes The team’s slug or id
linkId path string (uuid) yes
slug body string
publishAtRoot body boolean Team links only, and only for a team with root publishing: publish at quorumcal.com/{org}/{slug} instead of under the team. The other address redirects. Root slugs share one namespace with the org’s team slugs. Defaults to false
title body string
description body string
durationMinutes body integer
intervalMinutes body integer Start times are offered every this many minutes. Defaults to 30
minNoticeMinutes body integer Defaults to 60
bufferBeforeMinutes body integer
bufferAfterMinutes body integer
timezone body string
hoursMode body LinkHoursMode schedules: each person’s default schedule applies. link: only the link’s own weekly hours apply
weekly body WeeklyInterval[] The link’s own hours, used when hoursMode is link
hostId body string (uuid) Optional. A host must be free and never counts toward a pool. Without one, a slot needs only the pools
organizer body LinkOrganizer Whose calendar holds the event when there is no host: the link’s creator (default) or the first person assigned. A creator who isn’t attending sees the event as free
meet body boolean Null follows the workspace default
pools body LinkPoolInput[]
cc body LinkCcInput[] Invited to every booking as optional and never reserved