> ## Documentation Index
> Fetch the complete documentation index at: https://support.rallly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# List poll participants

> Lists every participant of a poll in one response, oldest response first. The poll must belong to the space associated with the API key.

Per-option answers are not included; use the results endpoint for aggregate availability.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/polls/{pollId}/participants
openapi: 3.1.0
info:
  title: Rallly API
  description: >-
    ## Versioning


    `v1` is stable. Additive changes (new endpoints, new optional fields) may
    land on this path at any time; breaking changes only arrive under a new
    version prefix.


    ## Rate limits


    All endpoints share two limits per space: **60 requests per minute** and
    **5000 requests per day**. Both are fixed windows that open with the first
    request and reset when they expire. Both limits are per space, not per API
    key, so creating additional keys does not increase throughput.


    Every response from an authenticated request includes the standard
    `RateLimit-*` headers. Responses sent before the limiter runs (`401`, `403`,
    and the maintenance `503`) do not. `RateLimit-Policy` lists both limits;
    `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` describe
    whichever limit is closest to being exhausted. When either limit is exceeded
    the API responds with `429 Too Many Requests`, a `RATE_LIMIT_EXCEEDED` error
    body, and a `Retry-After` header indicating how many seconds to wait before
    retrying.


    If the rate limit store cannot be reached the API fails closed and responds
    with `503 Service Unavailable`, a `SERVICE_UNAVAILABLE` error body, and a
    `Retry-After` header.


    ## Dates and times


    Every poll has a `kind`. A `date` poll offers calendar days: each option
    carries a `date` in `YYYY-MM-DD` format, which is a floating date with no
    time component and no timezone, so never convert it through a timezone. A
    `time` poll offers time slots: each option carries a `startTime` as an ISO
    8601 instant in UTC and a `duration` in minutes; convert `startTime` into
    the poll's `timeZone` (or the viewer's) for display. Timestamps such as
    `createdAt` and `updatedAt` are always ISO 8601 instants in UTC.


    ## Request bodies


    Request bodies are validated strictly: a field that is not part of the
    documented schema is rejected with `VALIDATION_ERROR` rather than ignored,
    so a misspelt setting never silently falls back to its default.


    ## Enums


    Vote types are an open set. The built-in values are `yes`, `ifNeedBe` and
    `no`; new types may be added without a version change, so clients must
    tolerate values they do not recognise. `status` and `kind` are closed sets.


    ## Lists


    List endpoints return the items in `data`. `GET /polls` is paginated: it
    returns a `nextCursor` beside `data`; pass it as the `cursor` query
    parameter to fetch the next page, and it is `null` on the last page. `GET
    /polls/:pollId/participants` returns every participant in one response.


    ## Errors


    Every failure is `application/json` with the shape `{ "error": { "code",
    "message" } }`. `code` is stable and safe to branch on; `message` is
    human-readable and may change. `VALIDATION_ERROR` messages name each
    offending field.


    | Status | Code | When |

    | --- | --- | --- |

    | 400 | `VALIDATION_ERROR` | The body or query string did not match the
    schema, contained an unknown field, or the body was not valid JSON |

    | 400 | `INVALID_AUTHORIZATION_HEADER` | The `Authorization` header is not
    `Bearer <key>` |

    | 400 | `ORGANIZER_NOT_MEMBER` | The organizer email is not a member of the
    space |

    | 400 | `TOO_MANY_OPTIONS` | More than the maximum number of poll options |

    | 400 | `INAPPROPRIATE_CONTENT` | The title, description or location was
    flagged by content moderation |

    | 401 | `UNAUTHORIZED` | The API key is missing, invalid, expired or
    revoked, or its owner is banned |

    | 403 | `SPACE_NOT_PRO` | The space behind the key has no Pro subscription |

    | 404 | `NOT_FOUND` | No route matches the method and path |

    | 404 | `POLL_NOT_FOUND` | The poll does not exist or belongs to another
    space |

    | 429 | `RATE_LIMIT_EXCEEDED` | A rate limit window is exhausted |

    | 503 | `SERVICE_UNAVAILABLE` | Maintenance, or the rate limit store cannot
    be reached |

    | 500 | `INTERNAL_ERROR` | Unexpected failure; the request id is logged |
  version: 1.0.0
servers:
  - url: https://api.rallly.co
security: []
paths:
  /v1/polls/{pollId}/participants:
    get:
      tags:
        - Polls
      summary: List poll participants
      description: >-
        Lists every participant of a poll in one response, oldest response
        first. The poll must belong to the space associated with the API key.


        Per-option answers are not included; use the results endpoint for
        aggregate availability.
      operationId: getV1PollsByPollIdParticipants
      parameters:
        - schema:
            type: string
          in: path
          name: pollId
          required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPollParticipantsResponse'
        '401':
          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:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            The space associated with the API key does not have a Pro
            subscription
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Poll not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          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:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          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:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    GetPollParticipantsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Participant'
      required:
        - data
    ErrorResponse:
      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
            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'
          required:
            - code
            - message
      required:
        - error
    Participant:
      type: object
      properties:
        id:
          type: string
          example: cm5j2r8wb0003q9l4a1x6p0zt
        name:
          type: string
          example: Jane Smith
        email:
          anyOf:
            - type: string
            - type: 'null'
          example: jane@example.com
        createdAt:
          type: string
          format: date-time
          example: '2025-01-10T12:00:00.000Z'
      required:
        - id
        - name
        - email
        - createdAt
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````