Creates a poll and responds with 201 Created and the full poll, exactly as GET /polls/:pollId returns it. Share inviteUrl with participants. The request mirrors the response: kind chooses what participants vote on, and options takes the same shape the poll returns, so a poll can be recreated from the body of a GET. A poll has at most 100 options.
Date poll
Pass kind: "date" and options, one { "date": "YYYY-MM-DD" } per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed.
Pass kind: "time", optionally a timeZone (an IANA zone the times are written in) and a default duration in minutes, and the slots as options, generators or both.
Explicit slots
Each entry in options is one slot: a startTime and an optional duration that overrides the poll default. A startTime with no offset, like 2027-03-01T09:00:00, is wall clock time in timeZone when that is set and a floating time with no conversion otherwise; one with an offset or Z is an absolute instant.
Each object in generators expands into recurring slots of duration minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. duration is required when generators is set.
This produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop interval and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30.
Field
Meaning
startDate, endDate
The date range, inclusive. Fewer than 366 days.
days
Days of the week to include: mon to sun. Optional; defaults to every day.
from
Earliest slot start on each day, HH:mm in timeZone.
to
End of the daily window, HH:mm in timeZone. A slot is only generated if it ends by this time. Must be later than from.
interval
Minutes between slot starts. Optional; defaults to duration, which gives back to back slots.
A generator that cannot produce a slot is rejected with VALIDATION_ERROR naming the field: to not later than from, a window shorter than duration, or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to options, and duplicate slots are removed. A request that would exceed 100 options fails with TOO_MANY_OPTIONS.
POST
/
v1
/
polls
curl --request POST \
--url https://api.rallly.co/v1/polls \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Team offsite",
"kind": "date",
"description": "Which days work for a two day offsite?",
"options": [
{
"date": "2027-03-01"
},
{
"date": "2027-03-02"
},
{
"date": "2027-03-03"
}
]
}
'
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Date poll
Time poll
kind chooses what participants vote on: whole days (date) or time slots (time). The request mirrors the poll the API returns: the same settings, and options in the same shape as the response.
The video call for the event. meet, zoom, teams and webex need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. custom names any call, with an optional link participants join with.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Rallly","colors":{"primary":"#4f46e5","light":"#847eed","dark":"#4f46e5"},"logo":{"light":"https://mintcdn.com/rallly/u-wzWrUsy5xDwUk7/logo/light.svg?fit=max\u0026auto=format\u0026n=u-wzWrUsy5xDwUk7\u0026q=85\u0026s=9d8170d558fae26f51d317bc7f8a04a7","dark":"https://mintcdn.com/rallly/u-wzWrUsy5xDwUk7/logo/dark.svg?fit=max\u0026auto=format\u0026n=u-wzWrUsy5xDwUk7\u0026q=85\u0026s=1a5f161a7b632f2983dfde47fc0487a3","href":"https://rallly.co"},"favicon":"https://mintcdn.com/rallly/dP6sNfH-SQIRaRNK/favicon.png?fit=max\u0026auto=format\u0026n=dP6sNfH-SQIRaRNK\u0026q=85\u0026s=10686e2de0ba649ff00567adc90e112a","background":{"color":{"light":"#FFFFFF","dark":"#18181B"}},"navbar":{"links":[{"href":"https://support.rallly.co/contact/support","label":"Contact"}],"primary":{"type":"button","label":"Go to app","href":"https://app.rallly.co"}},"footer":{"socials":{"twitter":"https://twitter.com/ralllyco","linkedin":"https://www.linkedin.com/company/rallly","github":"https://github.com/lukevella/rallly","discord":"https://discord.com/invite/uzg4ZcHbuM","website":"https://rallly.co/"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"rallly","hasAudioNarration":false,"actualSubdomain":"rallly","customDomains":["support.rallly.co"],"gitSource":{"type":"github","owner":"lukevella","repo":"rallly","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adb2349e96456ece5388140","collectionId":"dea35d53-e704-474d-9580-d22b17479a86","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adb2349e96456ece5388140"},"feedback":{"edits":true,"issues":true,"thumbs":true},"entitlements":{},"buildId":"6adb2349e96456ece5388140","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"Documentation","count":18},{"language":"default","tag":"API Reference","count":17},{"language":"default","tag":"Self-Hosting","count":12},{"language":"default","tag":"Get Started","count":7},{"language":"default","tag":"Polls","count":7},{"language":"default","tag":"Getting started","count":6},{"language":"default","tag":"Spaces","count":6},{"language":"default","tag":"Guides","count":5},{"language":"default","tag":"Contribute","count":5},{"language":"default","tag":"Webhooks","count":4}]},"assistantConfig":{},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":root{--gray-50:250 250 250;--gray-100:244 244 245;--gray-200:228 228 231;--gray-300:212 212 216;--gray-400:161 161 170;--gray-500:113 113 122;--gray-600:82 82 91;--gray-700:63 63 70;--gray-800:39 39 42;--gray-900:24 24 27;--gray-950:9 9 11}#content-area{color:rgb(39 39 42)}.dark #content-area,.dark #content-area h1,.dark #content-area h2,.dark #content-area h3,.dark #content-area h4{color:rgb(255 255 255)}.dark{--primary-light:132 126 237;--primary-dark:132 126 237}.dark .bg-primary-dark{background-color:rgb(132 126 237)}.dark #content-area .prose pre.shiki,.dark #content-area .prose pre.shiki span{background-color:var(--shiki-dark-bg)!important;color:var(--shiki-dark)!important}#content-area table td code,#content-area table th code{white-space:nowrap}"}],"page":{"pagePath":"api-reference/polls/create-a-poll","slug":"/api-reference/polls/create-a-poll","pageMetadata":{"title":"Create a poll","description":"Creates a poll and responds with `201 Created` and the full poll, exactly as `GET /polls/:pollId` returns it. Share `inviteUrl` with participants. The request mirrors the response: `kind` chooses what participants vote on, and `options` takes the same shape the poll returns, so a poll can be recreated from the body of a `GET`. A poll has at most 100 options.\n\n## Date poll\n\nPass `kind: \"date\"` and `options`, one `{ \"date\": \"YYYY-MM-DD\" }` per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed.\n\n```json\n{\n \"title\": \"Team offsite\",\n \"kind\": \"date\",\n \"options\": [{ \"date\": \"2027-03-01\" }, { \"date\": \"2027-03-02\" }, { \"date\": \"2027-03-03\" }]\n}\n```\n\n## Time poll\n\nPass `kind: \"time\"`, optionally a `timeZone` (an IANA zone the times are written in) and a default `duration` in minutes, and the slots as `options`, `generators` or both.\n\n### Explicit slots\n\nEach entry in `options` is one slot: a `startTime` and an optional `duration` that overrides the poll default. A `startTime` with no offset, like `2027-03-01T09:00:00`, is wall clock time in `timeZone` when that is set and a floating time with no conversion otherwise; one with an offset or `Z` is an absolute instant.\n\n```json\n{\n \"title\": \"Kickoff\",\n \"kind\": \"time\",\n \"timeZone\": \"Europe/London\",\n \"duration\": 60,\n \"options\": [\n { \"startTime\": \"2027-03-01T09:00:00\" },\n { \"startTime\": \"2027-03-02T14:00:00\", \"duration\": 90 }\n ]\n}\n```\n\n### Slot generators\n\nEach object in `generators` expands into recurring slots of `duration` minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. `duration` is required when `generators` is set.\n\n```json\n{\n \"title\": \"Interview availability\",\n \"kind\": \"time\",\n \"timeZone\": \"America/New_York\",\n \"duration\": 30,\n \"generators\": [\n {\n \"startDate\": \"2027-03-01\",\n \"endDate\": \"2027-03-05\",\n \"days\": [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\"],\n \"from\": \"09:00\",\n \"to\": \"12:00\",\n \"interval\": 60\n }\n ]\n}\n```\n\nThis produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop `interval` and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30.\n\n| Field | Meaning |\n| --- | --- |\n| `startDate`, `endDate` | The date range, inclusive. Fewer than 366 days. |\n| `days` | Days of the week to include: `mon` to `sun`. Optional; defaults to every day. |\n| `from` | Earliest slot start on each day, `HH:mm` in `timeZone`. |\n| `to` | End of the daily window, `HH:mm` in `timeZone`. A slot is only generated if it ends by this time. Must be later than `from`. |\n| `interval` | Minutes between slot starts. Optional; defaults to `duration`, which gives back to back slots. |\n\nA generator that cannot produce a slot is rejected with `VALIDATION_ERROR` naming the field: `to` not later than `from`, a window shorter than `duration`, or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to `options`, and duplicate slots are removed. A request that would exceed 100 options fails with `TOO_MANY_OPTIONS`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/polls","href":"/api-reference/polls/create-a-poll","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n h2: \"h2\",\n h3: \"h3\",\n p: \"p\",\n pre: \"pre\",\n span: \"span\",\n table: \"table\",\n tbody: \"tbody\",\n td: \"td\",\n th: \"th\",\n thead: \"thead\",\n tr: \"tr\",\n ..._provideComponents(),\n ...props.components\n }, {CodeBlock} = _components;\n if (!CodeBlock) _missingMdxReference(\"CodeBlock\", true);\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates a poll and responds with \", _jsx(_components.code, {\n children: \"201 Created\"\n }), \" and the full poll, exactly as \", _jsx(_components.code, {\n children: \"GET /polls/:pollId\"\n }), \" returns it. Share \", _jsx(_components.code, {\n children: \"inviteUrl\"\n }), \" with participants. The request mirrors the response: \", _jsx(_components.code, {\n children: \"kind\"\n }), \" chooses what participants vote on, and \", _jsx(_components.code, {\n children: \"options\"\n }), \" takes the same shape the poll returns, so a poll can be recreated from the body of a \", _jsx(_components.code, {\n children: \"GET\"\n }), \". A poll has at most 100 options.\"]\n }), \"\\n\", _jsx(_components.h2, {\n children: \"Date poll\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Pass \", _jsx(_components.code, {\n children: \"kind: \\\"date\\\"\"\n }), \" and \", _jsx(_components.code, {\n children: \"options\"\n }), \", one \", _jsx(_components.code, {\n children: \"{ \\\"date\\\": \\\"YYYY-MM-DD\\\" }\"\n }), \" per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed.\"]\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"5\",\n language: \"json\",\n children: _jsx(_components.pre, {\n className: \"shiki shiki-themes github-light-default dark-plus\",\n style: {\n backgroundColor: \"#ffffff\",\n \"--shiki-dark-bg\": \"#0B0C0E\",\n color: \"#1f2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n language: \"json\",\n children: _jsxs(_components.code, {\n language: \"json\",\n numberOfLines: \"5\",\n children: [_jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"{\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"title\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Team offsite\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"kind\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"date\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"options\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": [{ \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"date\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"2027-03-01\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" }, { \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"date\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"2027-03-02\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" }, { \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"date\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"2027-03-03\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" }]\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"}\"\n })\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsx(_components.h2, {\n children: \"Time poll\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Pass \", _jsx(_components.code, {\n children: \"kind: \\\"time\\\"\"\n }), \", optionally a \", _jsx(_components.code, {\n children: \"timeZone\"\n }), \" (an IANA zone the times are written in) and a default \", _jsx(_components.code, {\n children: \"duration\"\n }), \" in minutes, and the slots as \", _jsx(_components.code, {\n children: \"options\"\n }), \", \", _jsx(_components.code, {\n children: \"generators\"\n }), \" or both.\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Explicit slots\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Each entry in \", _jsx(_components.code, {\n children: \"options\"\n }), \" is one slot: a \", _jsx(_components.code, {\n children: \"startTime\"\n }), \" and an optional \", _jsx(_components.code, {\n children: \"duration\"\n }), \" that overrides the poll default. A \", _jsx(_components.code, {\n children: \"startTime\"\n }), \" with no offset, like \", _jsx(_components.code, {\n children: \"2027-03-01T09:00:00\"\n }), \", is wall clock time in \", _jsx(_components.code, {\n children: \"timeZone\"\n }), \" when that is set and a floating time with no conversion otherwise; one with an offset or \", _jsx(_components.code, {\n children: \"Z\"\n }), \" is an absolute instant.\"]\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"10\",\n language: \"json\",\n children: _jsx(_components.pre, {\n className: \"shiki shiki-themes github-light-default dark-plus\",\n style: {\n backgroundColor: \"#ffffff\",\n \"--shiki-dark-bg\": \"#0B0C0E\",\n color: \"#1f2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n language: \"json\",\n children: _jsxs(_components.code, {\n language: \"json\",\n numberOfLines: \"10\",\n children: [_jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"{\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"title\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Kickoff\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"kind\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"time\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"timeZone\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Europe/London\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"duration\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#B5CEA8\"\n },\n children: \"60\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"options\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": [\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" { \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"startTime\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"2027-03-01T09:00:00\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" },\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" { \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"startTime\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"2027-03-02T14:00:00\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"\\\"duration\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#B5CEA8\"\n },\n children: \"90\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" }\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" ]\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"}\"\n })\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Slot generators\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Each object in \", _jsx(_components.code, {\n children: \"generators\"\n }), \" expands into recurring slots of \", _jsx(_components.code, {\n children: \"duration\"\n }), \" minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. \", _jsx(_components.code, {\n children: \"duration\"\n }), \" is required when \", _jsx(_components.code, {\n children: \"generators\"\n }), \" is set.\"]\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"16\",\n language: \"json\",\n children: _jsx(_components.pre, {\n className: \"shiki shiki-themes github-light-default dark-plus\",\n style: {\n backgroundColor: \"#ffffff\",\n \"--shiki-dark-bg\": \"#0B0C0E\",\n color: \"#1f2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n language: \"json\",\n children: _jsxs(_components.code, {\n language: \"json\",\n numberOfLines: \"16\",\n children: [_jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"{\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"title\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"Interview availability\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"kind\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"time\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"timeZone\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"America/New_York\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"duration\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#B5CEA8\"\n },\n children: \"30\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"generators\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": [\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"startDate\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"2027-03-01\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"endDate\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"2027-03-05\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"days\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": [\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"mon\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"tue\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"wed\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"thu\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"fri\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"],\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"from\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"09:00\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"to\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"\\\"12:00\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \",\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#116329\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" \\\"interval\\\"\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \": \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#B5CEA8\"\n },\n children: \"60\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" }\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" ]\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"}\"\n })\n }), \"\\n\"]\n })\n })\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"This produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop \", _jsx(_components.code, {\n children: \"interval\"\n }), \" and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30.\"]\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"Field\"\n }), _jsx(_components.th, {\n children: \"Meaning\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [_jsx(_components.code, {\n children: \"startDate\"\n }), \", \", _jsx(_components.code, {\n children: \"endDate\"\n })]\n }), _jsx(_components.td, {\n children: \"The date range, inclusive. Fewer than 366 days.\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"days\"\n })\n }), _jsxs(_components.td, {\n children: [\"Days of the week to include: \", _jsx(_components.code, {\n children: \"mon\"\n }), \" to \", _jsx(_components.code, {\n children: \"sun\"\n }), \". Optional; defaults to every day.\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"from\"\n })\n }), _jsxs(_components.td, {\n children: [\"Earliest slot start on each day, \", _jsx(_components.code, {\n children: \"HH:mm\"\n }), \" in \", _jsx(_components.code, {\n children: \"timeZone\"\n }), \".\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"to\"\n })\n }), _jsxs(_components.td, {\n children: [\"End of the daily window, \", _jsx(_components.code, {\n children: \"HH:mm\"\n }), \" in \", _jsx(_components.code, {\n children: \"timeZone\"\n }), \". A slot is only generated if it ends by this time. Must be later than \", _jsx(_components.code, {\n children: \"from\"\n }), \".\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"interval\"\n })\n }), _jsxs(_components.td, {\n children: [\"Minutes between slot starts. Optional; defaults to \", _jsx(_components.code, {\n children: \"duration\"\n }), \", which gives back to back slots.\"]\n })]\n })]\n })]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A generator that cannot produce a slot is rejected with \", _jsx(_components.code, {\n children: \"VALIDATION_ERROR\"\n }), \" naming the field: \", _jsx(_components.code, {\n children: \"to\"\n }), \" not later than \", _jsx(_components.code, {\n children: \"from\"\n }), \", a window shorter than \", _jsx(_components.code, {\n children: \"duration\"\n }), \", or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to \", _jsx(_components.code, {\n children: \"options\"\n }), \", and duplicate slots are removed. A request that would exceed 100 options fails with \", _jsx(_components.code, {\n children: \"TOO_MANY_OPTIONS\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\n}\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create a poll","description":"Creates a poll and responds with `201 Created` and the full poll, exactly as `GET /polls/:pollId` returns it. Share `inviteUrl` with participants. The request mirrors the response: `kind` chooses what participants vote on, and `options` takes the same shape the poll returns, so a poll can be recreated from the body of a `GET`. A poll has at most 100 options.\n\n## Date poll\n\nPass `kind: \"date\"` and `options`, one `{ \"date\": \"YYYY-MM-DD\" }` per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed.\n\n```json\n{\n \"title\": \"Team offsite\",\n \"kind\": \"date\",\n \"options\": [{ \"date\": \"2027-03-01\" }, { \"date\": \"2027-03-02\" }, { \"date\": \"2027-03-03\" }]\n}\n```\n\n## Time poll\n\nPass `kind: \"time\"`, optionally a `timeZone` (an IANA zone the times are written in) and a default `duration` in minutes, and the slots as `options`, `generators` or both.\n\n### Explicit slots\n\nEach entry in `options` is one slot: a `startTime` and an optional `duration` that overrides the poll default. A `startTime` with no offset, like `2027-03-01T09:00:00`, is wall clock time in `timeZone` when that is set and a floating time with no conversion otherwise; one with an offset or `Z` is an absolute instant.\n\n```json\n{\n \"title\": \"Kickoff\",\n \"kind\": \"time\",\n \"timeZone\": \"Europe/London\",\n \"duration\": 60,\n \"options\": [\n { \"startTime\": \"2027-03-01T09:00:00\" },\n { \"startTime\": \"2027-03-02T14:00:00\", \"duration\": 90 }\n ]\n}\n```\n\n### Slot generators\n\nEach object in `generators` expands into recurring slots of `duration` minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. `duration` is required when `generators` is set.\n\n```json\n{\n \"title\": \"Interview availability\",\n \"kind\": \"time\",\n \"timeZone\": \"America/New_York\",\n \"duration\": 30,\n \"generators\": [\n {\n \"startDate\": \"2027-03-01\",\n \"endDate\": \"2027-03-05\",\n \"days\": [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\"],\n \"from\": \"09:00\",\n \"to\": \"12:00\",\n \"interval\": 60\n }\n ]\n}\n```\n\nThis produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop `interval` and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30.\n\n| Field | Meaning |\n| --- | --- |\n| `startDate`, `endDate` | The date range, inclusive. Fewer than 366 days. |\n| `days` | Days of the week to include: `mon` to `sun`. Optional; defaults to every day. |\n| `from` | Earliest slot start on each day, `HH:mm` in `timeZone`. |\n| `to` | End of the daily window, `HH:mm` in `timeZone`. A slot is only generated if it ends by this time. Must be later than `from`. |\n| `interval` | Minutes between slot starts. Optional; defaults to `duration`, which gives back to back slots. |\n\nA generator that cannot produce a slot is rejected with `VALIDATION_ERROR` naming the field: `to` not later than `from`, a window shorter than `duration`, or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to `options`, and duplicate slots are removed. A request that would exceed 100 options fails with `TOO_MANY_OPTIONS`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/polls","href":"/api-reference/polls/create-a-poll","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"postV1Polls","tags":["Polls"],"summary":"Create a poll","description":"Creates a poll and responds with `201 Created` and the full poll, exactly as `GET /polls/:pollId` returns it. Share `inviteUrl` with participants. The request mirrors the response: `kind` chooses what participants vote on, and `options` takes the same shape the poll returns, so a poll can be recreated from the body of a `GET`. A poll has at most 100 options.\n\n## Date poll\n\nPass `kind: \"date\"` and `options`, one `{ \"date\": \"YYYY-MM-DD\" }` per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed.\n\n```json\n{\n \"title\": \"Team offsite\",\n \"kind\": \"date\",\n \"options\": [{ \"date\": \"2027-03-01\" }, { \"date\": \"2027-03-02\" }, { \"date\": \"2027-03-03\" }]\n}\n```\n\n## Time poll\n\nPass `kind: \"time\"`, optionally a `timeZone` (an IANA zone the times are written in) and a default `duration` in minutes, and the slots as `options`, `generators` or both.\n\n### Explicit slots\n\nEach entry in `options` is one slot: a `startTime` and an optional `duration` that overrides the poll default. A `startTime` with no offset, like `2027-03-01T09:00:00`, is wall clock time in `timeZone` when that is set and a floating time with no conversion otherwise; one with an offset or `Z` is an absolute instant.\n\n```json\n{\n \"title\": \"Kickoff\",\n \"kind\": \"time\",\n \"timeZone\": \"Europe/London\",\n \"duration\": 60,\n \"options\": [\n { \"startTime\": \"2027-03-01T09:00:00\" },\n { \"startTime\": \"2027-03-02T14:00:00\", \"duration\": 90 }\n ]\n}\n```\n\n### Slot generators\n\nEach object in `generators` expands into recurring slots of `duration` minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. `duration` is required when `generators` is set.\n\n```json\n{\n \"title\": \"Interview availability\",\n \"kind\": \"time\",\n \"timeZone\": \"America/New_York\",\n \"duration\": 30,\n \"generators\": [\n {\n \"startDate\": \"2027-03-01\",\n \"endDate\": \"2027-03-05\",\n \"days\": [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\"],\n \"from\": \"09:00\",\n \"to\": \"12:00\",\n \"interval\": 60\n }\n ]\n}\n```\n\nThis produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop `interval` and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30.\n\n| Field | Meaning |\n| --- | --- |\n| `startDate`, `endDate` | The date range, inclusive. Fewer than 366 days. |\n| `days` | Days of the week to include: `mon` to `sun`. Optional; defaults to every day. |\n| `from` | Earliest slot start on each day, `HH:mm` in `timeZone`. |\n| `to` | End of the daily window, `HH:mm` in `timeZone`. A slot is only generated if it ends by this time. Must be later than `from`. |\n| `interval` | Minutes between slot starts. Optional; defaults to `duration`, which gives back to back slots. |\n\nA generator that cannot produce a slot is rejected with `VALIDATION_ERROR` naming the field: `to` not later than `from`, a window shorter than `duration`, or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to `options`, and duplicate slots are removed. A request that would exceed 100 options fails with `TOO_MANY_OPTIONS`.","security":["b192e996-2914-42c7-9f73-d7008ceff0d2"],"responses":{"201":"19614a30-5456-4dab-a99c-7e61e2fdd538","400":"3db3ebbb-b871-468c-9096-ca0b3edac017","401":"a9bb151f-3559-42e7-a618-024491dd45c6","403":"09426c2d-c180-44b3-b062-8bc2159bb369","429":"2554830d-84fa-48ed-81de-74b085baa4bb","503":"d9366f1b-2b2a-4857-88df-c99b6d37c441"},"requestBody":"31bcf717-c4b4-4cd3-b43e-4f00854d3cba","method":"post","type":"path","servers":["8e26f361-777b-4ae8-8351-c7fd7bdb86b4"],"path":"/v1/polls","baseUrlOptions":["https://api.rallly.co"],"title":"Create a poll","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Date poll","description":"`kind` chooses what participants vote on: whole days (`date`) or time slots (`time`). The request mirrors the poll the API returns: the same settings, and `options` in the same shape as the response.","required":["title","kind","options"],"properties":{"title":{"type":"string","minLength":1,"maxLength":255,"example":"Team sync","isRequired":true,"uniqueKey":"oneOf.0.title","typeLabel":"string"},"kind":{"type":"string","const":"date","description":"Participants vote on whole days.","isRequired":true,"uniqueKey":"oneOf.0.kind","typeLabel":"string"},"options":{"minItems":1,"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date","description":"Calendar day to offer, as a floating `YYYY-MM-DD` date.","example":"2027-03-01","isRequired":true,"uniqueKey":"oneOf.0.options.items.[INDEX].date","typeLabel":"string\u003cdate>"}},"required":["date"],"additionalProperties":false,"title":"Date option","description":"One all-day option. The same shape `DateOption` returns.","uniqueKey":"oneOf.0.options.items.[INDEX]","typeLabel":"Date option · object"},"description":"Calendar days to offer. Dates are floating calendar days with no timezone, so never convert them through one. Duplicates are removed.","isRequired":true,"uniqueKey":"oneOf.0.options","typeLabel":"Date option · object[]"},"description":{"example":"Pick a time that works for everyone","type":"string","maxLength":1000,"uniqueKey":"oneOf.0.description","typeLabel":"string"},"location":{"description":"Where the event takes place, as free text.","example":"Conference Room A","type":"string","maxLength":255,"uniqueKey":"oneOf.0.location","typeLabel":"string"},"conferencing":{"oneOf":[{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"meet","isRequired":true,"uniqueKey":"oneOf.0.conferencing.oneOf.0.provider","typeLabel":"string"}},"uniqueKey":"oneOf.0.conferencing.oneOf.0","typeLabel":"object"},{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"zoom","isRequired":true,"uniqueKey":"oneOf.0.conferencing.oneOf.1.provider","typeLabel":"string"}},"uniqueKey":"oneOf.0.conferencing.oneOf.1","typeLabel":"object"},{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"teams","isRequired":true,"uniqueKey":"oneOf.0.conferencing.oneOf.2.provider","typeLabel":"string"}},"uniqueKey":"oneOf.0.conferencing.oneOf.2","typeLabel":"object"},{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"webex","isRequired":true,"uniqueKey":"oneOf.0.conferencing.oneOf.3.provider","typeLabel":"string"}},"uniqueKey":"oneOf.0.conferencing.oneOf.3","typeLabel":"object"},{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider","label"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"custom","isRequired":true,"uniqueKey":"oneOf.0.conferencing.oneOf.4.provider","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":100,"isRequired":true,"uniqueKey":"oneOf.0.conferencing.oneOf.4.label","typeLabel":"string"},"uri":{"type":"string","format":"uri","uniqueKey":"oneOf.0.conferencing.oneOf.4.uri","typeLabel":"string\u003curi>"}},"uniqueKey":"oneOf.0.conferencing.oneOf.4","typeLabel":"object"}],"uniqueKey":"oneOf.0.conferencing","typeLabel":"object"},"requireEmail":{"description":"Require participants to provide their email address","example":true,"type":"boolean","uniqueKey":"oneOf.0.requireEmail","typeLabel":"boolean"},"hideParticipants":{"description":"Hide participant names from other participants","example":false,"type":"boolean","uniqueKey":"oneOf.0.hideParticipants","typeLabel":"boolean"},"hideScores":{"description":"Hide vote counts from participants","example":false,"type":"boolean","uniqueKey":"oneOf.0.hideScores","typeLabel":"boolean"},"disableComments":{"description":"Disable the comments section. Defaults to true: new polls have comments disabled unless this is set to false.","example":false,"type":"boolean","uniqueKey":"oneOf.0.disableComments","typeLabel":"boolean"},"allowTentativeVotes":{"description":"Allow participants to answer \"if need be\" as well as yes and no. Defaults to true.","example":true,"type":"boolean","uniqueKey":"oneOf.0.allowTentativeVotes","typeLabel":"boolean"},"organizer":{"description":"Organizer of the poll. Defaults to the space owner if not provided. The organizer must be a member of the space.","type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address of the organizer","example":"organizer@example.com","isRequired":true,"uniqueKey":"oneOf.0.organizer.email","typeLabel":"string\u003cemail>"}},"required":["email"],"additionalProperties":false,"uniqueKey":"oneOf.0.organizer","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"Date poll · object"},{"type":"object","title":"Time poll","description":"`kind` chooses what participants vote on: whole days (`date`) or time slots (`time`). The request mirrors the poll the API returns: the same settings, and `options` in the same shape as the response.","required":["title","kind"],"properties":{"title":{"type":"string","minLength":1,"maxLength":255,"example":"Team sync","isRequired":true,"uniqueKey":"oneOf.1.title","typeLabel":"string"},"kind":{"type":"string","const":"time","description":"Participants vote on time slots.","isRequired":true,"uniqueKey":"oneOf.1.kind","typeLabel":"string"},"description":{"example":"Pick a time that works for everyone","type":"string","maxLength":1000,"uniqueKey":"oneOf.1.description","typeLabel":"string"},"location":{"description":"Where the event takes place, as free text.","example":"Conference Room A","type":"string","maxLength":255,"uniqueKey":"oneOf.1.location","typeLabel":"string"},"conferencing":{"oneOf":[{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"meet","isRequired":true,"uniqueKey":"oneOf.1.conferencing.oneOf.0.provider","typeLabel":"string"}},"uniqueKey":"oneOf.1.conferencing.oneOf.0","typeLabel":"object"},{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"zoom","isRequired":true,"uniqueKey":"oneOf.1.conferencing.oneOf.1.provider","typeLabel":"string"}},"uniqueKey":"oneOf.1.conferencing.oneOf.1","typeLabel":"object"},{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"teams","isRequired":true,"uniqueKey":"oneOf.1.conferencing.oneOf.2.provider","typeLabel":"string"}},"uniqueKey":"oneOf.1.conferencing.oneOf.2","typeLabel":"object"},{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"webex","isRequired":true,"uniqueKey":"oneOf.1.conferencing.oneOf.3.provider","typeLabel":"string"}},"uniqueKey":"oneOf.1.conferencing.oneOf.3","typeLabel":"object"},{"type":"object","description":"The video call for the event. `meet`, `zoom`, `teams` and `webex` need the organizer to have connected that account in their Conferencing settings; the meeting link is created when the poll is finalized. `custom` names any call, with an optional link participants join with.","required":["provider","label"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"custom","isRequired":true,"uniqueKey":"oneOf.1.conferencing.oneOf.4.provider","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":100,"isRequired":true,"uniqueKey":"oneOf.1.conferencing.oneOf.4.label","typeLabel":"string"},"uri":{"type":"string","format":"uri","uniqueKey":"oneOf.1.conferencing.oneOf.4.uri","typeLabel":"string\u003curi>"}},"uniqueKey":"oneOf.1.conferencing.oneOf.4","typeLabel":"object"}],"uniqueKey":"oneOf.1.conferencing","typeLabel":"object"},"requireEmail":{"description":"Require participants to provide their email address","example":true,"type":"boolean","uniqueKey":"oneOf.1.requireEmail","typeLabel":"boolean"},"hideParticipants":{"description":"Hide participant names from other participants","example":false,"type":"boolean","uniqueKey":"oneOf.1.hideParticipants","typeLabel":"boolean"},"hideScores":{"description":"Hide vote counts from participants","example":false,"type":"boolean","uniqueKey":"oneOf.1.hideScores","typeLabel":"boolean"},"disableComments":{"description":"Disable the comments section. Defaults to true: new polls have comments disabled unless this is set to false.","example":false,"type":"boolean","uniqueKey":"oneOf.1.disableComments","typeLabel":"boolean"},"allowTentativeVotes":{"description":"Allow participants to answer \"if need be\" as well as yes and no. Defaults to true.","example":true,"type":"boolean","uniqueKey":"oneOf.1.allowTentativeVotes","typeLabel":"boolean"},"organizer":{"description":"Organizer of the poll. Defaults to the space owner if not provided. The organizer must be a member of the space.","type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address of the organizer","example":"organizer@example.com","isRequired":true,"uniqueKey":"oneOf.1.organizer.email","typeLabel":"string\u003cemail>"}},"required":["email"],"additionalProperties":false,"uniqueKey":"oneOf.1.organizer","typeLabel":"object"},"timeZone":{"description":"IANA time zone the times are written in. Datetime strings without an offset are interpreted in this zone. If omitted, offset-less datetimes are floating times (no conversion) and the poll has no time zone.","example":"Europe/London","type":"string","uniqueKey":"oneOf.1.timeZone","typeLabel":"string"},"duration":{"description":"Default slot length in minutes. Required when `generators` is set or an option omits its own `duration`.","example":30,"type":"integer","minimum":15,"maximum":1440,"uniqueKey":"oneOf.1.duration","typeLabel":"integer"},"options":{"description":"Explicit slots. Provide `options`, `generators` or both. Duplicates are removed.","minItems":1,"type":"array","items":{"type":"object","properties":{"startTime":{"type":"string","format":"date-time","description":"ISO datetime start time. A string without an offset is wall clock time in `timeZone` when that is set (`2027-03-01T09:00:00` with `timeZone: Europe/London` means 09:00 in London) and a floating time with no conversion otherwise. A string with an offset or `Z` is an absolute instant.","example":"2027-03-01T09:00:00","isRequired":true,"uniqueKey":"oneOf.1.options.items.[INDEX].startTime","typeLabel":"string\u003cdate-time>"},"duration":{"description":"Length of this slot in minutes. Defaults to the poll's `duration`.","example":30,"type":"integer","minimum":15,"maximum":1440,"uniqueKey":"oneOf.1.options.items.[INDEX].duration","typeLabel":"integer"}},"required":["startTime"],"additionalProperties":false,"title":"Time option","description":"One time slot. The same shape `TimeOption` returns.","uniqueKey":"oneOf.1.options.items.[INDEX]","typeLabel":"Time option · object"},"uniqueKey":"oneOf.1.options","typeLabel":"Time option · object[]"},"generators":{"description":"Slot generators. Each expands into recurring slots from a schedule and the result is appended to `options`.","minItems":1,"type":"array","items":{"type":"object","properties":{"startDate":{"type":"string","format":"date","description":"First day of the range to generate slots on, inclusive.","example":"2027-03-01","isRequired":true,"uniqueKey":"oneOf.1.generators.items.[INDEX].startDate","typeLabel":"string\u003cdate>"},"endDate":{"type":"string","format":"date","description":"Last day of the range, inclusive. The range must span fewer than 366 days.","example":"2027-03-05","isRequired":true,"uniqueKey":"oneOf.1.generators.items.[INDEX].endDate","typeLabel":"string\u003cdate>"},"from":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","description":"Earliest slot start on each day, as a wall clock time in `timeZone`.","example":"09:00","isRequired":true,"uniqueKey":"oneOf.1.generators.items.[INDEX].from","typeLabel":"string"},"to":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$","description":"End of the daily window, as a wall clock time in `timeZone`. A slot is only generated if it ends at or before this time.","example":"17:00","isRequired":true,"uniqueKey":"oneOf.1.generators.items.[INDEX].to","typeLabel":"string"},"days":{"default":["mon","tue","wed","thu","fri","sat","sun"],"description":"Days of the week to generate slots on. Days in the range that are not listed are skipped. Defaults to every day.","example":["mon","tue","wed","thu","fri"],"minItems":1,"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"],"uniqueKey":"oneOf.1.generators.items.[INDEX].days.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"oneOf.1.generators.items.[INDEX].days","typeLabel":"enum\u003cstring>[]"},"interval":{"description":"Minutes between consecutive slot starts. Defaults to `duration`, which produces back to back slots.","example":60,"type":"integer","minimum":15,"maximum":1440,"uniqueKey":"oneOf.1.generators.items.[INDEX].interval","typeLabel":"integer"}},"required":["startDate","endDate","from","to"],"additionalProperties":false,"title":"Slot generator","description":"Expands into one slot of `duration` minutes every `interval` minutes between `from` and `to`, on each listed day of the week between `startDate` and `endDate`. Slots that would not end by `to` are not generated.","uniqueKey":"oneOf.1.generators.items.[INDEX]","typeLabel":"Slot generator · object"},"uniqueKey":"oneOf.1.generators","typeLabel":"Slot generator · object[]"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"Time poll · object"}],"uniqueKey":"","typeLabel":"Date poll · object | Time poll · object"},"examples":{"Date poll":{"title":"Date poll","description":"Let participants pick between calendar days. Each option is one all-day date.","value":{"title":"Team offsite","kind":"date","description":"Which days work for a two day offsite?","options":[{"date":"2027-03-01"},{"date":"2027-03-02"},{"date":"2027-03-03"}]}},"Time poll with explicit slots":{"title":"Time poll with explicit slots","description":"Offer specific time slots. Datetimes without an offset are wall clock times in `timeZone`; this example offers 09:00 and 14:00 in London. Append `Z` or an offset for an absolute instant instead. A slot may override the poll's `duration`.","value":{"title":"Project kickoff","kind":"time","location":"Zoom","timeZone":"Europe/London","duration":60,"options":[{"startTime":"2027-03-01T09:00:00"},{"startTime":"2027-03-01T14:00:00","duration":90}]}},"Time poll with a slot generator":{"title":"Time poll with a slot generator","description":"Expand recurring slots across a date range. This example generates 30 minute slots at 09:00, 10:00 and 11:00 (New York time) every weekday from 1 to 5 March.","value":{"title":"Interview availability","kind":"time","timeZone":"America/New_York","duration":30,"generators":[{"startDate":"2027-03-01","endDate":"2027-03-05","days":["mon","tue","wed","thu","fri"],"from":"09:00","to":"12:00","interval":60}]}},"Time poll mixing slots and a generator":{"title":"Time poll mixing slots and a generator","description":"`options` and `generators` combine. When `interval` is omitted it defaults to `duration`, so this generator produces back to back 90 minute slots at 14:00 and 15:30 on Monday and Wednesday.","value":{"title":"Product workshop","kind":"time","timeZone":"Europe/Berlin","duration":90,"options":[{"startTime":"2027-03-06T10:00:00"}],"generators":[{"startDate":"2027-03-08","endDate":"2027-03-10","days":["mon","wed"],"from":"14:00","to":"17:00"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"19614a30-5456-4dab-a99c-7e61e2fdd538":{"description":"Poll created","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","example":"Xk3pQ9vLm2Ab","isRequired":true,"uniqueKey":"data.id","typeLabel":"string"},"title":{"type":"string","example":"Team sync","isRequired":true,"uniqueKey":"data.title","typeLabel":"string"},"description":{"oneOf":[{"type":"string","example":"Pick a time that works for everyone","isRequired":true,"uniqueKey":"data.description.oneOf.0","typeLabel":"string"},{"type":"null","example":"Pick a time that works for everyone","isRequired":true,"uniqueKey":"data.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.description","typeLabel":"string | null"},"location":{"oneOf":[{"type":"string","example":"Conference Room A","isRequired":true,"uniqueKey":"data.location.oneOf.0","typeLabel":"string"},{"type":"null","example":"Conference Room A","isRequired":true,"uniqueKey":"data.location.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.location","typeLabel":"string | null"},"conferencing":{"oneOf":[{"type":"object","description":"The video call for the event, or `null`. A `meet`, `zoom`, `teams` or `webex` entry has no link until the poll is finalized; a `custom` entry carries the organizer's label and, when given, the link.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"meet","isRequired":true,"uniqueKey":"data.conferencing.oneOf.0.provider","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.conferencing.oneOf.0","typeLabel":"object"},{"type":"object","description":"The video call for the event, or `null`. A `meet`, `zoom`, `teams` or `webex` entry has no link until the poll is finalized; a `custom` entry carries the organizer's label and, when given, the link.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"zoom","isRequired":true,"uniqueKey":"data.conferencing.oneOf.1.provider","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.conferencing.oneOf.1","typeLabel":"object"},{"type":"object","description":"The video call for the event, or `null`. A `meet`, `zoom`, `teams` or `webex` entry has no link until the poll is finalized; a `custom` entry carries the organizer's label and, when given, the link.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"teams","isRequired":true,"uniqueKey":"data.conferencing.oneOf.2.provider","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.conferencing.oneOf.2","typeLabel":"object"},{"type":"object","description":"The video call for the event, or `null`. A `meet`, `zoom`, `teams` or `webex` entry has no link until the poll is finalized; a `custom` entry carries the organizer's label and, when given, the link.","required":["provider"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"webex","isRequired":true,"uniqueKey":"data.conferencing.oneOf.3.provider","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.conferencing.oneOf.3","typeLabel":"object"},{"type":"object","description":"The video call for the event, or `null`. A `meet`, `zoom`, `teams` or `webex` entry has no link until the poll is finalized; a `custom` entry carries the organizer's label and, when given, the link.","required":["provider","label"],"example":{"provider":"zoom"},"properties":{"provider":{"type":"string","const":"custom","isRequired":true,"uniqueKey":"data.conferencing.oneOf.4.provider","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":100,"isRequired":true,"uniqueKey":"data.conferencing.oneOf.4.label","typeLabel":"string"},"uri":{"type":"string","format":"uri","uniqueKey":"data.conferencing.oneOf.4.uri","typeLabel":"string\u003curi>"}},"isRequired":true,"uniqueKey":"data.conferencing.oneOf.4","typeLabel":"object"},{"type":"null","description":"The video call for the event, or `null`. A `meet`, `zoom`, `teams` or `webex` entry has no link until the poll is finalized; a `custom` entry carries the organizer's label and, when given, the link.","example":{"provider":"zoom"},"isRequired":true,"uniqueKey":"data.conferencing.oneOf.5","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.conferencing","typeLabel":"object · object · object · object · object · null"},"timeZone":{"oneOf":[{"type":"string","example":"Europe/London","isRequired":true,"uniqueKey":"data.timeZone.oneOf.0","typeLabel":"string"},{"type":"null","example":"Europe/London","isRequired":true,"uniqueKey":"data.timeZone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.timeZone","typeLabel":"string | null"},"status":{"type":"string","enum":["open","closed","scheduled","canceled"],"isRequired":true,"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","enum":["date","time"],"description":"Whether the poll offers calendar dates (`date`) or time slots (`time`). Determines which option shape the poll uses: every option in a `date` poll has a `date`, every option in a `time` poll has a `startTime` and `duration`.","example":"time","isRequired":true,"uniqueKey":"data.kind","typeLabel":"enum\u003cstring>"},"createdAt":{"type":"string","format":"date-time","example":"2025-01-10T12:00:00.000Z","isRequired":true,"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"When the poll was last modified. Changes when the poll's details, settings or status change.","example":"2025-01-12T08:30:00.000Z","isRequired":true,"uniqueKey":"data.updatedAt","typeLabel":"string\u003cdate-time>"},"organizer":{"oneOf":[{"type":"object","description":"The space member the poll belongs to. `null` when the organizer's account no longer exists.","required":["id","name","email","image"],"properties":{"id":{"type":"string","example":"cm3f7d1qa0000t2k9c6b8h4jr","isRequired":true,"uniqueKey":"data.organizer.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","example":"John Doe","isRequired":true,"uniqueKey":"data.organizer.oneOf.0.name","typeLabel":"string"},"email":{"type":"string","format":"email","example":"organizer@example.com","isRequired":true,"uniqueKey":"data.organizer.oneOf.0.email","typeLabel":"string\u003cemail>"},"image":{"oneOf":[{"type":"string","example":"https://cdn.rallly.co/avatars/cm3f7d1qa0000t2k9c6b8h4jr.jpg","isRequired":true,"uniqueKey":"data.organizer.oneOf.0.image.oneOf.0","typeLabel":"string"},{"type":"null","example":"https://cdn.rallly.co/avatars/cm3f7d1qa0000t2k9c6b8h4jr.jpg","isRequired":true,"uniqueKey":"data.organizer.oneOf.0.image.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.organizer.oneOf.0.image","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.organizer.oneOf.0","typeLabel":"object"},{"type":"null","description":"The space member the poll belongs to. `null` when the organizer's account no longer exists.","isRequired":true,"uniqueKey":"data.organizer.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.organizer","typeLabel":"object | null"},"requireEmail":{"type":"boolean","description":"Whether participants must provide their email address","example":false,"isRequired":true,"uniqueKey":"data.requireEmail","typeLabel":"boolean"},"hideParticipants":{"type":"boolean","description":"Whether participant names are hidden from other participants","example":false,"isRequired":true,"uniqueKey":"data.hideParticipants","typeLabel":"boolean"},"hideScores":{"type":"boolean","description":"Whether vote counts are hidden from participants","example":false,"isRequired":true,"uniqueKey":"data.hideScores","typeLabel":"boolean"},"disableComments":{"type":"boolean","description":"Whether the comments section is disabled","example":true,"isRequired":true,"uniqueKey":"data.disableComments","typeLabel":"boolean"},"allowTentativeVotes":{"type":"boolean","description":"Whether participants may cast the tentative \"if need be\" vote","example":true,"isRequired":true,"uniqueKey":"data.allowTentativeVotes","typeLabel":"boolean"},"participantCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of participants who have responded to the poll","example":3,"isRequired":true,"uniqueKey":"data.participantCount","typeLabel":"integer"},"options":{"type":"array","items":{"oneOf":[{"type":"object","description":"A poll option. The shape follows the poll's `kind`: a `DateOption` for `date` polls, a `TimeOption` for `time` polls.","required":["id","date"],"properties":{"id":{"type":"string","example":"cm5h8x2k40000q9l4f7e2d3an","isRequired":true,"uniqueKey":"data.options.items.[INDEX].oneOf.0.id","typeLabel":"string"},"date":{"type":"string","format":"date","description":"Calendar date in YYYY-MM-DD format. All-day options are floating dates with no time component and no timezone.","example":"2025-01-15","isRequired":true,"uniqueKey":"data.options.items.[INDEX].oneOf.0.date","typeLabel":"string\u003cdate>"}},"uniqueKey":"data.options.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"A poll option. The shape follows the poll's `kind`: a `DateOption` for `date` polls, a `TimeOption` for `time` polls.","required":["id","startTime","duration"],"properties":{"id":{"type":"string","example":"cm5h8x2k40000q9l4f7e2d3an","isRequired":true,"uniqueKey":"data.options.items.[INDEX].oneOf.1.id","typeLabel":"string"},"startTime":{"type":"string","format":"date-time","description":"Start of the slot as an ISO 8601 instant in UTC.","example":"2025-01-15T09:00:00.000Z","isRequired":true,"uniqueKey":"data.options.items.[INDEX].oneOf.1.startTime","typeLabel":"string\u003cdate-time>"},"duration":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Duration in minutes.","example":30,"isRequired":true,"uniqueKey":"data.options.items.[INDEX].oneOf.1.duration","typeLabel":"integer"}},"uniqueKey":"data.options.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"data.options.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.options","typeLabel":"object[]"},"adminUrl":{"type":"string","example":"https://app.rallly.co/poll/Xk3pQ9vLm2Ab","isRequired":true,"uniqueKey":"data.adminUrl","typeLabel":"string"},"inviteUrl":{"type":"string","example":"https://rallly.co/invite/Xk3pQ9vLm2Ab","isRequired":true,"uniqueKey":"data.inviteUrl","typeLabel":"string"}},"required":["id","title","description","location","conferencing","timeZone","status","kind","createdAt","updatedAt","organizer","requireEmail","hideParticipants","hideScores","disableComments","allowTentativeVotes","participantCount","options","adminUrl","inviteUrl"],"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"required":["data"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"id":"Xk3pQ9vLm2Ab","title":"Team sync","description":"Pick a time that works for everyone","location":"Conference Room A","conferencing":{"provider":"zoom"},"timeZone":"Europe/London","status":"open","kind":"time","createdAt":"2025-01-10T12:00:00.000Z","updatedAt":"2025-01-12T08:30:00.000Z","organizer":{"id":"cm3f7d1qa0000t2k9c6b8h4jr","name":"John Doe","email":"organizer@example.com","image":"https://cdn.rallly.co/avatars/cm3f7d1qa0000t2k9c6b8h4jr.jpg"},"requireEmail":false,"hideParticipants":false,"hideScores":false,"disableComments":true,"allowTentativeVotes":true,"participantCount":3,"options":[{"id":"cm5h8x2k40000q9l4f7e2d3an","date":"2025-01-15"}],"adminUrl":"https://app.rallly.co/poll/Xk3pQ9vLm2Ab","inviteUrl":"https://rallly.co/invite/Xk3pQ9vLm2Ab"}}}},"exampleType":"generated"}},"exampleType":"generated"},"3db3ebbb-b871-468c-9096-ca0b3edac017":{"description":"Invalid input","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code. The full list is in the API description.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. For `VALIDATION_ERROR` it names each offending field, e.g. `title: Invalid input: expected string, received undefined; dates.0: Invalid ISO date`.","example":"title: Invalid input: expected string, received undefined","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_ERROR","message":"title: Invalid input: expected string, received undefined"}}}},"exampleType":"generated"}},"exampleType":"generated"},"a9bb151f-3559-42e7-a618-024491dd45c6":{"description":"The API key is missing, invalid, expired or revoked, or its owner is banned. Includes a `WWW-Authenticate` header.","headers":{"WWW-Authenticate":{"description":"The bearer challenge, per RFC 6750.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code. The full list is in the API description.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. For `VALIDATION_ERROR` it names each offending field, e.g. `title: Invalid input: expected string, received undefined; dates.0: Invalid ISO date`.","example":"title: Invalid input: expected string, received undefined","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_ERROR","message":"title: Invalid input: expected string, received undefined"}}}},"exampleType":"generated"}},"exampleType":"generated"},"09426c2d-c180-44b3-b062-8bc2159bb369":{"description":"The space associated with the API key does not have a Pro subscription","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code. The full list is in the API description.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. For `VALIDATION_ERROR` it names each offending field, e.g. `title: Invalid input: expected string, received undefined; dates.0: Invalid ISO date`.","example":"title: Invalid input: expected string, received undefined","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_ERROR","message":"title: Invalid input: expected string, received undefined"}}}},"exampleType":"generated"}},"exampleType":"generated"},"2554830d-84fa-48ed-81de-74b085baa4bb":{"description":"Rate limit exceeded. Includes a `Retry-After` header indicating how many seconds to wait before retrying.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code. The full list is in the API description.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. For `VALIDATION_ERROR` it names each offending field, e.g. `title: Invalid input: expected string, received undefined; dates.0: Invalid ISO date`.","example":"title: Invalid input: expected string, received undefined","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_ERROR","message":"title: Invalid input: expected string, received undefined"}}}},"exampleType":"generated"}},"exampleType":"generated"},"d9366f1b-2b2a-4857-88df-c99b6d37c441":{"description":"The API is temporarily unavailable, for maintenance or because the rate limit store cannot be reached. Includes a `Retry-After` header. Maintenance responses are sent before the rate limiter runs and carry no `RateLimit-*` headers.","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code. The full list is in the API description.","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. For `VALIDATION_ERROR` it names each offending field, e.g. `title: Invalid input: expected string, received undefined; dates.0: Invalid ISO date`.","example":"title: Invalid input: expected string, received undefined","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_ERROR","message":"title: Invalid input: expected string, received undefined"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"b192e996-2914-42c7-9f73-d7008ceff0d2":{"bearerAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"8e26f361-777b-4ae8-8351-c7fd7bdb86b4":{"url":"https://api.rallly.co"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"rallly","siteName":"Rallly","title":"Create a poll - Rallly","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-13T23:41:58.959Z","originalFileLocation":"api-reference/polls/create-a-poll.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Creates a poll and responds with 201 Created and the full poll, exactly as GET /polls/:pollId returns it. Share inviteUrl with participants. The request mirrors the response: kind chooses what participants vote on, and options takes the same shape the poll returns, so a poll can be recreated from the body of a GET. A poll has at most 100 options. ## Date poll Pass kind: \u0026quot;date\u0026quot; and options, one { \u0026quot;date\u0026quot;: \u0026quot;YYYY-MM-DD\u0026quot; } per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed. json { \u0026quot;title\u0026quot;: \u0026quot;Team offsite\u0026quot;, \u0026quot;kind\u0026quot;: \u0026quot;date\u0026quot;, \u0026quot;options\u0026quot;: [{ \u0026quot;date\u0026quot;: \u0026quot;2027-03-01\u0026quot; }, { \u0026quot;date\u0026quot;: \u0026quot;2027-03-02\u0026quot; }, { \u0026quot;date\u0026quot;: \u0026quot;2027-03-03\u0026quot; }] } ## Time poll Pass kind: \u0026quot;time\u0026quot;, optionally a timeZone (an IANA zone the times are written in) and a default duration in minutes, and the slots as options, generators or both. ### Explicit slots Each entry in options is one slot: a startTime and an optional duration that overrides the poll default. A startTime with no offset, like 2027-03-01T09:00:00, is wall clock time in timeZone when that is set and a floating time with no conversion otherwise; one with an offset or Z is an absolute instant. json { \u0026quot;title\u0026quot;: \u0026quot;Kickoff\u0026quot;, \u0026quot;kind\u0026quot;: \u0026quot;time\u0026quot;, \u0026quot;timeZone\u0026quot;: \u0026quot;Europe/London\u0026quot;, \u0026quot;duration\u0026quot;: 60, \u0026quot;options\u0026quot;: [ { \u0026quot;startTime\u0026quot;: \u0026quot;2027-03-01T09:00:00\u0026quot; }, { \u0026quot;startTime\u0026quot;: \u0026quot;2027-03-02T14:00:00\u0026quot;, \u0026quot;duration\u0026quot;: 90 } ] } ### Slot generators Each object in generators expands into recurring slots of duration minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. duration is required when generators is set. json { \u0026quot;title\u0026quot;: \u0026quot;Interview availability\u0026quot;, \u0026quot;kind\u0026quot;: \u0026quot;time\u0026quot;, \u0026quot;timeZone\u0026quot;: \u0026quot;America/New_York\u0026quot;, \u0026quot;duration\u0026quot;: 30, \u0026quot;generators\u0026quot;: [ { \u0026quot;startDate\u0026quot;: \u0026quot;2027-03-01\u0026quot;, \u0026quot;endDate\u0026quot;: \u0026quot;2027-03-05\u0026quot;, \u0026quot;days\u0026quot;: [\u0026quot;mon\u0026quot;, \u0026quot;tue\u0026quot;, \u0026quot;wed\u0026quot;, \u0026quot;thu\u0026quot;, \u0026quot;fri\u0026quot;], \u0026quot;from\u0026quot;: \u0026quot;09:00\u0026quot;, \u0026quot;to\u0026quot;: \u0026quot;12:00\u0026quot;, \u0026quot;interval\u0026quot;: 60 } ] } This produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop interval and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30. | Field | Meaning | | --- | --- | | startDate, endDate | The date range, inclusive. Fewer than 366 days. | | days | Days of the week to include: mon to sun. Optional; defaults to every day. | | from | Earliest slot start on each day, HH:mm in timeZone. | | to | End of the daily window, HH:mm in timeZone. A slot is only generated if it ends by this time. Must be later than from. | | interval | Minutes between slot starts. Optional; defaults to duration, which gives back to back slots. | A generator that cannot produce a slot is rejected with VALIDATION_ERROR naming the field: to not later than from, a window shorter than duration, or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to options, and duplicate slots are removed. A request that would exceed 100 options fails with TOO_MANY_OPTIONS.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Rallly\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a poll - Rallly\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a poll and responds with 201 Created and the full poll, exactly as GET /polls/:pollId returns it. Share inviteUrl with participants. The request mirrors the response: kind chooses what participants vote on, and options takes the same shape the poll returns, so a poll can be recreated from the body of a GET. A poll has at most 100 options. ## Date poll Pass kind: \u0026quot;date\u0026quot; and options, one { \u0026quot;date\u0026quot;: \u0026quot;YYYY-MM-DD\u0026quot; } per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed. json { \u0026quot;title\u0026quot;: \u0026quot;Team offsite\u0026quot;, \u0026quot;kind\u0026quot;: \u0026quot;date\u0026quot;, \u0026quot;options\u0026quot;: [{ \u0026quot;date\u0026quot;: \u0026quot;2027-03-01\u0026quot; }, { \u0026quot;date\u0026quot;: \u0026quot;2027-03-02\u0026quot; }, { \u0026quot;date\u0026quot;: \u0026quot;2027-03-03\u0026quot; }] } ## Time poll Pass kind: \u0026quot;time\u0026quot;, optionally a timeZone (an IANA zone the times are written in) and a default duration in minutes, and the slots as options, generators or both. ### Explicit slots Each entry in options is one slot: a startTime and an optional duration that overrides the poll default. A startTime with no offset, like 2027-03-01T09:00:00, is wall clock time in timeZone when that is set and a floating time with no conversion otherwise; one with an offset or Z is an absolute instant. json { \u0026quot;title\u0026quot;: \u0026quot;Kickoff\u0026quot;, \u0026quot;kind\u0026quot;: \u0026quot;time\u0026quot;, \u0026quot;timeZone\u0026quot;: \u0026quot;Europe/London\u0026quot;, \u0026quot;duration\u0026quot;: 60, \u0026quot;options\u0026quot;: [ { \u0026quot;startTime\u0026quot;: \u0026quot;2027-03-01T09:00:00\u0026quot; }, { \u0026quot;startTime\u0026quot;: \u0026quot;2027-03-02T14:00:00\u0026quot;, \u0026quot;duration\u0026quot;: 90 } ] } ### Slot generators Each object in generators expands into recurring slots of duration minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. duration is required when generators is set. json { \u0026quot;title\u0026quot;: \u0026quot;Interview availability\u0026quot;, \u0026quot;kind\u0026quot;: \u0026quot;time\u0026quot;, \u0026quot;timeZone\u0026quot;: \u0026quot;America/New_York\u0026quot;, \u0026quot;duration\u0026quot;: 30, \u0026quot;generators\u0026quot;: [ { \u0026quot;startDate\u0026quot;: \u0026quot;2027-03-01\u0026quot;, \u0026quot;endDate\u0026quot;: \u0026quot;2027-03-05\u0026quot;, \u0026quot;days\u0026quot;: [\u0026quot;mon\u0026quot;, \u0026quot;tue\u0026quot;, \u0026quot;wed\u0026quot;, \u0026quot;thu\u0026quot;, \u0026quot;fri\u0026quot;], \u0026quot;from\u0026quot;: \u0026quot;09:00\u0026quot;, \u0026quot;to\u0026quot;: \u0026quot;12:00\u0026quot;, \u0026quot;interval\u0026quot;: 60 } ] } This produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop interval and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30. | Field | Meaning | | --- | --- | | startDate, endDate | The date range, inclusive. Fewer than 366 days. | | days | Days of the week to include: mon to sun. Optional; defaults to every day. | | from | Earliest slot start on each day, HH:mm in timeZone. | | to | End of the daily window, HH:mm in timeZone. A slot is only generated if it ends by this time. Must be later than from. | | interval | Minutes between slot starts. Optional; defaults to duration, which gives back to back slots. | A generator that cannot produce a slot is rejected with VALIDATION_ERROR naming the field: to not later than from, a window shorter than duration, or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to options, and duplicate slots are removed. A request that would exceed 100 options fails with TOO_MANY_OPTIONS.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Rallly\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://support.rallly.co/api-reference/polls/create-a-poll\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://rallly.mintlify.app/_mintlify/api/og/v2?division=Polls\u0026amp;title=Create+a+poll\u0026amp;description=Creates+a+poll+and+responds+with+%60201+Created%60+and+the+full+poll%2C+exactly+as+%60GET+%2Fpolls%2F%3ApollId%60+returns+it.+Share+%60inviteUrl%60+with+participants.+The+request+m\u0026amp;theme=1fc67e274c7c9d12cf7228bf\u0026amp;signature=5225b98cc2a7d7a437c8615f4716adfb723b676c7dd79cc6c8dd36c7cb03b334\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create a poll - Rallly\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a poll and responds with 201 Created and the full poll, exactly as GET /polls/:pollId returns it. Share inviteUrl with participants. The request mirrors the response: kind chooses what participants vote on, and options takes the same shape the poll returns, so a poll can be recreated from the body of a GET. A poll has at most 100 options. ## Date poll Pass kind: \u0026quot;date\u0026quot; and options, one { \u0026quot;date\u0026quot;: \u0026quot;YYYY-MM-DD\u0026quot; } per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed. json { \u0026quot;title\u0026quot;: \u0026quot;Team offsite\u0026quot;, \u0026quot;kind\u0026quot;: \u0026quot;date\u0026quot;, \u0026quot;options\u0026quot;: [{ \u0026quot;date\u0026quot;: \u0026quot;2027-03-01\u0026quot; }, { \u0026quot;date\u0026quot;: \u0026quot;2027-03-02\u0026quot; }, { \u0026quot;date\u0026quot;: \u0026quot;2027-03-03\u0026quot; }] } ## Time poll Pass kind: \u0026quot;time\u0026quot;, optionally a timeZone (an IANA zone the times are written in) and a default duration in minutes, and the slots as options, generators or both. ### Explicit slots Each entry in options is one slot: a startTime and an optional duration that overrides the poll default. A startTime with no offset, like 2027-03-01T09:00:00, is wall clock time in timeZone when that is set and a floating time with no conversion otherwise; one with an offset or Z is an absolute instant. json { \u0026quot;title\u0026quot;: \u0026quot;Kickoff\u0026quot;, \u0026quot;kind\u0026quot;: \u0026quot;time\u0026quot;, \u0026quot;timeZone\u0026quot;: \u0026quot;Europe/London\u0026quot;, \u0026quot;duration\u0026quot;: 60, \u0026quot;options\u0026quot;: [ { \u0026quot;startTime\u0026quot;: \u0026quot;2027-03-01T09:00:00\u0026quot; }, { \u0026quot;startTime\u0026quot;: \u0026quot;2027-03-02T14:00:00\u0026quot;, \u0026quot;duration\u0026quot;: 90 } ] } ### Slot generators Each object in generators expands into recurring slots of duration minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. duration is required when generators is set. json { \u0026quot;title\u0026quot;: \u0026quot;Interview availability\u0026quot;, \u0026quot;kind\u0026quot;: \u0026quot;time\u0026quot;, \u0026quot;timeZone\u0026quot;: \u0026quot;America/New_York\u0026quot;, \u0026quot;duration\u0026quot;: 30, \u0026quot;generators\u0026quot;: [ { \u0026quot;startDate\u0026quot;: \u0026quot;2027-03-01\u0026quot;, \u0026quot;endDate\u0026quot;: \u0026quot;2027-03-05\u0026quot;, \u0026quot;days\u0026quot;: [\u0026quot;mon\u0026quot;, \u0026quot;tue\u0026quot;, \u0026quot;wed\u0026quot;, \u0026quot;thu\u0026quot;, \u0026quot;fri\u0026quot;], \u0026quot;from\u0026quot;: \u0026quot;09:00\u0026quot;, \u0026quot;to\u0026quot;: \u0026quot;12:00\u0026quot;, \u0026quot;interval\u0026quot;: 60 } ] } This produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop interval and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30. | Field | Meaning | | --- | --- | | startDate, endDate | The date range, inclusive. Fewer than 366 days. | | days | Days of the week to include: mon to sun. Optional; defaults to every day. | | from | Earliest slot start on each day, HH:mm in timeZone. | | to | End of the daily window, HH:mm in timeZone. A slot is only generated if it ends by this time. Must be later than from. | | interval | Minutes between slot starts. Optional; defaults to duration, which gives back to back slots. | A generator that cannot produce a slot is rejected with VALIDATION_ERROR naming the field: to not later than from, a window shorter than duration, or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to options, and duplicate slots are removed. A request that would exceed 100 options fails with TOO_MANY_OPTIONS.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://rallly.mintlify.app/_mintlify/api/og/v2?division=Polls\u0026amp;title=Create+a+poll\u0026amp;description=Creates+a+poll+and+responds+with+%60201+Created%60+and+the+full+poll%2C+exactly+as+%60GET+%2Fpolls%2F%3ApollId%60+returns+it.+Share+%60inviteUrl%60+with+participants.+The+request+m\u0026amp;theme=1fc67e274c7c9d12cf7228bf\u0026amp;signature=5225b98cc2a7d7a437c8615f4716adfb723b676c7dd79cc6c8dd36c7cb03b334\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/rallly/yJAOogumIB5LJ2ZL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Rallly\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f46e5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://support.rallly.co/api-reference/polls/create-a-poll\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/polls/create-a-poll.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://support.rallly.co/#organization\",\"name\":\"Rallly\",\"url\":\"https://support.rallly.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/rallly/u-wzWrUsy5xDwUk7/logo/light.svg?fit=max\u0026auto=format\u0026n=u-wzWrUsy5xDwUk7\u0026q=85\u0026s=9d8170d558fae26f51d317bc7f8a04a7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://support.rallly.co#website\",\"name\":\"Rallly\",\"url\":\"https://support.rallly.co\",\"publisher\":{\"@id\":\"https://support.rallly.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://support.rallly.co/api-reference/polls/create-a-poll#webpage\",\"url\":\"https://support.rallly.co/api-reference/polls/create-a-poll\",\"name\":\"Create a poll\",\"description\":\"Creates a poll and responds with 201 Created and the full poll, exactly as GET /polls/:pollId returns it. Share inviteUrl with participants. The request mirrors the response: kind chooses what participants vote on, and options takes the same shape the poll returns, so a poll can be recreated from the body of a GET. A poll has at most 100 options. ## Date poll Pass kind: \\\"date\\\" and options, one { \\\"date\\\": \\\"YYYY-MM-DD\\\" } per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed. json { \\\"title\\\": \\\"Team offsite\\\", \\\"kind\\\": \\\"date\\\", \\\"options\\\": [{ \\\"date\\\": \\\"2027-03-01\\\" }, { \\\"date\\\": \\\"2027-03-02\\\" }, { \\\"date\\\": \\\"2027-03-03\\\" }] } ## Time poll Pass kind: \\\"time\\\", optionally a timeZone (an IANA zone the times are written in) and a default duration in minutes, and the slots as options, generators or both. ### Explicit slots Each entry in options is one slot: a startTime and an optional duration that overrides the poll default. A startTime with no offset, like 2027-03-01T09:00:00, is wall clock time in timeZone when that is set and a floating time with no conversion otherwise; one with an offset or Z is an absolute instant. json { \\\"title\\\": \\\"Kickoff\\\", \\\"kind\\\": \\\"time\\\", \\\"timeZone\\\": \\\"Europe/London\\\", \\\"duration\\\": 60, \\\"options\\\": [ { \\\"startTime\\\": \\\"2027-03-01T09:00:00\\\" }, { \\\"startTime\\\": \\\"2027-03-02T14:00:00\\\", \\\"duration\\\": 90 } ] } ### Slot generators Each object in generators expands into recurring slots of duration minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. duration is required when generators is set. json { \\\"title\\\": \\\"Interview availability\\\", \\\"kind\\\": \\\"time\\\", \\\"timeZone\\\": \\\"America/New_York\\\", \\\"duration\\\": 30, \\\"generators\\\": [ { \\\"startDate\\\": \\\"2027-03-01\\\", \\\"endDate\\\": \\\"2027-03-05\\\", \\\"days\\\": [\\\"mon\\\", \\\"tue\\\", \\\"wed\\\", \\\"thu\\\", \\\"fri\\\"], \\\"from\\\": \\\"09:00\\\", \\\"to\\\": \\\"12:00\\\", \\\"interval\\\": 60 } ] } This produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop interval and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30. | Field | Meaning | | --- | --- | | startDate, endDate | The date range, inclusive. Fewer than 366 days. | | days | Days of the week to include: mon to sun. Optional; defaults to every day. | | from | Earliest slot start on each day, HH:mm in timeZone. | | to | End of the daily window, HH:mm in timeZone. A slot is only generated if it ends by this time. Must be later than from. | | interval | Minutes between slot starts. Optional; defaults to duration, which gives back to back slots. | A generator that cannot produce a slot is rejected with VALIDATION_ERROR naming the field: to not later than from, a window shorter than duration, or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to options, and duplicate slots are removed. A request that would exceed 100 options fails with TOO_MANY_OPTIONS.\",\"dateModified\":\"2026-10-13T23:41:58.959Z\",\"isPartOf\":{\"@id\":\"https://support.rallly.co#website\"},\"breadcrumb\":{\"@id\":\"https://support.rallly.co/api-reference/polls/create-a-poll#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://support.rallly.co/api-reference/polls/create-a-poll#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Rallly\",\"item\":\"https://support.rallly.co\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a poll\",\"item\":\"https://support.rallly.co/api-reference/polls/create-a-poll\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://support.rallly.co/api-reference/polls/create-a-poll#apireference\",\"headline\":\"Create a poll\",\"name\":\"Create a poll\",\"description\":\"Creates a poll and responds with 201 Created and the full poll, exactly as GET /polls/:pollId returns it. Share inviteUrl with participants. The request mirrors the response: kind chooses what participants vote on, and options takes the same shape the poll returns, so a poll can be recreated from the body of a GET. A poll has at most 100 options. ## Date poll Pass kind: \\\"date\\\" and options, one { \\\"date\\\": \\\"YYYY-MM-DD\\\" } per day. Each becomes one all-day option. Dates are floating calendar days with no timezone, so never convert them through one. Duplicate dates are removed. json { \\\"title\\\": \\\"Team offsite\\\", \\\"kind\\\": \\\"date\\\", \\\"options\\\": [{ \\\"date\\\": \\\"2027-03-01\\\" }, { \\\"date\\\": \\\"2027-03-02\\\" }, { \\\"date\\\": \\\"2027-03-03\\\" }] } ## Time poll Pass kind: \\\"time\\\", optionally a timeZone (an IANA zone the times are written in) and a default duration in minutes, and the slots as options, generators or both. ### Explicit slots Each entry in options is one slot: a startTime and an optional duration that overrides the poll default. A startTime with no offset, like 2027-03-01T09:00:00, is wall clock time in timeZone when that is set and a floating time with no conversion otherwise; one with an offset or Z is an absolute instant. json { \\\"title\\\": \\\"Kickoff\\\", \\\"kind\\\": \\\"time\\\", \\\"timeZone\\\": \\\"Europe/London\\\", \\\"duration\\\": 60, \\\"options\\\": [ { \\\"startTime\\\": \\\"2027-03-01T09:00:00\\\" }, { \\\"startTime\\\": \\\"2027-03-02T14:00:00\\\", \\\"duration\\\": 90 } ] } ### Slot generators Each object in generators expands into recurring slots of duration minutes from a schedule, so availability across days or weeks does not have to be listed slot by slot. duration is required when generators is set. json { \\\"title\\\": \\\"Interview availability\\\", \\\"kind\\\": \\\"time\\\", \\\"timeZone\\\": \\\"America/New_York\\\", \\\"duration\\\": 30, \\\"generators\\\": [ { \\\"startDate\\\": \\\"2027-03-01\\\", \\\"endDate\\\": \\\"2027-03-05\\\", \\\"days\\\": [\\\"mon\\\", \\\"tue\\\", \\\"wed\\\", \\\"thu\\\", \\\"fri\\\"], \\\"from\\\": \\\"09:00\\\", \\\"to\\\": \\\"12:00\\\", \\\"interval\\\": 60 } ] } This produces 30 minute slots at 09:00, 10:00 and 11:00 New York time on each weekday from 1 to 5 March, fifteen options in all. Drop interval and the window fills with back to back slots at 09:00, 09:30, 10:00, 10:30, 11:00 and 11:30. | Field | Meaning | | --- | --- | | startDate, endDate | The date range, inclusive. Fewer than 366 days. | | days | Days of the week to include: mon to sun. Optional; defaults to every day. | | from | Earliest slot start on each day, HH:mm in timeZone. | | to | End of the daily window, HH:mm in timeZone. A slot is only generated if it ends by this time. Must be later than from. | | interval | Minutes between slot starts. Optional; defaults to duration, which gives back to back slots. | A generator that cannot produce a slot is rejected with VALIDATION_ERROR naming the field: to not later than from, a window shorter than duration, or a range that contains none of the listed days. Generators are expanded when the poll is created, the result is appended to options, and duplicate slots are removed. A request that would exceed 100 options fails with TOO_MANY_OPTIONS.\",\"url\":\"https://support.rallly.co/api-reference/polls/create-a-poll\",\"mainEntityOfPage\":{\"@id\":\"https://support.rallly.co/api-reference/polls/create-a-poll#webpage\"},\"dateModified\":\"2026-10-13T23:41:58.959Z\",\"publisher\":{\"@id\":\"https://support.rallly.co/#organization\"},\"isPartOf\":{\"@id\":\"https://support.rallly.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Rallly\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Rallly","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Self-Hosting","pages":[{"title":"Self-Hosting","href":"/self-hosting/introduction"}]},{"tab":"API Reference","groups":[{"group":"Getting started","pages":[{"title":"Introduction","icon":"house","href":"/api-reference/introduction"},{"title":"Authentication","icon":"key","href":"/api-reference/authentication"},{"title":"Rate limits","icon":"gauge-high","href":"/api-reference/rate-limits"},{"title":"Errors","icon":"triangle-exclamation","href":"/api-reference/errors"},{"title":"Changelog","icon":"clock-rotate-left","href":"/api-reference/changelog"},{"title":"Migrating from the private API","icon":"arrow-right-arrow-left","description":"Move an integration from /api/private to /v1, endpoint by endpoint.","href":"/api-reference/migrating-from-the-private-api"}]},{"group":"Polls","pages":[{"title":"Create a poll","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/polls","href":"/api-reference/polls/create-a-poll"},{"title":"List polls","description":"Lists the polls in the space associated with the API key, sorted by creation date (newest first).\n\nUse the `status` query parameter to only return polls in a given state — for example `status=open` to sweep polls that are still collecting responses. Results are paginated with a cursor: pass the `nextCursor` value from the previous response to fetch the next page.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/polls","href":"/api-reference/polls/list-polls"},{"title":"Get a poll","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/polls/{pollId}","href":"/api-reference/polls/get-a-poll"},{"title":"Delete a poll","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/polls/{pollId}","href":"/api-reference/polls/delete-a-poll"},{"title":"Get poll results","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/polls/{pollId}/results","href":"/api-reference/polls/get-poll-results"},{"title":"List poll participants","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/polls/{pollId}/participants","href":"/api-reference/polls/list-poll-participants"},{"title":"Get a poll participant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/polls/{pollId}/participants/{participantId}","href":"/api-reference/polls/get-a-poll-participant"}]},{"group":"Webhooks","tag":"Beta","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":"webhook","href":"/api-reference/webhooks"},{"title":"Events","icon":"bolt","href":"/api-reference/webhooks/events"},{"title":"Security","icon":"shield-check","href":"/api-reference/webhooks/security"},{"group":"Guides","icon":"book-open","pages":[{"title":"Receive webhooks in n8n","sidebarTitle":"n8n","icon":"diagram-project","href":"/api-reference/webhooks/guides/n8n"}]}]}]},{"tab":"Contribute","pages":[{"title":"Contribute","href":"/contribute/introduction"}]}]},"title":"Create a poll - Rallly","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Bbp7I60D.js","utils-C3RIvJha.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DqD-vLt8.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B31Loprg.js","snippetPresets-DKpk-b8t.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Cj65AhOR.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BXtn5gcC.js","shallow-RY2b03Cp.js","getApiPlaygroundDisplay-B0jeiPk3.js","CodeSnippet-CYgBjjwn.js","CodeSnippets-DOngDrYB.js","Page-n7I5XbKb.js","getPastedJson-DRQbJx-T.js","icon-CQiQCicY.js","MethodPill-BKTLdNtu.js","DuplicateIcon-B9jpAdat.js","createIcon-DCddRrXv.js","DynamicMarkdown-a8hUKrw6.js","SectionHeading-eECVV2eH.js","axios-vUo_bRtp.js","Markdown--GF7ZIpf.js","clsx-DZLdJUrt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-2LoAhjKH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Zwc0ZncM.js"]}