Close Poll
Organiser closes a poll-mode proposal. Resolves the poll if any votes have been cast, otherwise expires it. Poll-mode only — for standard proposals use `/cancel` (which has different semantics: it cancels an *accepted* proposal and deletes calendar events; close terminates a still-`proposed` poll). Used for: - **Open polls** — there is no all-voted trigger (the voter set is open-ended), so the organiser explicitly ends voting when they have what they need. Reaper expiry (`expires_at`) is the other resolution path. - **Named polls** — early termination when the organiser doesn't want to wait for every named invitee. ## Outcomes - **≥1 vote**: poll resolves. Winning slot = most votes (ties broken by earliest `start_time`). Proposal transitions to `accepted` with the winning slot's `is_selected: true`. A `poll_resolved` audit event is emitted, then a `status_changed(reason=organiser_close_with_votes)` event. - **Zero votes**: proposal transitions to `expired`. `status_changed(reason=organiser_close_no_votes)` event. No winning slot. ## Error codes - `401 authentication_required` — no Bearer/API-key credential - `403 forbidden` — caller is not the proposal organiser (`requester_id`) - `404 not_found` — proposal does not exist - `409 conflict` — proposal is `standard` mode (use `/cancel`), or proposal status is not `proposed` (already terminal: `accepted`, `rejected`, `expired`, `cancelled`)
Auth required: Yes
id (path, string) (required)200: Poll closed (resolved or expired depending on vote count).401: Authentication required or invalid403: Authenticated but insufficient permissions404: Resource not found409: Resource conflictRequires authentication. Pass a Bearer token (Supabase JWT) or an API key (`Authorization: Bearer vennio_sk_live_*`) in the request headers.
Base URL: https://api.vennio.app