> ## 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.

# Get survey report

> Retrieve a detailed analytics report for a survey, including summary statistics, per-question analytics with breakdowns, and a paginated participant list. For anonymous surveys, only responded participants can be returned.



## OpenAPI

````yaml /openapi.json get /v1/surveys/{surveyId}/report
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
paths:
  /v1/surveys/{surveyId}/report:
    get:
      tags:
        - Surveys
      summary: Get survey report
      description: >-
        Retrieve a detailed analytics report for a survey, including summary
        statistics, per-question analytics with breakdowns, and a paginated
        participant list. For anonymous surveys, only responded participants can
        be returned.
      parameters:
        - schema:
            type: string
            minLength: 1
            description: The unique identifier of the survey
            example: survey_abc123
          required: true
          description: The unique identifier of the survey
          name: surveyId
          in: path
        - schema:
            type: integer
            minimum: 1
            maximum: 250
            default: 25
            description: Maximum number of participants to return (1-250, default 25)
            example: 25
          required: false
          description: Maximum number of participants to return (1-250, default 25)
          name: limit
          in: query
        - schema:
            type: string
            description: >-
              Cursor for pagination - the ID of the last participant from the
              previous page
            example: user_abc123
          required: false
          description: >-
            Cursor for pagination - the ID of the last participant from the
            previous page
          name: starting_after
          in: query
        - schema:
            type: string
            description: >-
              Cursor for pagination - the ID of the first participant from the
              next page (for backward pagination)
            example: user_xyz789
          required: false
          description: >-
            Cursor for pagination - the ID of the first participant from the
            next page (for backward pagination)
          name: ending_before
          in: query
        - schema:
            type: string
            description: Filter participants by received_at >= this date (ISO 8601 format)
            example: '2026-01-01T00:00:00.000Z'
          required: false
          description: Filter participants by received_at >= this date (ISO 8601 format)
          name: from_date
          in: query
        - schema:
            type: string
            description: Filter participants by received_at <= this date (ISO 8601 format)
            example: '2026-01-31T23:59:59.999Z'
          required: false
          description: Filter participants by received_at <= this date (ISO 8601 format)
          name: to_date
          in: query
        - schema:
            type: string
            enum:
              - all
              - responded
              - not_responded
              - none
            default: responded
            description: >-
              Filter participants by status: 'responded' (default),
              'not_responded', 'all', or 'none' (analytics only, skip
              participant list)
            example: responded
          required: false
          description: >-
            Filter participants by status: 'responded' (default),
            'not_responded', 'all', or 'none' (analytics only, skip participant
            list)
          name: participant_status
          in: query
        - schema:
            type: string
            description: >-
              Filter to a specific delivery instance by ID. When set, from_date
              and to_date are ignored.
            example: inst_abc123
          required: false
          description: >-
            Filter to a specific delivery instance by ID. When set, from_date
            and to_date are ignored.
          name: instance_id
          in: query
        - schema:
            type: string
            description: >-
              Filter results to participants from a specific track (workflow).
              When specified, only participants who received the survey via this
              track will be included.
            example: wf_abc123
          required: false
          description: >-
            Filter results to participants from a specific track (workflow).
            When specified, only participants who received the survey via this
            track will be included.
          name: track_id
          in: query
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
            default: 'true'
            description: Include comments on questions in the report (default true)
            example: 'true'
          required: false
          description: Include comments on questions in the report (default true)
          name: include_comments
          in: query
      responses:
        '200':
          description: Survey report with analytics and participants
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SurveyReportResponse'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Authentication required - missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Survey not found or user does not have access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - apiKey: []
components:
  schemas:
    SurveyReportResponse:
      type: object
      properties:
        object:
          type: string
          enum:
            - survey_report
          description: Object type identifier
          example: survey_report
        id:
          type: string
          description: Survey ID
          example: survey_abc123
        title:
          type: string
          description: Survey title
          example: Employee Satisfaction Survey
        mode:
          allOf:
            - $ref: '#/components/schemas/SurveyMode'
            - description: Survey mode
              example: survey
        response_type:
          allOf:
            - $ref: '#/components/schemas/ResponseType'
            - description: How responses are collected
              example: anonymous
        summary:
          allOf:
            - $ref: '#/components/schemas/SurveyReportSummary'
            - description: Summary statistics for the report
        questions:
          type: array
          items:
            $ref: '#/components/schemas/SurveyQuestionAnalytics'
          description: Per-question analytics (average scores, answer breakdowns, eNPS)
        participants:
          type: array
          items:
            $ref: '#/components/schemas/SurveyParticipant'
          description: >-
            Paginated list of participants with their answers (based on
            participant_status)
        total_participants:
          type: integer
          description: >-
            Total number of participants matching the filter (for pagination
            progress)
          example: 180
        has_more:
          type: boolean
          description: Whether there are more participants available beyond this page
          example: false
        url:
          type: string
          description: The URL for accessing this report
          example: /v1/surveys/survey_abc123/report
        next_cursor:
          type: string
          nullable: true
          description: >-
            Cursor to fetch the next page of participants. Pass as
            starting_after in subsequent requests.
          example: part_xyz789
        previous_cursor:
          type: string
          nullable: true
          description: >-
            Cursor to fetch the previous page of participants. Pass as
            ending_before in subsequent requests.
          example: part_abc123
        warning:
          type: string
          description: Warning message for large datasets without date filters
          example: >-
            Large dataset: consider using from_date/to_date filters for better
            performance
      required:
        - object
        - id
        - title
        - mode
        - response_type
        - summary
        - questions
        - total_participants
        - has_more
        - url
        - next_cursor
        - previous_cursor
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
              enum:
                - api_error
                - authentication_error
                - invalid_request_error
                - rate_limit_error
              description: The type of error returned
              example: invalid_request_error
            code:
              type: string
              nullable: true
              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: quiz_abc123'
            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
          required:
            - type
            - code
            - message
      required:
        - error
    SurveyMode:
      type: string
      enum:
        - poll
        - survey
    ResponseType:
      type: string
      enum:
        - anonymous
        - user
    SurveyReportSummary:
      type: object
      properties:
        total_deliveries:
          type: integer
          description: Total number of survey deliveries (one per person per send)
          example: 250
        total_responses:
          type: integer
          description: Total number of responses received
          example: 180
        response_rate:
          type: number
          description: Overall response rate as percentage (0-100)
          example: 72
      required:
        - total_deliveries
        - total_responses
        - response_rate
    SurveyQuestionAnalytics:
      type: object
      properties:
        object:
          type: string
          enum:
            - survey_question_analytics
          description: Object type identifier
          example: survey_question_analytics
        id:
          type: string
          description: Question ID
          example: q_abc123
        text:
          type: string
          description: The question text
          example: How satisfied are you with your onboarding experience?
        type:
          allOf:
            - $ref: '#/components/schemas/SurveyQuestionType'
            - description: Question type
        total_responses:
          type: integer
          description: Total number of responses to this question
          example: 120
        average_score:
          type: number
          nullable: true
          description: Average score for numeric question types (scales, eNPS)
          example: 7.8
        enps_score:
          type: number
          nullable: true
          description: eNPS score (-100 to 100) for eNPS questions only
          example: 45
        enps_breakdown:
          type: object
          nullable: true
          properties:
            promoters:
              type: integer
              description: Number of promoters (9-10)
              example: 50
            passives:
              type: integer
              description: Number of passives (7-8)
              example: 40
            detractors:
              type: integer
              description: Number of detractors (0-6)
              example: 30
          required:
            - promoters
            - passives
            - detractors
          description: eNPS breakdown by category (eNPS questions only)
        answer_breakdown:
          type: array
          items:
            $ref: '#/components/schemas/SurveyAnswerBreakdown'
          description: Breakdown of how each answer was selected
        comments:
          type: array
          items:
            type: object
            properties:
              comment:
                type: string
                description: The comment text
                example: Great experience overall!
              answered_at:
                type: string
                description: When the comment was submitted (ISO 8601 format)
                example: '2026-01-16T14:30:00.000Z'
            required:
              - comment
              - answered_at
          description: >-
            Comments left on this question (only included when
            include_comments=true)
      required:
        - object
        - id
        - text
        - type
        - total_responses
        - average_score
        - enps_score
        - enps_breakdown
        - answer_breakdown
    SurveyParticipant:
      type: object
      properties:
        object:
          type: string
          enum:
            - survey_participant
          description: Object type identifier
          example: survey_participant
        id:
          type: string
          description: Participant identifier (user ID or anon_{response_id} for anonymous)
          example: user_abc123
        email:
          type: string
          nullable: true
          description: Participant's email (null for anonymous surveys)
          example: jane.doe@example.com
        display_name:
          type: string
          nullable: true
          description: Participant's display name (null for anonymous surveys)
          example: Jane Doe
        status:
          allOf:
            - $ref: '#/components/schemas/SurveyParticipantStatus'
            - description: Response status
              example: responded
        received_at:
          type: string
          description: When the participant received the survey (ISO 8601 format)
          example: '2026-01-15T10:30:00.000Z'
        responded_at:
          type: string
          nullable: true
          description: >-
            When the participant responded (ISO 8601 format, null if not
            responded)
          example: '2026-01-16T14:30:00.000Z'
        answers:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/SurveyParticipantAnswer'
          description: >-
            The participant's answers to each question (null if status is not
            'responded')
      required:
        - object
        - id
        - email
        - display_name
        - status
        - received_at
        - responded_at
        - answers
    SurveyQuestionType:
      type: string
      enum:
        - scale_1_to_10
        - scale_1_to_5
        - emoji_1_to_5
        - agree_disagree
        - enps
        - open_ended
        - multiple_choice
      description: Type of question
      example: scale_1_to_10
    SurveyAnswerBreakdown:
      type: object
      properties:
        answer:
          type: string
          description: The answer value
          example: '8'
        total_responses:
          type: integer
          description: Number of times this answer was selected
          example: 25
        percentage:
          type: number
          description: Percentage of total responses (0-100)
          example: 35.7
      required:
        - answer
        - total_responses
        - percentage
    SurveyParticipantStatus:
      type: string
      enum:
        - responded
        - not_responded
        - ignored
    SurveyParticipantAnswer:
      type: object
      properties:
        question_id:
          type: string
          description: The question ID
          example: q_abc123
        question_text:
          type: string
          description: The question text (included for convenience)
          example: How satisfied are you with your onboarding experience?
        question_type:
          $ref: '#/components/schemas/SurveyQuestionType'
        value:
          anyOf:
            - type: string
            - type: number
            - type: array
              items:
                type: string
            - nullable: true
          description: The answer value (null if question was skipped or not answered)
          example: 8
        comment:
          type: string
          nullable: true
          description: Optional comment on the answer (null if no comment)
          example: Great experience overall!
      required:
        - question_id
        - question_text
        - question_type
        - value
        - comment
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: API key for authentication. Generate keys in the Doozy dashboard.

````