Download Resolved Poll as iCalendar
Returns the resolved poll proposal as a `text/calendar` (.ics) file. Used by voters to add the agreed meeting to their calendar by tapping the magic-link URL with `?token=...` — no email required. Token auth mirrors `GET /v1/proposals/by-token`: the magic-link token IS the credential, no `Authorization` header. Both named and open tokens are valid. ## Status guard The proposal must be resolved (`status: 'accepted'`). Polls in any other state return `409 poll_not_resolved` — there is no winning slot to generate a calendar event from. ## iCal details - Deterministic UID `proposal-{proposalId}-slot-{slotId}@vennio.app` — every retrieval of the same resolved poll produces the same UID, so calendar clients can reconcile organiser-side updates against a single shared event identity. - `ORGANIZER` = the proposal organiser's profile. - `ATTENDEE` = voters who voted (`selected_slot_id IS NOT NULL`) with a resolvable email. Anonymous voters and non-voting invitees are omitted — mirrors the Model 1 boundary: the API knows voters, the builder owns the silent non-voters. - Title, description, and RSVP/PARTSTAT polish are **provisional**. The iCalendar content shape is validated against real calendar clients (Apple/Google/Outlook) in Job 2; expect refinements before GA. ## Error codes - `400` — `token` query param missing - `401 invalid_token` — token does not exist (malformed or already consumed for a named single-use token) - `401 token_proposal_mismatch` — token is valid but for a different proposal - `404 proposal_not_found` — proposal does not exist - `404 winning_slot_not_found` — proposal is resolved but no slot is marked (corrupt state) - `409 poll_not_resolved` — proposal is not in `accepted` status - `410 token_expired` — token has passed its expiry
Auth required: No
id (path, string) (required)token (query, string) (required) — The raw magic-link token (named or open).200: iCalendar (.ics) file for the resolved meeting.400: Validation error401: Authentication required or invalid404: Resource not found409: Resource conflict410: Token has expired.This endpoint does not require authentication.
Base URL: https://api.vennio.app