API: series
Recurring poll series: members, weeks, new-time polls, breaks and your memberships.
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.
orgs breaks list
Section titled “orgs breaks list”The org’s breaks: GET /v1/orgs/{handle}/breaks
Date ranges every series of the org’s teams skips unless it opts out (Q63). Org members.
- Needs: any signed-in credential
- CLI:
quorum orgs breaks list - MCP tool:
orgs_breaks_list - Returns:
200 object
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes |
series auto-answer set
Section titled “series auto-answer set”Answer from my calendar automatically for this series: PUT /v1/series/{seriesId}/membership/auto-answer
Turning it on shares your availability with this series and nothing else (a grant, Q105, made by this act) and lets Quorum answer each poll from your calendar, so you only hear from it when no option works for you (Q64). Turning it off takes the grant back. An outsider added by address becomes a user here (Q69). Only your own switch.
- Needs:
availability:write(not for credentials limited to some orgs) - CLI:
quorum series auto-answer set - MCP tool:
series_auto_answer_set - Returns:
200 SeriesMembership
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
enabled |
body | boolean | yes |
series breaks create
Section titled “series breaks create”Add a break: POST /v1/me/breaks
A team’s break applies to the team’s series; a person’s own to their series. Org-wide breaks are added at the org (Q63). Team admins; a person for themselves.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series breaks create - MCP tool:
series_breaks_create - Returns:
201 SeriesBreak
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
label |
body | string | yes | |
startsOn |
body | string | yes | |
endsOn |
body | string | yes |
series breaks delete
Section titled “series breaks delete”Remove a break: DELETE /v1/me/breaks/{breakId}
Only the team’s or the person’s own; an org-wide break is removed at the org.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series breaks delete - MCP tool:
series_breaks_delete - Returns: no body
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
breakId |
path | string (uuid) | yes |
series breaks list
Section titled “series breaks list”Breaks that series skip: GET /v1/me/breaks
Date ranges (inclusive) every series here skips unless it opts out (Q63). A team sees its org’s breaks and its own; a person their own.
- Needs:
polls:read(not for credentials limited to some orgs) - CLI:
quorum series breaks list - MCP tool:
series_breaks_list - Returns:
200 object
series create
Section titled “series create”Start a recurring poll series: POST /v1/me/series
A series is owned by you or this team and books into the host’s calendar. Re-poll makes a suggested poll for each period (opening and closing as timing says), prefilled from calendars, and books the best option at the deadline (Q58, Q61). Standing time keeps one recurring event and watches it for declines (Q60, Q67). Members are required or optional; people with an account are read only where they shared availability, and an outsider by address is asked by email (Q69). Everything automatic can be set to auto, ask or off (Q66).
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series create - MCP tool:
series_create - Returns:
201 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
title |
body | string | yes | |
description |
body | string | ||
durationMinutes |
body | integer | yes | |
timezone |
body | string | yes | |
meet |
body | boolean | ||
intervalWeeks |
body | integer | A period starts every this many weeks. Defaults to 1 (weekly) | |
startsOn |
body | string | The local date the first period starts on. A re-poll series defaults to the next Monday; a standing-time series to its first meeting | |
windowDays |
body | integer | How many days a period offers times on, at most the interval. Defaults to 7 | |
weekdays |
body | integer[] | Days a time may start on, 0 is Sunday. Defaults to Monday to Friday | |
windowStart |
body | string | Earliest start, local. Defaults to 09:00 | |
windowEnd |
body | string | Latest end, local. Defaults to 17:00 | |
intervalMinutes |
body | integer | How often a time may start. Defaults to 30 | |
timing |
body | “fixed” or “rolling” | Fixed (Q66): the poll opens and closes at set times before each period. Rolling: it opens when the previous meeting ends and closes 48 hours before the earliest option | |
openDaysBefore |
body | integer | Fixed timing: days before the period the poll opens. Defaults to 3 (Friday for a Monday period) | |
openTime |
body | string | HH:MM, local | |
closeDaysBefore |
body | integer | Fixed timing: days before the period the poll closes. Defaults to 2 (Saturday noon for a Monday period; one day leaves under the 24 hours a second round needs before a 09:00 start) | |
closeTime |
body | string | Defaults to 12:00 | |
respectBreaks |
body | boolean | Skip the org’s, team’s and personal breaks (Q63). Defaults to true | |
autoBook |
body | boolean | Book the best option by itself when the poll closes. Off leaves every week to the owner. Defaults to true | |
secondRound |
body | object | ||
declineRepoll |
body | object | ||
standingRepoll |
body | object | ||
declineThreshold |
body | integer | Required declines that count as the time not working. Defaults to 3 | |
declineWindow |
body | integer | …among this many of the latest meetings. Defaults to 6 | |
mode |
body | “repoll” or “standing” | yes | Re-poll: a suggested poll each period, then the best option booked. Standing time: one recurring event, re-polled when it stops working. Fixed at creation |
standingWeekday |
body | integer | Standing time: the day of the week the meeting is on, 0 is Sunday | |
standingTime |
body | string | Standing time: the meeting’s local start time. Defaults to the window start | |
hostId |
body | string (uuid) | Whose calendar the events are booked into. Defaults to you; a team admin may name another team member | |
members |
body | PollAttendeeInput[] |
series end
Section titled “series end”End a series: POST /v1/me/series/{seriesId}/end
Closes open polls and, for a standing time, ends the recurring event after today. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series end - MCP tool:
series_end - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series get
Section titled “series get”A series with its members and settings: GET /v1/me/series/{seriesId}
Team members.
- Needs:
polls:read(not for credentials limited to some orgs) - CLI:
quorum series get - MCP tool:
series_get - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series list
Section titled “series list”List recurring poll series: GET /v1/me/series
Team members see the team’s series; a person sees their own.
- Needs:
polls:read(not for credentials limited to some orgs) - CLI:
quorum series list - MCP tool:
series_list - Returns:
200 object
series members add
Section titled “series members add”Add a member to a series: POST /v1/me/series/{seriesId}/members
Q68, Q69. Owners add members directly: an org or team member, someone who shared availability with this owner, or an outsider by address (email and name). An outsider is emailed to answer each poll; their calendar counts only after they turn on automatic answers for the series. Members apply from the next meeting. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series members add - MCP tool:
series_members_add - Returns:
201 SeriesMember
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
userId |
body | string (uuid) | A person with an account: an org or team member, or anyone who shared availability | |
email |
body | string (email) | Anyone else, by address. Quorum can’t see their calendar; they answer the poll | |
name |
body | string | Required with email | |
required |
body | boolean | Defaults to true (Q75) |
series members remove
Section titled “series members remove”Remove a member from a series: DELETE /v1/me/series/{seriesId}/members/{memberId}
They are no longer asked, and a standing event stops inviting them from the next meeting. Their automatic-answer grant for the series is taken back. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series members remove - MCP tool:
series_members_remove - Returns: no body
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
memberId |
path | string (uuid) | yes |
series members update
Section titled “series members update”Make a member required or optional: PATCH /v1/me/series/{seriesId}/members/{memberId}
The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series members update - MCP tool:
series_members_update - Returns:
200 SeriesMember
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
memberId |
path | string (uuid) | yes | |
required |
body | boolean | yes |
series memberships get
Section titled “series memberships get”Your place in a series: GET /v1/series/{seriesId}/membership
Only for a member (404 for anyone else, so a series’ existence isn’t revealed).
- Needs:
polls:read(not for credentials limited to some orgs) - CLI:
quorum series memberships get - MCP tool:
series_memberships_get - Returns:
200 SeriesMembership
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series memberships leave
Section titled “series memberships leave”Leave a series: DELETE /v1/series/{seriesId}/membership
Q68. The link in a series’ first invite lands here. The owner is told; a required member leaving pauses the series until the owner decides. Your grant to the series goes with you.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series memberships leave - MCP tool:
series_memberships_leave - Returns: no body
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series memberships list
Section titled “series memberships list”The series you are a member of: GET /v1/me/series-memberships
Series that list you (by your account, or by the address you were added under). Names the series and whether it answers from your calendar; nothing about the other members.
- Needs:
polls:read(not for credentials limited to some orgs) - CLI:
quorum series memberships list - MCP tool:
series_memberships_list - Returns:
200 object
series pause
Section titled “series pause”Pause a series: POST /v1/me/series/{seriesId}/pause
Nothing new is made or booked while it is paused; polls already open stay open and a standing event stays on the calendar. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series pause - MCP tool:
series_pause - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series repoll cancel
Section titled “series repoll cancel”Cancel the open new-time poll: DELETE /v1/me/series/{seriesId}/re-poll
The weekly time stays as it is. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series repoll cancel - MCP tool:
series_repoll_cancel - Returns: no body
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series repoll get
Section titled “series repoll get”The open new-time poll, ranked: GET /v1/me/series/{seriesId}/re-poll
Every option and who can’t make it. Team members; rate limited.
- Needs:
polls:read(not for credentials limited to some orgs) - CLI:
quorum series repoll get - MCP tool:
series_repoll_get - Returns:
200 object
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series repoll pick
Section titled “series repoll pick”Choose the new weekly time: POST /v1/me/series/{seriesId}/re-poll/pick
Closes the poll and moves the series to that slot now. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series repoll pick - MCP tool:
series_repoll_pick - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
optionId |
body | string (uuid) | yes |
series repoll start
Section titled “series repoll start”Poll the group for a new weekly time: POST /v1/me/series/{seriesId}/re-poll
Standing time only (Q60, Q67): a poll of the next two weeks of candidate times. When it closes, the best option becomes the new weekly slot: the old recurring event ends and a new one starts. One can be open at a time. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series repoll start - MCP tool:
series_repoll_start - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series resume
Section titled “series resume”Resume a paused series: POST /v1/me/series/{seriesId}/resume
Weeks whose polls have already closed are not made up; the series carries on from the next. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series resume - MCP tool:
series_resume - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series transfer
Section titled “series transfer”Hand a series to someone else: POST /v1/me/series/{seriesId}/transfer
Q65. A team’s series keeps its team and moves to another org member’s calendar; a person’s series becomes the new person’s, who must already be a member. The old owner’s required place passes to the new owner, and a standing event ends on the old calendar and starts on the new one from the next meeting. A series paused because its host left resumes.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series transfer - MCP tool:
series_transfer - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
userId |
body | string (uuid) | yes |
series update
Section titled “series update”Change a series’ settings: PATCH /v1/me/series/{seriesId}
The creator, the host or a team admin. A cadence change starts at the next period not yet made, so no week is made twice. For a standing-time series a new weekday, time or interval ends the recurring event after the last meeting before the new slot and starts a new one (the old event first stays until the new exists).
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series update - MCP tool:
series_update - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
title |
body | string | ||
description |
body | string | ||
durationMinutes |
body | integer | ||
timezone |
body | string | ||
meet |
body | boolean | ||
intervalWeeks |
body | integer | A period starts every this many weeks. Defaults to 1 (weekly) | |
startsOn |
body | string | The local date the first period starts on. A re-poll series defaults to the next Monday; a standing-time series to its first meeting | |
windowDays |
body | integer | How many days a period offers times on, at most the interval. Defaults to 7 | |
weekdays |
body | integer[] | Days a time may start on, 0 is Sunday. Defaults to Monday to Friday | |
windowStart |
body | string | Earliest start, local. Defaults to 09:00 | |
windowEnd |
body | string | Latest end, local. Defaults to 17:00 | |
intervalMinutes |
body | integer | How often a time may start. Defaults to 30 | |
timing |
body | “fixed” or “rolling” | Fixed (Q66): the poll opens and closes at set times before each period. Rolling: it opens when the previous meeting ends and closes 48 hours before the earliest option | |
openDaysBefore |
body | integer | Fixed timing: days before the period the poll opens. Defaults to 3 (Friday for a Monday period) | |
openTime |
body | string | HH:MM, local | |
closeDaysBefore |
body | integer | Fixed timing: days before the period the poll closes. Defaults to 2 (Saturday noon for a Monday period; one day leaves under the 24 hours a second round needs before a 09:00 start) | |
closeTime |
body | string | Defaults to 12:00 | |
respectBreaks |
body | boolean | Skip the org’s, team’s and personal breaks (Q63). Defaults to true | |
autoBook |
body | boolean | Book the best option by itself when the poll closes. Off leaves every week to the owner. Defaults to true | |
secondRound |
body | object | ||
declineRepoll |
body | object | ||
standingRepoll |
body | object | ||
declineThreshold |
body | integer | Required declines that count as the time not working. Defaults to 3 | |
declineWindow |
body | integer | …among this many of the latest meetings. Defaults to 6 | |
standingWeekday |
body | integer | Standing time: the day of the week the meeting is on, 0 is Sunday | |
standingTime |
body | string | Standing time: the meeting’s local start time. Defaults to the window start |
series weeks get
Section titled “series weeks get”One week with every option and who can’t make it: GET /v1/me/series/{seriesId}/occurrences/{occurrenceId}
When no option works for every required member (Q62), this is the fallback the owner picks from: every option, most people available first then the earlier date, each with the names of who can’t make it. States only, never a time or title from anyone’s calendar. Team members; rate limited.
- Needs:
polls:read(not for credentials limited to some orgs) - CLI:
quorum series weeks get - MCP tool:
series_weeks_get - Returns:
200 SeriesWeekDetail
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes |
series weeks keep
Section titled “series weeks keep”Keep a declined meeting as it is: POST /v1/me/series/{seriesId}/occurrences/{occurrenceId}/keep
Standing time only. The meeting stays at its usual time whoever declined. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series weeks keep - MCP tool:
series_weeks_keep - Returns:
200 SeriesWeek
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes |
series weeks list
Section titled “series weeks list”A series’ history: each week and what became of it: GET /v1/me/series/{seriesId}/occurrences
Team members. Newest first.
- Needs:
polls:read(not for credentials limited to some orgs) - CLI:
quorum series weeks list - MCP tool:
series_weeks_list - Returns:
200 object
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes |
series weeks pick
Section titled “series weeks pick”Pick the time for a week: POST /v1/me/series/{seriesId}/occurrences/{occurrenceId}/pick
Q62. Books the chosen option now: a re-poll series creates the event, a standing one moves that week’s meeting. Works from the owner’s fallback or at any time before the week is decided. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series weeks pick - MCP tool:
series_weeks_pick - Returns:
200 SeriesWeek
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes | |
optionId |
body | string (uuid) | yes |
series weeks repoll
Section titled “series weeks repoll”Start the automatic step for a week now: POST /v1/me/series/{seriesId}/occurrences/{occurrenceId}/re-poll
Re-poll series: the second round (Q62), asking only the required people. Standing time: a one-off poll for the week (Q67). Use it to approve a step set to ask, or to run one set to off. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series weeks repoll - MCP tool:
series_weeks_repoll - Returns:
200 SeriesWeek
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes |
series weeks skip
Section titled “series weeks skip”Skip a week: POST /v1/me/series/{seriesId}/occurrences/{occurrenceId}/skip
Q62, Q63. Nothing is booked for the week; a standing meeting is cancelled for it. The creator, the host or a team admin.
- Needs:
polls:write(not for credentials limited to some orgs) - CLI:
quorum series weeks skip - MCP tool:
series_weeks_skip - Returns:
200 SeriesWeek
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes |
team series breaks create
Section titled “team series breaks create”Add a break: POST /v1/orgs/{handle}/teams/{teamPath}/breaks
A team’s break applies to the team’s series; a person’s own to their series. Org-wide breaks are added at the org (Q63). Team admins; a person for themselves.
- Needs:
polls:write - CLI:
quorum team series breaks create - MCP tool:
team_series_breaks_create - Returns:
201 SeriesBreak
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
label |
body | string | yes | |
startsOn |
body | string | yes | |
endsOn |
body | string | yes |
team series breaks delete
Section titled “team series breaks delete”Remove a break: DELETE /v1/orgs/{handle}/teams/{teamPath}/breaks/{breakId}
Only the team’s or the person’s own; an org-wide break is removed at the org.
- Needs:
polls:write - CLI:
quorum team series breaks delete - MCP tool:
team_series_breaks_delete - Returns: no body
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
breakId |
path | string (uuid) | yes |
team series breaks list
Section titled “team series breaks list”Breaks that series skip: GET /v1/orgs/{handle}/teams/{teamPath}/breaks
Date ranges (inclusive) every series here skips unless it opts out (Q63). A team sees its org’s breaks and its own; a person their own.
- Needs:
polls:read - CLI:
quorum team series breaks list - MCP tool:
team_series_breaks_list - Returns:
200 object
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
team series create
Section titled “team series create”Start a recurring poll series: POST /v1/orgs/{handle}/teams/{teamPath}/series
A series is owned by you or this team and books into the host’s calendar. Re-poll makes a suggested poll for each period (opening and closing as timing says), prefilled from calendars, and books the best option at the deadline (Q58, Q61). Standing time keeps one recurring event and watches it for declines (Q60, Q67). Members are required or optional; people with an account are read only where they shared availability, and an outsider by address is asked by email (Q69). Everything automatic can be set to auto, ask or off (Q66).
- Needs:
polls:write - CLI:
quorum team series create - MCP tool:
team_series_create - Returns:
201 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
title |
body | string | yes | |
description |
body | string | ||
durationMinutes |
body | integer | yes | |
timezone |
body | string | yes | |
meet |
body | boolean | ||
intervalWeeks |
body | integer | A period starts every this many weeks. Defaults to 1 (weekly) | |
startsOn |
body | string | The local date the first period starts on. A re-poll series defaults to the next Monday; a standing-time series to its first meeting | |
windowDays |
body | integer | How many days a period offers times on, at most the interval. Defaults to 7 | |
weekdays |
body | integer[] | Days a time may start on, 0 is Sunday. Defaults to Monday to Friday | |
windowStart |
body | string | Earliest start, local. Defaults to 09:00 | |
windowEnd |
body | string | Latest end, local. Defaults to 17:00 | |
intervalMinutes |
body | integer | How often a time may start. Defaults to 30 | |
timing |
body | “fixed” or “rolling” | Fixed (Q66): the poll opens and closes at set times before each period. Rolling: it opens when the previous meeting ends and closes 48 hours before the earliest option | |
openDaysBefore |
body | integer | Fixed timing: days before the period the poll opens. Defaults to 3 (Friday for a Monday period) | |
openTime |
body | string | HH:MM, local | |
closeDaysBefore |
body | integer | Fixed timing: days before the period the poll closes. Defaults to 2 (Saturday noon for a Monday period; one day leaves under the 24 hours a second round needs before a 09:00 start) | |
closeTime |
body | string | Defaults to 12:00 | |
respectBreaks |
body | boolean | Skip the org’s, team’s and personal breaks (Q63). Defaults to true | |
autoBook |
body | boolean | Book the best option by itself when the poll closes. Off leaves every week to the owner. Defaults to true | |
secondRound |
body | object | ||
declineRepoll |
body | object | ||
standingRepoll |
body | object | ||
declineThreshold |
body | integer | Required declines that count as the time not working. Defaults to 3 | |
declineWindow |
body | integer | …among this many of the latest meetings. Defaults to 6 | |
mode |
body | “repoll” or “standing” | yes | Re-poll: a suggested poll each period, then the best option booked. Standing time: one recurring event, re-polled when it stops working. Fixed at creation |
standingWeekday |
body | integer | Standing time: the day of the week the meeting is on, 0 is Sunday | |
standingTime |
body | string | Standing time: the meeting’s local start time. Defaults to the window start | |
hostId |
body | string (uuid) | Whose calendar the events are booked into. Defaults to you; a team admin may name another team member | |
members |
body | PollAttendeeInput[] |
team series end
Section titled “team series end”End a series: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/end
Closes open polls and, for a standing time, ends the recurring event after today. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series end - MCP tool:
team_series_end - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes |
team series get
Section titled “team series get”A series with its members and settings: GET /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}
Team members.
- Needs:
polls:read - CLI:
quorum team series get - MCP tool:
team_series_get - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes |
team series list
Section titled “team series list”List recurring poll series: GET /v1/orgs/{handle}/teams/{teamPath}/series
Team members see the team’s series; a person sees their own.
- Needs:
polls:read - CLI:
quorum team series list - MCP tool:
team_series_list - Returns:
200 object
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
team series members add
Section titled “team series members add”Add a member to a series: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/members
Q68, Q69. Owners add members directly: an org or team member, someone who shared availability with this owner, or an outsider by address (email and name). An outsider is emailed to answer each poll; their calendar counts only after they turn on automatic answers for the series. Members apply from the next meeting. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series members add - MCP tool:
team_series_members_add - Returns:
201 SeriesMember
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
userId |
body | string (uuid) | A person with an account: an org or team member, or anyone who shared availability | |
email |
body | string (email) | Anyone else, by address. Quorum can’t see their calendar; they answer the poll | |
name |
body | string | Required with email | |
required |
body | boolean | Defaults to true (Q75) |
team series members remove
Section titled “team series members remove”Remove a member from a series: DELETE /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/members/{memberId}
They are no longer asked, and a standing event stops inviting them from the next meeting. Their automatic-answer grant for the series is taken back. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series members remove - MCP tool:
team_series_members_remove - Returns: no body
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
memberId |
path | string (uuid) | yes |
team series members update
Section titled “team series members update”Make a member required or optional: PATCH /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/members/{memberId}
The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series members update - MCP tool:
team_series_members_update - Returns:
200 SeriesMember
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
memberId |
path | string (uuid) | yes | |
required |
body | boolean | yes |
team series pause
Section titled “team series pause”Pause a series: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/pause
Nothing new is made or booked while it is paused; polls already open stay open and a standing event stays on the calendar. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series pause - MCP tool:
team_series_pause - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes |
team series repoll cancel
Section titled “team series repoll cancel”Cancel the open new-time poll: DELETE /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/re-poll
The weekly time stays as it is. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series repoll cancel - MCP tool:
team_series_repoll_cancel - Returns: no body
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes |
team series repoll get
Section titled “team series repoll get”The open new-time poll, ranked: GET /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/re-poll
Every option and who can’t make it. Team members; rate limited.
- Needs:
polls:read - CLI:
quorum team series repoll get - MCP tool:
team_series_repoll_get - Returns:
200 object
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes |
team series repoll pick
Section titled “team series repoll pick”Choose the new weekly time: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/re-poll/pick
Closes the poll and moves the series to that slot now. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series repoll pick - MCP tool:
team_series_repoll_pick - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
optionId |
body | string (uuid) | yes |
team series repoll start
Section titled “team series repoll start”Poll the group for a new weekly time: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/re-poll
Standing time only (Q60, Q67): a poll of the next two weeks of candidate times. When it closes, the best option becomes the new weekly slot: the old recurring event ends and a new one starts. One can be open at a time. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series repoll start - MCP tool:
team_series_repoll_start - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes |
team series resume
Section titled “team series resume”Resume a paused series: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/resume
Weeks whose polls have already closed are not made up; the series carries on from the next. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series resume - MCP tool:
team_series_resume - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes |
team series transfer
Section titled “team series transfer”Hand a series to someone else: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/transfer
Q65. A team’s series keeps its team and moves to another org member’s calendar; a person’s series becomes the new person’s, who must already be a member. The old owner’s required place passes to the new owner, and a standing event ends on the old calendar and starts on the new one from the next meeting. A series paused because its host left resumes.
- Needs:
polls:write - CLI:
quorum team series transfer - MCP tool:
team_series_transfer - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
userId |
body | string (uuid) | yes |
team series update
Section titled “team series update”Change a series’ settings: PATCH /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}
The creator, the host or a team admin. A cadence change starts at the next period not yet made, so no week is made twice. For a standing-time series a new weekday, time or interval ends the recurring event after the last meeting before the new slot and starts a new one (the old event first stays until the new exists).
- Needs:
polls:write - CLI:
quorum team series update - MCP tool:
team_series_update - Returns:
200 Series
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
title |
body | string | ||
description |
body | string | ||
durationMinutes |
body | integer | ||
timezone |
body | string | ||
meet |
body | boolean | ||
intervalWeeks |
body | integer | A period starts every this many weeks. Defaults to 1 (weekly) | |
startsOn |
body | string | The local date the first period starts on. A re-poll series defaults to the next Monday; a standing-time series to its first meeting | |
windowDays |
body | integer | How many days a period offers times on, at most the interval. Defaults to 7 | |
weekdays |
body | integer[] | Days a time may start on, 0 is Sunday. Defaults to Monday to Friday | |
windowStart |
body | string | Earliest start, local. Defaults to 09:00 | |
windowEnd |
body | string | Latest end, local. Defaults to 17:00 | |
intervalMinutes |
body | integer | How often a time may start. Defaults to 30 | |
timing |
body | “fixed” or “rolling” | Fixed (Q66): the poll opens and closes at set times before each period. Rolling: it opens when the previous meeting ends and closes 48 hours before the earliest option | |
openDaysBefore |
body | integer | Fixed timing: days before the period the poll opens. Defaults to 3 (Friday for a Monday period) | |
openTime |
body | string | HH:MM, local | |
closeDaysBefore |
body | integer | Fixed timing: days before the period the poll closes. Defaults to 2 (Saturday noon for a Monday period; one day leaves under the 24 hours a second round needs before a 09:00 start) | |
closeTime |
body | string | Defaults to 12:00 | |
respectBreaks |
body | boolean | Skip the org’s, team’s and personal breaks (Q63). Defaults to true | |
autoBook |
body | boolean | Book the best option by itself when the poll closes. Off leaves every week to the owner. Defaults to true | |
secondRound |
body | object | ||
declineRepoll |
body | object | ||
standingRepoll |
body | object | ||
declineThreshold |
body | integer | Required declines that count as the time not working. Defaults to 3 | |
declineWindow |
body | integer | …among this many of the latest meetings. Defaults to 6 | |
standingWeekday |
body | integer | Standing time: the day of the week the meeting is on, 0 is Sunday | |
standingTime |
body | string | Standing time: the meeting’s local start time. Defaults to the window start |
team series weeks get
Section titled “team series weeks get”One week with every option and who can’t make it: GET /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/occurrences/{occurrenceId}
When no option works for every required member (Q62), this is the fallback the owner picks from: every option, most people available first then the earlier date, each with the names of who can’t make it. States only, never a time or title from anyone’s calendar. Team members; rate limited.
- Needs:
polls:read - CLI:
quorum team series weeks get - MCP tool:
team_series_weeks_get - Returns:
200 SeriesWeekDetail
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes |
team series weeks keep
Section titled “team series weeks keep”Keep a declined meeting as it is: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/occurrences/{occurrenceId}/keep
Standing time only. The meeting stays at its usual time whoever declined. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series weeks keep - MCP tool:
team_series_weeks_keep - Returns:
200 SeriesWeek
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes |
team series weeks list
Section titled “team series weeks list”A series’ history: each week and what became of it: GET /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/occurrences
Team members. Newest first.
- Needs:
polls:read - CLI:
quorum team series weeks list - MCP tool:
team_series_weeks_list - Returns:
200 object
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes |
team series weeks pick
Section titled “team series weeks pick”Pick the time for a week: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/occurrences/{occurrenceId}/pick
Q62. Books the chosen option now: a re-poll series creates the event, a standing one moves that week’s meeting. Works from the owner’s fallback or at any time before the week is decided. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series weeks pick - MCP tool:
team_series_weeks_pick - Returns:
200 SeriesWeek
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes | |
optionId |
body | string (uuid) | yes |
team series weeks repoll
Section titled “team series weeks repoll”Start the automatic step for a week now: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/occurrences/{occurrenceId}/re-poll
Re-poll series: the second round (Q62), asking only the required people. Standing time: a one-off poll for the week (Q67). Use it to approve a step set to ask, or to run one set to off. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series weeks repoll - MCP tool:
team_series_weeks_repoll - Returns:
200 SeriesWeek
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes |
team series weeks skip
Section titled “team series weeks skip”Skip a week: POST /v1/orgs/{handle}/teams/{teamPath}/series/{seriesId}/occurrences/{occurrenceId}/skip
Q62, Q63. Nothing is booked for the week; a standing meeting is cancelled for it. The creator, the host or a team admin.
- Needs:
polls:write - CLI:
quorum team series weeks skip - MCP tool:
team_series_weeks_skip - Returns:
200 SeriesWeek
| Argument | In | Type | Required | Description |
|---|---|---|---|---|
handle |
path | string | yes | |
teamPath |
path | string | yes | The team’s slug or id |
seriesId |
path | string (uuid) | yes | |
occurrenceId |
path | string (uuid) | yes |