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

# Get project insights

> Get a project's aggregated run and test insights over a date range, bucketed by day.

Insights cover the most recent 3 months. A `start_date` older than that is refused with a
400 rather than clamped, while an `end_date` in the future is clamped to today. Omitting
both returns the last 30 days.

A day on which the project recorded nothing is still present in the response, carrying only
its `date`.


<Info>Replace `{your-subdomain}` with your workspace's subdomain. <br /> Learn how to find your subdomain in [Workspace subdomain](/getting-started/workspace-subdomain).</Info>


## OpenAPI

````yaml bundled/playdash.yaml GET /projects/{project_id}/insights
openapi: 3.0.3
info:
  title: NeetoPlaydash APIs
  version: 1.0.0
  description: >-
    APIs to read projects, runs, test entities, result histories, traces and top
    errors from NeetoPlaydash.
servers:
  - description: NeetoPlaydash APIs
    url: https://{your-subdomain}.neetoplaydash.com/api/external/v1
    variables:
      your-subdomain:
        default: spinkart
        description: >-
          Replace **spinkart** with your [workspace's
          subdomain](/getting-started/workspace-subdomain).
security: []
tags:
  - name: Projects
    description: APIs to list projects in the workspace.
  - name: Insights
    description: >-
      APIs to fetch a project's aggregated run and test insights over a date
      range.
  - name: Runs
    description: APIs to list runs and fetch a run with its specs.
  - name: Test Entities
    description: APIs to list test entities and fetch a test entity with its outcomes.
  - name: Result Histories
    description: APIs to fetch the historical results of a test entity.
  - name: Traces
    description: APIs to fetch Playwright traces for a run or a test entity.
  - name: Top Errors
    description: >-
      APIs to fetch a run's top errors, with the failing tests grouped by their
      shared error log.
paths:
  /projects/{project_id}/insights:
    get:
      tags:
        - Insights
      summary: Get project insights
      description: >
        Get a project's aggregated run and test insights over a date range,
        bucketed by day.


        Insights cover the most recent 3 months. A `start_date` older than that
        is refused with a

        400 rather than clamped, while an `end_date` in the future is clamped to
        today. Omitting

        both returns the last 30 days.


        A day on which the project recorded nothing is still present in the
        response, carrying only

        its `date`.
      operationId: getProjectInsights
      parameters:
        - $ref: '#/components/parameters/api_key_header'
        - $ref: '#/components/parameters/accept_header'
        - $ref: '#/components/parameters/project_id_param'
        - in: query
          name: start_date
          description: >-
            Start of the range as an ISO date. Defaults to 29 days before the
            end date. Must fall within the most recent 3 months.
          required: false
          schema:
            type: string
            format: date
            example: '2026-07-15'
        - in: query
          name: end_date
          description: >-
            End of the range as an ISO date. Defaults to today. A date in the
            future is clamped to today.
          required: false
          schema:
            type: string
            format: date
            example: '2026-08-13'
        - in: query
          name: branch
          description: Count only runs on this branch.
          required: false
          schema:
            type: string
            example: main
        - in: query
          name: author
          description: Count only runs by this author.
          required: false
          schema:
            type: string
            example: Oliver Smith
        - in: query
          name: tags
          description: >-
            Count only runs carrying every listed tag. Accepts a comma-separated
            list.
          required: false
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
            example:
              - nightly
              - smoke
        - in: query
          name: timezone
          description: >-
            IANA timezone used to bucket days and resolve the date defaults.
            Defaults to `Etc/UTC`.
          required: false
          schema:
            type: string
            example: America/New_York
      responses:
        '200':
          description: >-
            OK - Request succeeded. The response reports the effective
            `start_date` and `end_date` after clamping.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/insight_response'
        '400':
          description: Bad request - The date range or timezone could not be used.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: A human-readable error message.
              examples:
                beyond_lookback:
                  summary: Start date older than the 3 month window
                  value:
                    error: >-
                      Insights are available only for the most recent 3 months.
                      Use a date range starting on or after 2026-05-13.
                invalid_date_range:
                  summary: Unparseable date, or a start after the end
                  value:
                    error: Invalid date range format
                invalid_timezone:
                  summary: Unrecognised timezone
                  value:
                    error: >-
                      Unrecognised timezone: 'Mars/Olympus'. Use a valid IANA
                      timezone name such as 'America/New_York'.
components:
  parameters:
    api_key_header:
      in: header
      name: X-Api-Key
      description: >-
        Use the X-Api-Key header to provide your workspace API key. Refer to
        [Authentication](/getting-started/authentication) for more information.
      required: true
      schema:
        type: string
    accept_header:
      in: header
      name: Accept
      description: >-
        Specifies the expected response format. Must be set to
        `application/json` for proper API communication.
      required: true
      schema:
        type: string
        enum:
          - application/json
        default: application/json
    project_id_param:
      in: path
      name: project_id
      description: >-
        Id of the project. You can get `project_id` by listing your projects
        using the [List projects](/api-reference/projects/list) API.
      required: true
      schema:
        type: string
        example: pdqmxlz
  schemas:
    insight_response:
      type: object
      properties:
        start_date:
          type: string
          format: date
          description: >-
            Effective start of the range after clamping, in the requested
            timezone.
          example: '2026-07-15'
        end_date:
          type: string
          format: date
          description: >-
            Effective end of the range after clamping, in the requested
            timezone.
          example: '2026-08-13'
        timezone:
          type: string
          description: IANA timezone the day buckets and dates are expressed in.
          example: Etc/UTC
        runs:
          $ref: '#/components/schemas/insight_runs'
        tests:
          $ref: '#/components/schemas/insight_tests'
    insight_runs:
      type: object
      properties:
        runs_volume_data:
          type: array
          description: One entry per day in the range, oldest first.
          items:
            $ref: '#/components/schemas/insight_runs_day'
        overall_data:
          $ref: '#/components/schemas/insight_runs_overall'
    insight_tests:
      type: object
      properties:
        tests_volume_data:
          type: array
          description: One entry per day in the range, oldest first.
          items:
            $ref: '#/components/schemas/insight_tests_day'
        overall_data:
          $ref: '#/components/schemas/insight_tests_overall'
    insight_runs_day:
      type: object
      description: >-
        Run counts for one day. Only `date` is present on a day the project
        recorded no passed or failed runs; every other property is omitted for
        that day.
      properties:
        date:
          type: string
          description: >-
            Day the counts belong to, formatted as `%b %e, %Y` in the requested
            timezone.
          example: Aug 13, 2026
        passed_runs_count:
          type: integer
          description: Runs that passed on this day.
          example: 24
        failed_runs_count:
          type: integer
          description: Runs that failed on this day.
          example: 3
        average_passing_rate:
          type: number
          description: Percentage of this day's runs that passed.
          example: 88.89
        average_run_duration:
          type: number
          description: Average run duration on this day, in milliseconds.
          example: 182450
    insight_runs_overall:
      type: object
      properties:
        passed_runs_count:
          type: integer
          description: Runs that passed across the range.
          example: 612
        failed_runs_count:
          type: integer
          description: Runs that failed across the range.
          example: 88
        average_passing_rate:
          type: number
          description: Percentage of runs in the range that passed.
          example: 87.43
        average_run_duration:
          type: number
          description: Average run duration across the range, in milliseconds.
          example: 176320.5
    insight_tests_day:
      type: object
      description: >-
        Test-result counts for one day. Only `date` is present on a day the
        project recorded no test results; every other property is omitted for
        that day.
      properties:
        date:
          type: string
          description: >-
            Day the counts belong to, formatted as `%b %e, %Y` in the requested
            timezone.
          example: Aug 13, 2026
        passed_tests_count:
          type: integer
          description: Tests that passed on this day, flaky ones included.
          example: 1840
        failed_tests_count:
          type: integer
          description: Tests that failed on this day.
          example: 26
        skipped_tests_count:
          type: integer
          description: Tests skipped on this day.
          example: 12
        flaky_tests_count:
          type: integer
          description: >-
            Tests that passed on a retry after failing at least once on this
            day.
          example: 9
        timed_out_tests_count:
          type: integer
          description: Tests that timed out on this day.
          example: 4
        pass_percentage:
          type: number
          description: Percentage of this day's test results that passed.
          example: 97.72
        fail_percentage:
          type: number
          description: Percentage of this day's test results that failed.
          example: 1.38
        skip_percentage:
          type: number
          description: Percentage of this day's test results that were skipped.
          example: 0.64
        flaky_percentage:
          type: number
          description: Percentage of this day's test results that were flaky.
          example: 0.48
        timed_out_percentage:
          type: number
          description: Percentage of this day's test results that timed out.
          example: 0.21
        average_passing_rate:
          type: number
          description: >-
            Same value as `pass_percentage`, under the name the runs section
            uses.
          example: 97.72
        average_flakiness_rate:
          type: number
          description: >-
            Same value as `flaky_percentage`, under the name the runs section
            uses.
          example: 0.48
    insight_tests_overall:
      type: object
      properties:
        passed_tests_count:
          type: integer
          description: Tests that passed across the range, flaky ones included.
          example: 48210
        failed_tests_count:
          type: integer
          description: Tests that failed across the range.
          example: 702
        skipped_tests_count:
          type: integer
          description: Tests skipped across the range.
          example: 318
        flaky_tests_count:
          type: integer
          description: Tests that passed on a retry after failing at least once.
          example: 241
        timed_out_tests_count:
          type: integer
          description: Tests that timed out across the range.
          example: 96
        average_passing_rate:
          type: number
          description: Percentage of tests in the range that passed.
          example: 97.71
        average_flakiness_rate:
          type: number
          description: Percentage of tests in the range that were flaky.
          example: 0.49

````