Skip to content

API: admin

Org administration: settings, members, invites, teams and credentials.

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.

Add an org-wide break: POST /v1/orgs/{handle}/breaks

Every series owned by the org’s teams skips weeks that fall in the range, unless it opted out (Q63). Org admins.

  • Needs: workspace:admin
  • CLI: quorum orgs breaks create
  • MCP tool: orgs_breaks_create
  • Returns: 201 SeriesBreak
Argument In Type Required Description
handle path string yes
label body string yes
startsOn body string yes
endsOn body string yes

Remove an org-wide break: DELETE /v1/orgs/{handle}/breaks/{breakId}

Org admins.

  • Needs: workspace:admin
  • CLI: quorum orgs breaks delete
  • MCP tool: orgs_breaks_delete
  • Returns: no body
Argument In Type Required Description
handle path string yes
breakId path string (uuid) yes

List every credential that reaches an org: GET /v1/orgs/{handle}/credentials

Personal tokens and connected apps of members that are limited to or include this workspace: who owns them, what they can do and when they were last used. Never the secret.

  • Needs: workspace:admin
  • CLI: quorum orgs credentials list
  • MCP tool: orgs_credentials_list
  • Returns: 200 object
Argument In Type Required Description
handle path string yes

Invite someone by email: POST /v1/orgs/{handle}/invites

Emails an accept link that works for 14 days. Inviting the same address again replaces its pending invite.

  • Needs: workspace:admin
  • CLI: quorum orgs invites create
  • MCP tool: orgs_invites_create
  • Returns: 201 CreatedInvite
Argument In Type Required Description
handle path string yes
email body string (email) yes
role body Role Your role in this workspace (owners show as admin)

List an org’s pending invites: GET /v1/orgs/{handle}/invites

  • Needs: workspace:admin
  • CLI: quorum orgs invites list
  • MCP tool: orgs_invites_list
  • Returns: 200 object
Argument In Type Required Description
handle path string yes

Revoke a pending invite: DELETE /v1/orgs/{handle}/invites/{inviteId}

  • Needs: workspace:admin
  • CLI: quorum orgs invites revoke
  • MCP tool: orgs_invites_revoke
  • Returns: no body
Argument In Type Required Description
handle path string yes
inviteId path string (uuid) yes

Remove a member, or leave the org yourself: DELETE /v1/orgs/{handle}/members/{userId}

Removing someone takes them out of every team of the org and ends what they shared with it. The owner can’t be removed or leave.

  • Needs: workspace:admin
  • CLI: quorum orgs members remove
  • MCP tool: orgs_members_remove
  • Returns: no body
Argument In Type Required Description
handle path string yes
userId path string (uuid) yes

Change a member’s role: PATCH /v1/orgs/{handle}/members/{userId}

Between admin and member. Team roles are separate. The owner’s role changes only by transferring ownership.

  • Needs: workspace:admin
  • CLI: quorum orgs members update
  • MCP tool: orgs_members_update
  • Returns: no body
Argument In Type Required Description
handle path string yes
userId path string (uuid) yes
role body Role yes Your role in this workspace (owners show as admin)

Get an org’s token and connected-app policies: GET /v1/orgs/{handle}/developer

  • Needs: workspace:admin
  • CLI: quorum orgs policy get
  • MCP tool: orgs_policy_get
  • Returns: 200 DeveloperPolicy
Argument In Type Required Description
handle path string yes

Change an org’s settings: PATCH /v1/orgs/{handle}

  • Needs: workspace:admin
  • CLI: quorum orgs update
  • MCP tool: orgs_update
  • Returns: 200 Org
Argument In Type Required Description
handle path string yes
name body string
meetByDefault body boolean

Create a webhook endpoint: POST /v1/orgs/{handle}/webhooks

Quorum will POST signed JSON (Standard Webhooks) to the URL. The URL must be https on port 443 and not point at a private, loopback or link-local address; redirects are never followed. The payload version is pinned to the Quorum-Version of this request (current 2026-10-20). An org has at most 20 endpoints. The secret is returned here only.

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks create
  • MCP tool: not offered over MCP
  • Returns: 201 CreatedWebhookEndpoint
Argument In Type Required Description
handle path string yes
url body string yes
description body string
events body string[] Defaults to everything (*)
payloadVersion body string A supported API version; defaults to the request’s

Delete a webhook endpoint: DELETE /v1/orgs/{handle}/webhooks/{webhookId}

Its delivery log goes with it.

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks delete
  • MCP tool: not offered over MCP
  • Returns: no body
Argument In Type Required Description
handle path string yes
webhookId path string (uuid) yes

List an endpoint’s deliveries: GET /v1/orgs/{handle}/webhooks/{webhookId}/deliveries

Newest first. Each delivery is one event for this endpoint, with its tries.

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks deliveries
  • MCP tool: orgs_webhooks_deliveries
  • Returns: 200 object
  • Paging: limit and offset
Argument In Type Required Description
handle path string yes
webhookId path string (uuid) yes
status query “pending” or “succeeded” or “failed”
limit query integer
offset query integer

Get a delivery with its payload and tries: GET /v1/orgs/{handle}/webhooks/{webhookId}/deliveries/{deliveryId}

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks delivery
  • MCP tool: orgs_webhooks_delivery
  • Returns: 200 WebhookDelivery
Argument In Type Required Description
handle path string yes
webhookId path string (uuid) yes
deliveryId path string (uuid) yes

List the webhook event types: GET /v1/webhook-events

Every type an endpoint can subscribe to, with a sample of its data.

  • Needs: any signed-in credential
  • CLI: quorum orgs webhooks events
  • MCP tool: orgs_webhooks_events
  • Returns: 200 WebhookEventTypes

Get a webhook endpoint: GET /v1/orgs/{handle}/webhooks/{webhookId}

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks get
  • MCP tool: orgs_webhooks_get
  • Returns: 200 WebhookEndpoint
Argument In Type Required Description
handle path string yes
webhookId path string (uuid) yes

List an org’s webhook endpoints: GET /v1/orgs/{handle}/webhooks

Org owners and admins only. Secrets are never listed.

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks list
  • MCP tool: orgs_webhooks_list
  • Returns: 200 object
Argument In Type Required Description
handle path string yes

Send a delivery again: POST /v1/orgs/{handle}/webhooks/{webhookId}/deliveries/{deliveryId}/redeliver

Makes a new delivery of the same event (same webhook-id, so a receiver that de-duplicates by it can recognise it) with its own 8 tries. The endpoint must be turned on.

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks redeliver
  • MCP tool: orgs_webhooks_redeliver
  • Returns: 202 WebhookDeliverySummary
Argument In Type Required Description
handle path string yes
webhookId path string (uuid) yes
deliveryId path string (uuid) yes

Rotate a webhook endpoint’s secret: POST /v1/orgs/{handle}/webhooks/{webhookId}/rotate-secret

Makes a new secret and returns it once. For overlapHours the previous secret keeps signing too (the signature header carries both), so a receiver can switch without dropping a delivery. Rotating again replaces the previous secret.

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks rotate-secret
  • MCP tool: not offered over MCP
  • Returns: 200 CreatedWebhookEndpoint
Argument In Type Required Description
handle path string yes
webhookId path string (uuid) yes
overlapHours body integer How long the old secret keeps signing. Default 24, at most 168 (a week)

Send a test event: POST /v1/orgs/{handle}/webhooks/{webhookId}/test

Sends a webhook.test event to this endpoint now, whatever it subscribes to and even if it is turned off, and returns the result. A test is a single try: it is not retried and doesn’t count towards switching the endpoint off.

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks test
  • MCP tool: orgs_webhooks_test
  • Returns: 200 WebhookDelivery
Argument In Type Required Description
handle path string yes
webhookId path string (uuid) yes

Change a webhook endpoint: PATCH /v1/orgs/{handle}/webhooks/{webhookId}

Change its URL, description or events, or turn it off or on. Not offered over MCP: a changed URL would let an agent redirect the org’s event stream. Turning on an endpoint that was switched off clears its failure record; anything that failed meanwhile can be redelivered.

  • Needs: workspace:admin
  • CLI: quorum orgs webhooks update
  • MCP tool: not offered over MCP
  • Returns: 200 WebhookEndpoint
Argument In Type Required Description
handle path string yes
webhookId path string (uuid) yes
url body string
description body string
events body string[] Event types to receive: exact (booking.created), a group (booking.*) or everything (*). List them with GET /v1/webhook-events
status body “active” or “disabled”

Create a team: POST /v1/orgs/{handle}/teams

Org admins only. Teams are flat. The slug is unique in the org and shares one namespace with the org’s root link slugs (a link published at quorumcal.com/{org}/{link}). Only org admins can grant root publishing or set a root alias.

  • Needs: workspace:admin
  • CLI: quorum teams create
  • MCP tool: teams_create
  • Returns: 201 Team
Argument In Type Required Description
handle path string yes
name body string yes
slug body string yes
canPublishRoot body boolean Let the team publish links and polls at the org’s root. Defaults to false
alias body string A root alias handle (quorumcal.com/{alias}/…)

Delete an empty team: DELETE /v1/orgs/{handle}/teams/{teamPath}

Org admins only. A team that still has links, polls or bookings answers 409 team_not_empty. Its alias is held for 90 days.

  • Needs: workspace:admin
  • CLI: quorum teams delete
  • MCP tool: teams_delete
  • Returns: no body
Argument In Type Required Description
handle path string yes
teamPath path string yes The team’s slug or id

Remove someone from a team, or leave it yourself: DELETE /v1/orgs/{handle}/teams/{teamPath}/members/{userId}

Ends the availability grant this membership made. Grants they made themselves stay. They stay in the org.

  • Needs: workspace:admin
  • CLI: quorum teams members remove
  • MCP tool: teams_members_remove
  • Returns: no body
Argument In Type Required Description
handle path string yes
teamPath path string yes The team’s slug or id
userId path string (uuid) yes

Add someone to a team, or change their role: PUT /v1/orgs/{handle}/teams/{teamPath}/members/{userId}

They must already be in the org. Joining shares their availability with this team only (a grant covers exactly one team; they can take it back). Leaving ends that grant if the membership made it; grants they made themselves stay.

  • Needs: workspace:admin
  • CLI: quorum teams members set
  • MCP tool: teams_members_set
  • Returns: no body
Argument In Type Required Description
handle path string yes
teamPath path string yes The team’s slug or id
userId path string (uuid) yes
role body TeamRole Your standing: admin (of this team, or an org admin), member, or none

Rename a team, change its root permission or alias: PATCH /v1/orgs/{handle}/teams/{teamPath}

A team’s admins can change its name and slug. Org admins can also set canPublishRoot and the root alias. A change of address leaves permanent redirects from the old one. Turning canPublishRoot off moves the team’s root links and polls under the team, with redirects from their root addresses.

  • Needs: workspace:admin
  • CLI: quorum teams update
  • MCP tool: teams_update
  • Returns: 200 Team
Argument In Type Required Description
handle path string yes
teamPath path string yes The team’s slug or id
name body string
slug body string
canPublishRoot body boolean
alias body string