---
title: "A survey with polls"
method: GET
path: "/api/surveys/{id_or_slug}"
tags: ["surveys"]
---

# A survey with polls

`GET /api/surveys/{id_or_slug}`

Retrieve a single survey (by ID or slug) with its nested structure.

### Nested Format Details:
- Returns the target Survey object including all associated Polls, multiple choice options, and configuration states.
- Requires Administrator authorization.

## Path parameters

- `id_or_slug` string, required

## Response `200`

A survey with nested polls and options

- SurveyWithPolls — Representation of a survey
  - `type_of` 'survey', required — Resource discriminator
  - `id` integer, required
  - `title` string, required
  - `slug` string, required
  - `survey_type_of` 'community_pulse' | 'industry' | 'fun', required — Survey category
  - `active` boolean, nullable — Whether the survey is currently active
  - `display_title` boolean, required — Whether to show the title to respondents
  - `allow_resubmission` boolean, required — Whether users can submit multiple times
  - `daily_email_distributions` integer — Daily email distributions count
  - `extra_email_context_paragraph` string, nullable — Optional context paragraph for emails
  - `target_response_count` integer — Target response count
  - `target_completion_date` string, date-time, nullable — Target completion date in the future
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `polls` Poll[], required — All polls in the survey, ordered by position
    - `type_of` 'poll', required — Resource discriminator
    - `id` integer, required
    - `prompt_markdown` string, nullable, required — Question text in markdown
    - `prompt_html` string, nullable, required — Question text rendered as HTML
    - `poll_type_of` 'single_choice' | 'multiple_choice' | 'scale' | 'text_input', required — Poll question type: single_choice, multiple_choice, scale, or text_input
    - `position` integer, required — Display order within the survey
    - `poll_votes_count` integer, required — Total number of votes across all options
    - `poll_skips_count` integer, required — Number of users who skipped this poll
    - `poll_options_count` integer, required — Number of options in this poll
    - `scale_min` integer, nullable — Minimum value for scale polls
    - `scale_max` integer, nullable — Maximum value for scale polls
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `poll_options` PollOption[], required — The available options for this poll
      - `type_of` 'poll_option', required — Resource discriminator
      - `id` integer, required
      - `markdown` string, nullable, required — Option text in markdown
      - `processed_html` string, nullable, required — Option text rendered as HTML
      - `position` integer, required — Display order within the poll
      - `poll_votes_count` integer, required — Number of votes for this option
      - `supplementary_text` string, nullable — Additional descriptive text for the option

## Other responses

- `401` — Unauthorized
- `404` — Not found

## Changes

- **2026-07-21** (v1) `ffddb865fa73` — 4 info
  - added the optional property `allOf[#/components/schemas/Survey]/daily_email_distributions` to the response with the `200` status
  - added the optional property `allOf[#/components/schemas/Survey]/extra_email_context_paragraph` to the response with the `200` status
  - added the optional property `allOf[#/components/schemas/Survey]/target_completion_date` to the response with the `200` status
  - added the optional property `allOf[#/components/schemas/Survey]/target_response_count` to the response with the `200` status
- **2026-07-13** (v1) `189b62b952ea` — 2 breaking
  - removed the media type `application/json` for the response with the status `401`
  - removed the media type `application/json` for the response with the status `404`
- **2026-07-13** (v1) `7db6ba099285` — 2 breaking
  - removed the media type `application/json` for the response with the status `401`
  - removed the media type `application/json` for the response with the status `404`
- **2026-05-28** (v1) `6550ad7be94f` — 2 info
  - added the media type `application/json` for the response with the status `401`
  - added the media type `application/json` for the response with the status `404`
- **2026-03-19** (v1) `8dae809f0fde` — 1 info
  - endpoint added

[Full history](https://skmtc.dev/forem/apis/forem-api-v1/changes/api/surveys/:id_or_slug/get.md)

---

[API](https://skmtc.dev/forem/apis/forem-api-v1.md) · [All operations](https://skmtc.dev/forem/apis/forem-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/forem/forem-api-v1/revisions/1f64f71fc2a7/schema)
