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

# Read every session's results

> Every session one deck has run, oldest first, each with its results as JSON and as a markdown summary, in one call: a deck presented to ten classes answers with ten sessions. Send `answers` for every answer as a row as well, with the name the person joined under, what they answered, whether a quiz answer was right and how many seconds it took, the rows the app's spreadsheet download holds. Send `sessions` to read only some of them.

Needs the `results:read` scope.



## OpenAPI

````yaml https://test.polltheroom.com/openapi.json get /api/v1/decks/{id}/results
openapi: 3.1.0
info:
  title: Poll the Room API
  version: '1'
  description: >-
    Live polls on a presenter's own slides. A presenter (or an agent acting for
    one) builds a deck; the audience joins on their phones with a six-digit code
    and never signs up.


    Keys are made under Settings › API and sent as `Authorization: Bearer
    ptr_…`. A key belongs to a team, carries scopes, and is rate limited per
    hour. Plans: Free may decks:read, decks:write, rooms:read, results:read at
    60 requests an hour; Pro may decks:read, decks:write, rooms:read,
    rooms:start, results:read at 1000 requests an hour.


    The same verbs are MCP tools at https://test.polltheroom.com/api/mcp. The
    full reference is at https://test.polltheroom.com/llms-full.txt.
servers:
  - url: https://test.polltheroom.com
security:
  - apiKey: []
tags:
  - name: decks
    description: A deck is a document the editor and the API both read and write.
  - name: rooms
    description: A room is one live session of a deck.
paths:
  /api/v1/decks/{id}/results:
    get:
      tags:
        - rooms
      summary: Read every session's results
      description: >-
        Every session one deck has run, oldest first, each with its results as
        JSON and as a markdown summary, in one call: a deck presented to ten
        classes answers with ten sessions. Send `answers` for every answer as a
        row as well, with the name the person joined under, what they answered,
        whether a quiz answer was right and how many seconds it took, the rows
        the app's spreadsheet download holds. Send `sessions` to read only some
        of them.


        Needs the `results:read` scope.
      operationId: deck_results
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
            description: The deck's id
          example: cmtwzaz21009juqmfmvygdi2b
        - name: sessions
          in: query
          required: false
          schema:
            description: >-
              Session ids from list_rooms, comma separated. Left out, every
              session the deck has run
            type: string
        - name: answers
          in: query
          required: false
          schema:
            description: Add every answer as a row, one per person per poll
            anyOf:
              - type: boolean
              - type: string
                enum:
                  - 'true'
                  - 'false'
          example: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  deckId:
                    type: string
                  title:
                    type: string
                  sessions:
                    type: array
                    items:
                      type: object
                      properties:
                        joined:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        pollCount:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        avgResponseRate:
                          anyOf:
                            - type: number
                            - type: 'null'
                          description: >-
                            0 to 1, answers over people joined, averaged over
                            the polls
                        liveMinutes:
                          anyOf:
                            - type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                            - type: 'null'
                        polls:
                          type: array
                          items:
                            type: object
                            propertyNames:
                              type: string
                            additionalProperties: {}
                          description: >-
                            One snapshot per poll, in deck order: type, prompt,
                            status, options, counts by option id, words, texts,
                            average, distribution, qa, radar, winner, pins,
                            totalAnswers
                        markdown:
                          type: string
                          description: >-
                            The same results as a markdown summary, ready to
                            paste
                        id:
                          type: string
                          description: The session's id, as list_rooms names it
                        code:
                          type: string
                          description: >-
                            The six-digit code it ran under; codes are reused
                            later, the id is not
                        label:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: The name the session was started under
                        startedAt:
                          type: string
                          description: ISO 8601 timestamp
                        answers:
                          description: >-
                            Only with `answers`: every answer, in poll order,
                            then in the order people joined
                          type: array
                          items:
                            type: object
                            properties:
                              question:
                                type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                                description: The poll's place in the session, from 1
                              pollId:
                                type: string
                              prompt:
                                type: string
                                description: The question as it was asked
                              type:
                                type: string
                                description: >-
                                  The widget, as the app names it; Quiz for a
                                  multiple choice with an answer
                              name:
                                type: string
                                description: The name the person joined under
                              answer:
                                anyOf:
                                  - type: string
                                  - type: number
                                description: >-
                                  A number for a rating, NPS or estimate;
                                  otherwise text: the options picked, a ranking
                                  in order, points per option, a score per axis,
                                  or what was typed
                              correct:
                                anyOf:
                                  - type: boolean
                                  - type: 'null'
                                description: >-
                                  For a quiz question, whether the answer was
                                  right; null otherwise
                              answeredAt:
                                type: string
                                description: ISO 8601 timestamp
                              seconds:
                                anyOf:
                                  - type: number
                                  - type: 'null'
                                description: >-
                                  How long the poll had been open when the
                                  answer came in
                            required:
                              - question
                              - pollId
                              - prompt
                              - type
                              - name
                              - answer
                              - correct
                              - answeredAt
                              - seconds
                            additionalProperties: false
                      required:
                        - joined
                        - pollCount
                        - avgResponseRate
                        - liveMinutes
                        - polls
                        - markdown
                        - id
                        - code
                        - label
                        - startedAt
                      additionalProperties: false
                required:
                  - deckId
                  - title
                  - sessions
                additionalProperties: false
              example:
                deckId: cmtwzaz21009juqmfmvygdi2b
                title: Weekly lesson
                sessions:
                  - id: a2bd67d4-90d5-4b6d-ba90-34d8e39dbb2b
                    code: '487308'
                    label: Class 3B, Tuesday
                    startedAt: '2026-09-15T09:02:11.000Z'
                    joined: 2
                    pollCount: 1
                    avgResponseRate: 1
                    liveMinutes: 12
                    polls:
                      - id: 477b12ea-270f-4bf1-9036-fce88ba55a9a
                        type: multiple-choice
                        status: final
                        prompt: 'Quiz: what is the capital of Australia?'
                        options:
                          - id: ac5ce243-bcad-4503-9490-1e71ba035fe4
                            label: Sydney
                          - id: 676bcde3-ab64-4e9a-ade3-17ab62736afb
                            label: Canberra
                        counts:
                          ac5ce243-bcad-4503-9490-1e71ba035fe4: 1
                          676bcde3-ab64-4e9a-ade3-17ab62736afb: 1
                        correctOptionId: 676bcde3-ab64-4e9a-ade3-17ab62736afb
                        totalAnswers: 2
                    markdown: |
                      # Weekly lesson · Class 3B, Tuesday

                      Room 487308. 2 joined. 1 poll. Live for 12 minutes.

                      ## Quiz: what is the capital of Australia?

                      Multiple choice. 2 answered.

                      - Sydney: 1 (50%)
                      - Canberra: 1 (50%), the answer
                    answers:
                      - question: 1
                        pollId: 477b12ea-270f-4bf1-9036-fce88ba55a9a
                        prompt: 'Quiz: what is the capital of Australia?'
                        type: Quiz
                        name: Aisha Rahman
                        answer: Canberra
                        correct: true
                        answeredAt: '2026-09-15T09:05:40.000Z'
                        seconds: 3.2
                      - question: 1
                        pollId: 477b12ea-270f-4bf1-9036-fce88ba55a9a
                        prompt: 'Quiz: what is the capital of Australia?'
                        type: Quiz
                        name: Tom de Vries
                        answer: Sydney
                        correct: false
                        answeredAt: '2026-09-15T09:05:44.000Z'
                        seconds: 7.1
        '401':
          description: No usable key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: The key lacks the scope, or the plan does not sell it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Nothing by that id within this key's reach.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Over the key's hourly limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: What went wrong, in a sentence
        fix:
          description: What to do about it, when we can tell
          type: string
      required:
        - error
      additionalProperties: false
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        An API key from Settings › API, sent as `Authorization: Bearer ptr_…`.
        Shown once when made; only a hash is stored.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.