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

# List quiz report participants

> The participants behind a quiz report, one row per delivery, with the same filters. Page with starting_after.



## OpenAPI

````yaml /openapi.json get /v1/quizzes/{quiz_id}/report/participants
openapi: 3.0.3
info:
  title: Doozy Public API
  version: 1.0.0
  description: >-
    The Doozy Public API allows you to programmatically access your
    organization's data.


    ## Authentication


    All API requests require an API key passed in the `x-api-key` header.


    ```

    x-api-key: dzy_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    ```


    API keys can be generated and managed through the Doozy dashboard. Each key
    is associated with a user account and inherits that user's permissions.


    ## Rate Limiting


    API requests are rate limited. Rate limiting is handled by Cloudflare. If
    you exceed the rate limit, you'll receive a 429 Too Many Requests response.


    ## Pagination


    List endpoints support cursor-based pagination using `limit` and
    `starting_after` query parameters.
  contact:
    name: Doozy Support
    email: support@doozy.live
    url: https://help.doozy.live/api
servers:
  - url: https://api.doozy.live
    description: Production
security:
  - apiKey: []
tags:
  - name: Quizzes
    description: Quiz analytics and reporting endpoints
  - name: Tracks
    description: Track management and analytics endpoints
  - name: Surveys
    description: Survey and poll analytics endpoints
  - name: Introductions
    description: Doozy Roulette and Matchmaking introduction endpoints
  - name: Account
    description: 'Owner-only workspace settings: user provisioning and feature permissions'
paths:
  /v1/quizzes/{quiz_id}/report/participants:
    get:
      tags:
        - Quizzes
      summary: List quiz report participants
      description: >-
        The participants behind a quiz report, one row per delivery, with the
        same filters. Page with starting_after.
      parameters:
        - schema:
            type: string
            minLength: 1
            maxLength: 128
            pattern: ^[A-Za-z0-9_-]+$
            description: The unique identifier of the quiz
            example: tYYueINbgmmyss8O3LiD
          required: true
          description: The unique identifier of the quiz
          name: quiz_id
          in: path
        - schema:
            type: string
            minLength: 1
            description: Filter participants by exact account group ID
            example: BgZupnpMujy4v1Zzd6sx
          required: false
          description: Filter participants by exact account group ID
          name: group_id
          in: query
        - schema:
            type: string
            description: >-
              Filter results to participants from a specific track (workflow).
              When specified, only participants who received the quiz via this
              track will be included.
            example: i3XJiIJjOp7PJJBTvu4i
          required: false
          description: >-
            Filter results to participants from a specific track (workflow).
            When specified, only participants who received the quiz via this
            track will be included.
          name: track_id
          in: query
        - schema:
            type: string
            minLength: 1
            description: >-
              With track_id: only participants who received the quiz from this
              step of the track
            example: NKqbhqFnRyGChRhvM6bB
          required: false
          description: >-
            With track_id: only participants who received the quiz from this
            step of the track
          name: step_id
          in: query
        - schema:
            type: string
            minLength: 1
            description: >-
              With track_id and step_id: only participants who got this variant
              of the step. Use `default` for the step's own content.
            example: default
          required: false
          description: >-
            With track_id and step_id: only participants who got this variant of
            the step. Use `default` for the step's own content.
          name: variant_id
          in: query
        - schema:
            type: string
            minLength: 1
            description: >-
              Filter results to a specific instance. When specified, only
              participants from this scheduled activity will be included.
            example: abc123
          required: false
          description: >-
            Filter results to a specific instance. When specified, only
            participants from this scheduled activity will be included.
          name: instance_id
          in: query
        - schema:
            type: string
            format: date-time
            description: Filter participants by assigned_at >= this exact ISO 8601 instant
            example: '2026-01-01T00:00:00.000Z'
          required: false
          description: Filter participants by assigned_at >= this exact ISO 8601 instant
          name: start_date
          in: query
        - schema:
            type: string
            format: date-time
            description: Filter participants by assigned_at <= this exact ISO 8601 instant
            example: '2026-01-31T23:59:59.999Z'
          required: false
          description: Filter participants by assigned_at <= this exact ISO 8601 instant
          name: end_date
          in: query
        - schema:
            type: boolean
            description: Include quiz admin users in results (default false)
            example: 'false'
          required: false
          description: Include quiz admin users in results (default false)
          name: include_collaborators
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 10000
            default: 25
            description: Maximum number of participants to return (1-10000, default 25)
            example: 25
          required: false
          description: Maximum number of participants to return (1-10000, default 25)
          name: limit
          in: query
        - schema:
            type: string
            maxLength: 256
            description: A participant id; returns the page after it
            example: 06gPNJbvBuM2i8BKRXct:tYYueINbgmmyss8O3LiD
          required: false
          description: A participant id; returns the page after it
          name: starting_after
          in: query
        - schema:
            type: string
            maxLength: 256
            description: A participant id; returns the page before it
            example: pbxJ4YFZnz57I8ai343J:tYYueINbgmmyss8O3LiD
          required: false
          description: A participant id; returns the page before it
          name: ending_before
          in: query
        - schema:
            allOf:
              - $ref: '#/components/schemas/ParticipantStatus'
              - description: Filter participants by status
                example: completed
          required: false
          description: Filter participants by status
          name: status
          in: query
        - schema:
            type: array
            items:
              $ref: '#/components/schemas/ParticipantStatus'
            minItems: 1
            description: >-
              Comma-separated participant statuses. Takes precedence over
              status.
            example: completed,expired
          required: false
          description: Comma-separated participant statuses. Takes precedence over status.
          name: statuses
          in: query
        - schema:
            type: string
            enum:
              - score_desc
              - score_asc
              - name_asc
              - completed_at_desc
              - completed_at_asc
              - duration_asc
            default: name_asc
            description: >-
              Participant order. Score ties use points, duration, name, member
              ID, then delivery ID.
            example: score_desc
          required: false
          description: >-
            Participant order. Score ties use points, duration, name, member ID,
            then delivery ID.
          name: sort
          in: query
        - schema:
            type: number
            nullable: true
            minimum: 0
            maximum: 100
            description: Minimum participant score, inclusive
            example: 80
          required: false
          description: Minimum participant score, inclusive
          name: min_score
          in: query
        - schema:
            type: number
            nullable: true
            minimum: 0
            maximum: 100
            description: Maximum participant score, inclusive
            example: 100
          required: false
          description: Maximum participant score, inclusive
          name: max_score
          in: query
        - schema:
            type: string
            minLength: 1
            description: Case-insensitive participant name or email search
            example: Amara
          required: false
          description: Case-insensitive participant name or email search
          name: search
          in: query
        - schema:
            type: boolean
            description: >-
              Include per-question responses for each participant (default
              false)
            example: 'true'
          required: false
          description: Include per-question responses for each participant (default false)
          name: include_question_responses
          in: query
        - schema:
            type: boolean
            description: Include feedback responses from post-quiz surveys (default false)
            example: 'false'
          required: false
          description: Include feedback responses from post-quiz surveys (default false)
          name: include_feedback
          in: query
      responses:
        '200':
          description: A page of participants
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuizReportParticipantList'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - apiKey: []
components:
  schemas:
    ParticipantStatus:
      type: string
      enum:
        - not_started
        - in_progress
        - completed
        - expired
    QuizReportParticipantList:
      type: object
      properties:
        object:
          type: string
          enum:
            - list
        data:
          type: array
          items:
            $ref: '#/components/schemas/Participant'
        has_more:
          type: boolean
        url:
          type: string
          example: /v1/quizzes/tYYueINbgmmyss8O3LiD/report/participants
      required:
        - object
        - data
        - has_more
        - url
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
              enum:
                - api_error
                - authentication_error
                - invalid_request_error
                - rate_limit_error
                - not_found_error
                - permission_error
              description: The type of error returned
              example: invalid_request_error
            code:
              type: string
              nullable: true
              enum:
                - api_key_required
                - api_key_invalid
                - firebase_id_token_required
                - firebase_id_token_invalid
                - appcheck_token_required
                - appcheck_token_invalid
                - account_id_required
                - account_id_invalid
                - api_access_disabled
                - api_access_unauthorized
                - api_access_role_not_allowed
                - parameter_missing
                - parameter_invalid
                - resource_already_exists
                - resource_in_use
                - resource_not_found
                - permission_denied
                - not_implemented
                - internal_error
                - rate_limit_exceeded
                - upstream_error
                - user_not_found
                - user_not_connected_to_slack
                - user_missing_roles_for_track
                - user_already_on_track
                - user_already_completed_track
                - enrollee_already_terminal
                - track_not_active
                - track_not_enrollable
                - action_forbidden
                - api_access_plan_not_supported
                - plan_not_supported
                - draft_stale
                - invalid_cursor
                - program_archived
                - program_not_active
                - program_track_not_live
                - invalid_status_transition
                - mentorship_not_proposed
                - mentorship_ended
                - approval_waiting_on_mentor
                - no_reachable_manager
                - application_already_decided
                - participant_not_in_program
                - participant_already_answered
                - participant_not_mentor
                - reminder_pending
                - mentee_not_waiting
                - mentor_not_active
                - mentor_full
                - mentor_at_total
                - mentor_unchanged
                - same_person
                - invite_expired
                - invite_revoked
                - null
              description: Machine-readable error code for specific error conditions
              example: resource_not_found
            message:
              type: string
              description: Human-readable error message
              example: 'No such quiz: tYYueINbgmmyss8O3LiD'
            param:
              type: string
              nullable: true
              description: The parameter related to the error, if applicable
              example: id
            doc_url:
              type: string
              format: uri
              description: URL to documentation about this error
              example: https://docs.doozy.live/api/errors#resource_not_found
            request_id:
              type: string
              description: ID of the request, for support
              example: req_8KSh4mNxQ1aZbPoLcVrT
          required:
            - type
            - code
            - message
            - request_id
      required:
        - error
    Participant:
      type: object
      properties:
        object:
          type: string
          enum:
            - quiz_participant
          description: Object type identifier
          example: quiz_participant
        id:
          type: string
          description: Unique participant identifier (user ID)
          example: 06gPNJbvBuM2i8BKRXct
        email:
          type: string
          format: email
          description: Participant's email address
          example: jane.doe@example.com
        display_name:
          type: string
          description: Participant's display name
          example: Jane Doe
        slack_user_id:
          type: string
          nullable: true
          description: Participant's Slack user ID
          example: U01234567
        group_name:
          type: string
          nullable: true
          description: Participant's department or group
          example: Engineering
        group_names:
          type: array
          items:
            type: string
          description: Names of every account group the participant belongs to
          example:
            - Engineering
            - Platform
        group_ids:
          type: array
          items:
            type: string
          description: Account group IDs the participant belongs to
          example:
            - BgZupnpMujy4v1Zzd6sx
        manager_email:
          type: string
          nullable: true
          description: Email of participant's manager
          example: manager@example.com
        manager_name:
          type: string
          nullable: true
          description: Name of participant's manager
          example: John Smith
        manager_slack_user_id:
          type: string
          nullable: true
          description: Slack user ID of participant's manager
          example: U09876543
        status:
          allOf:
            - $ref: '#/components/schemas/ParticipantStatus'
            - description: Current status of the quiz attempt
              example: completed
        score:
          type: number
          nullable: true
          description: Score as a percentage (0-100). Null if not started.
          example: 85
        points:
          type: number
          nullable: true
          description: >-
            Canonical leaderboard points for this quiz delivery, or null when
            scoring metadata is unavailable
          example: 842
        duration_seconds:
          type: integer
          nullable: true
          description: >-
            Seconds from the first answer to completion, or null unless
            completed
          example: 327
        attempt:
          type: integer
          minimum: 0
          exclusiveMinimum: true
          description: >-
            This delivery's chronological number among the participant's
            deliveries of this quiz
          example: 2
        attempts:
          type: integer
          minimum: 0
          exclusiveMinimum: true
          description: Total deliveries of this quiz for the participant
          example: 3
        total_questions:
          type: integer
          description: Total number of questions in the quiz
          example: 10
        answered_questions:
          type: integer
          description: Number of questions answered
          example: 10
        correct_answers:
          type: integer
          description: Number of correct answers
          example: 8
        incorrect_answers:
          type: integer
          description: Number of incorrect answers
          example: 2
        assigned_at:
          type: string
          format: date-time
          example: '2026-01-15T10:30:00.000Z'
          description: When the quiz was assigned (ISO 8601 format)
        first_opened_at:
          type: string
          nullable: true
          format: date-time
          example: '2026-02-01T10:30:00.000Z'
          description: >-
            First successful Slack quiz open (ISO 8601, null if no open was
            recorded)
        last_opened_at:
          type: string
          nullable: true
          format: date-time
          example: '2026-02-01T10:30:00.000Z'
          description: >-
            Most recent successful Slack quiz open (ISO 8601, null if no open
            was recorded)
        completed_at:
          type: string
          nullable: true
          format: date-time
          example: '2026-01-15T11:00:00.000Z'
          description: When the quiz was completed (ISO 8601 format)
        delivery_instance_id:
          type: string
          description: >-
            Scheduled activity ID for the exact quiz delivery represented by
            this row
          example: DC2jXfHS1F1tEt1RoUBn
        delivery_method:
          type: string
          enum:
            - track
            - one_off
          description: How the quiz was delivered
          example: track
        track_id:
          type: string
          nullable: true
          description: ID of the track if delivered via track
          example: RhWh6zZdqqPhxUQhOCrQ
        track_name:
          type: string
          nullable: true
          description: Name of the track if delivered via track
          example: Onboarding Quiz
        is_admin:
          type: boolean
          description: Whether this participant is a quiz admin/collaborator
          example: false
        user_id:
          type: string
          description: >-
            Stable Doozy member ID. Use this rather than email to identify a
            participant.
          example: 06gPNJbvBuM2i8BKRXct
        question_responses:
          type: array
          items:
            $ref: '#/components/schemas/QuestionResponse'
          description: >-
            Per-question responses (only included if
            include_question_responses=true)
        feedback_response:
          $ref: '#/components/schemas/FeedbackResponse'
      required:
        - object
        - id
        - email
        - display_name
        - slack_user_id
        - group_name
        - group_names
        - group_ids
        - manager_email
        - manager_name
        - manager_slack_user_id
        - status
        - score
        - points
        - duration_seconds
        - attempt
        - attempts
        - total_questions
        - answered_questions
        - correct_answers
        - incorrect_answers
        - assigned_at
        - first_opened_at
        - last_opened_at
        - completed_at
        - delivery_instance_id
        - delivery_method
        - track_id
        - track_name
        - is_admin
        - user_id
    QuestionResponse:
      oneOf:
        - $ref: '#/components/schemas/MultipleChoiceQuestionResponse'
        - $ref: '#/components/schemas/FreeTextQuestionResponse'
      discriminator:
        propertyName: type
        mapping:
          multiple_choice: '#/components/schemas/MultipleChoiceQuestionResponse'
          free_text: '#/components/schemas/FreeTextQuestionResponse'
    FeedbackResponse:
      type: object
      properties:
        object:
          type: string
          enum:
            - feedback_response
          description: Object type identifier
          example: feedback_response
        survey_id:
          type: string
          description: The feedback survey ID
          example: XdB6C1acH1TSwsUyLg3w
        survey_instance_id:
          type: string
          description: The feedback survey instance ID
          example: SQgzUmABm3QWJrU54PrH
        submitted_at:
          type: string
          format: date-time
          example: '2026-02-01T14:30:00.000Z'
          description: When the feedback was submitted (ISO 8601 format)
        responses:
          type: array
          items:
            $ref: '#/components/schemas/FeedbackQuestionResponse'
          description: Individual feedback question responses
      required:
        - object
        - survey_id
        - survey_instance_id
        - submitted_at
        - responses
      description: Post-quiz feedback response (only included if include_feedback=true)
    MultipleChoiceQuestionResponse:
      type: object
      properties:
        object:
          type: string
          enum:
            - question_response
          description: Object type identifier
          example: question_response
        question_id:
          type: string
          description: The question ID
          example: t06iKVkbhqv0tiDitrWL
        is_correct:
          type: boolean
          nullable: true
          description: >-
            Whether the answer was correct. False while `grading.status` is
            pending.
          example: true
        grading:
          $ref: '#/components/schemas/QuestionResponseGrading'
        answered_at:
          type: string
          nullable: true
          format: date-time
          example: '2026-02-01T14:22:00.000Z'
          description: When the question was answered (ISO 8601 format)
        type:
          type: string
          enum:
            - multiple_choice
        multiple_choice:
          $ref: '#/components/schemas/MultipleChoiceResponseDetails'
      required:
        - object
        - question_id
        - is_correct
        - grading
        - answered_at
        - type
        - multiple_choice
    FreeTextQuestionResponse:
      type: object
      properties:
        object:
          type: string
          enum:
            - question_response
          description: Object type identifier
          example: question_response
        question_id:
          type: string
          description: The question ID
          example: t06iKVkbhqv0tiDitrWL
        is_correct:
          type: boolean
          nullable: true
          description: >-
            Whether the answer was correct. False while `grading.status` is
            pending.
          example: true
        grading:
          $ref: '#/components/schemas/QuestionResponseGrading'
        answered_at:
          type: string
          nullable: true
          format: date-time
          example: '2026-02-01T14:22:00.000Z'
          description: When the question was answered (ISO 8601 format)
        type:
          type: string
          enum:
            - free_text
        free_text:
          $ref: '#/components/schemas/FreeTextResponseDetails'
      required:
        - object
        - question_id
        - is_correct
        - grading
        - answered_at
        - type
        - free_text
    FeedbackQuestionResponse:
      type: object
      properties:
        question_id:
          type: string
          description: The feedback question ID
          example: UGHucm2fkXijuXPzTfQn
        question_text:
          type: string
          description: The feedback question text
          example: How would you rate this quiz?
        question_type:
          type: string
          description: The type of feedback question
          example: scale
        response:
          anyOf:
            - type: string
            - type: number
          description: The participant's response
          example: 4
        comment:
          type: string
          description: Optional comment from the participant
          example: Great quiz, very informative!
      required:
        - question_id
        - question_text
        - question_type
        - response
    QuestionResponseGrading:
      type: object
      properties:
        method:
          type: string
          enum:
            - automatic
            - ai
            - owner
          description: >-
            "automatic" for an option pick or an exact accepted-answer match;
            "ai" when a model judged a free-text answer; "owner" when a quiz
            admin set the score by hand.
          example: ai
        status:
          type: string
          enum:
            - completed
            - pending
          description: '"pending" while a free-text answer is waiting to be scored.'
          example: completed
        match:
          type: string
          nullable: true
          enum:
            - clear_match
            - likely_match
            - no_match
            - null
          description: >-
            How closely an AI-scored answer matched an accepted answer. Null
            unless `method` is "ai" and scoring is complete.
          example: likely_match
        matched_answer:
          type: string
          nullable: true
          description: >-
            The accepted answer an AI-scored answer was counted as. Null unless
            it matched.
          example: White
      required:
        - method
        - status
        - match
        - matched_answer
    MultipleChoiceResponseDetails:
      type: object
      properties:
        selected_options:
          type: array
          items:
            $ref: '#/components/schemas/SelectedOption'
          description: The options the participant picked.
      required:
        - selected_options
    FreeTextResponseDetails:
      type: object
      properties:
        text:
          type: string
          description: What the participant wrote.
          example: Password reset emails
      required:
        - text
    SelectedOption:
      type: object
      properties:
        id:
          type: string
          description: The option ID
          example: Q6C1hMzWQM4GkxCRP9Fn
        text:
          type: string
          nullable: true
          description: The option text. Null when the option no longer exists on the quiz.
          example: Paris
      required:
        - id
        - text
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: API key for authentication. Generate keys in the Doozy dashboard.

````

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