## List Evaluation Dashboards

**get** `/v5/evaluation-dashboards`

List dashboards in the caller's account, paginated, with optional filters.

Filter to a single evaluation with `evaluation_id` or to a group with
`evaluation_group_id`; passing both is rejected, since a dashboard is bound to one
or the other. `tags` matches case-insensitively (values are lowercased before
lookup), `created_by_ids` filters by creator identity, and `search` matches the
dashboard name and tags. Archived dashboards are excluded unless `include_archived`
is true. The returned items carry only the dashboards' own fields — widgets and
widget results are never embedded here; use the get-by-id endpoint with the
`widgets`/`widget_results` views to load those.

### Query Parameters

- `created_by_ids: optional array of string`

  Filter by creator user IDs

- `ending_before: optional string`

- `evaluation_group_id: optional string`

- `evaluation_id: optional string`

- `include_archived: optional boolean`

- `limit: optional number`

- `search: optional string`

  Search in name and tags

- `sort_by: optional string`

- `sort_order: optional SortOrder`

  - `"asc"`

  - `"desc"`

- `starting_after: optional string`

- `tags: optional array of string`

  Filter by tags (case-insensitive)

### Returns

- `has_more: boolean`

  Whether there are more items left to be fetched.

- `items: array of EvaluationDashboard`

  - `id: string`

    Unique identifier of the dashboard

  - `account_id: string`

    Account that owns this dashboard

  - `created_at: string`

    When the dashboard was created

  - `created_by: Identity`

    The identity that created the entity.

    - `id: string`

    - `type: "user" or "service_account"`

      - `"user"`

      - `"service_account"`

    - `object: optional "identity"`

      - `"identity"`

  - `name: string`

    Dashboard name

  - `tags: array of string`

    The tags associated with the entity

  - `updated_at: string`

    When the dashboard was last updated

  - `archived_at: optional string`

    When the dashboard was archived (soft-deleted)

  - `description: optional string`

    Dashboard description

  - `error_message: optional string`

    Error message if computation failed

  - `evaluation_group_id: optional string`

    Evaluation group ID

  - `evaluation_id: optional string`

    Evaluation ID

  - `object: optional "evaluation_dashboard"`

    - `"evaluation_dashboard"`

  - `widget_order: optional array of string`

    Ordered array of widget IDs

  - `widget_results: optional array of EvaluationDashboardWidgetResult`

    Widget results for this dashboard. Populated with 'widget_results' view.

    - `id: string`

      Unique identifier of the widget result

    - `account_id: string`

      Account that owns this widget result

    - `computation_status: "pending" or "completed" or "failed"`

      Status of the computation

      - `"pending"`

      - `"completed"`

      - `"failed"`

    - `created_at: string`

      When the widget result was created

    - `widget_id: string`

      Unique identifier of the widget

    - `computation_job_id: optional string`

      Temporal workflow ID or job ID for async computation tracking

    - `computed_at: optional string`

      Timestamp when computation completed successfully

    - `computed_result: optional map[unknown]`

      Cached computation results

    - `error_message: optional string`

      Error message if computation failed

    - `evaluation_group_id: optional string`

      FK to evaluation_groups. Null if result is for a single evaluation.

    - `evaluation_id: optional string`

      FK to evaluations. Null if result is for an evaluation group.

    - `object: optional "evaluation_dashboard_widget_result"`

      - `"evaluation_dashboard_widget_result"`

    - `widget: optional EvaluationDashboardWidget`

      Widget that this result is for

      - `id: string`

        Unique identifier of the widget

      - `account_id: string`

        Account that owns this widget

      - `created_at: string`

        When the widget was created

      - `title: string`

        Widget title

      - `type: EvaluationWidgetTypeEnum`

        Widget type

        - `"bar"`

        - `"histogram"`

        - `"donut"`

        - `"scatter"`

        - `"metric"`

        - `"table"`

        - `"markdown"`

        - `"heading"`

        - `"timeseries"`

      - `archived_at: optional string`

        When the widget was archived (soft-deleted)

      - `config: optional map[unknown]`

        Chart-specific display configuration

      - `object: optional "evaluation_dashboard_widget"`

        - `"evaluation_dashboard_widget"`

      - `query: optional SeriesQuery or MetricQuery`

        Structured query AST for metric computation (SeriesQuery or MetricQuery)

        - `SeriesQuery object { select, evaluation_ids, filter, 4 more }`

          Query that returns a series of records (used for table/bar/histogram/donut/scatter widgets).

          Used for widget types: table, bar, histogram, donut, scatter.
          Returns: {"type": "series", "data": [...]}

          Example SQL equivalent:
          SELECT category, AVG(score) as avg_score, COUNT(*) as count
          FROM evaluation_items
          WHERE score > 0.5 AND category = 'test'
          GROUP BY category
          ORDER BY avg_score DESC
          LIMIT 100

          - `select: array of SelectItem`

            - `expression: object { column, source, type }  or object { column, function, evaluation_ids, 3 more }`

              Reference to a column from evaluation_items.data

              Example:
              {"type": "COLUMN", "column": "category"}

              - `Column object { column, source, type }`

                Reference to a column from evaluation_items.data

                Example:
                {"type": "COLUMN", "column": "category"}

                - `column: string`

                  Column name from evaluation_items.data

                - `source: optional string`

                  Column source: 'data' or 'task_result_cache'

                - `type: optional "COLUMN"`

                  - `"COLUMN"`

              - `Aggregation object { column, function, evaluation_ids, 3 more }`

                Aggregation function to apply

                Examples:
                {"type": "AGGREGATION", "function": "AVG", "column": "score"}
                {"type": "AGGREGATION", "function": "COUNT", "column": "*"}
                {"type": "AGGREGATION", "function": "PERCENTILE", "column": "score", "params": {"percentile": 95}}

                - `column: string`

                  Column to aggregate, or '*' for COUNT(*)

                - `function: "COUNT" or "SUM" or "AVG" or 7 more`

                  Supported aggregation functions

                  - `"COUNT"`

                  - `"SUM"`

                  - `"AVG"`

                  - `"MIN"`

                  - `"MAX"`

                  - `"STDDEV"`

                  - `"VARIANCE"`

                  - `"PERCENTILE"`

                  - `"COUNT_DISTINCT"`

                  - `"PERCENTAGE"`

                - `evaluation_ids: optional array of string`

                  Optional subset of evaluation IDs for per-aggregation filtering in evaluation group dashboards.

                - `params: optional map[unknown]`

                  Function parameters (e.g., {'percentile': 95} for PERCENTILE, {'percentage_filters': Filter} for PERCENTAGE)

                - `source: optional string`

                  Column source: 'data' or 'task_result_cache'

                - `type: optional "AGGREGATION"`

                  - `"AGGREGATION"`

            - `alias: optional string`

              Optional alias for the selected item

          - `evaluation_ids: optional array of string`

            Optional subset of evaluation IDs to compute on. Only applicable for evaluation group dashboards. If omitted, computes on all evaluations in the group.

          - `filter: optional Filter`

            Filter conditions (WHERE clause)

            - `conditions: array of object { column, operator, source, value }`

              - `column: string`

                Column name to filter on

              - `operator: "=" or "!=" or ">" or 9 more`

                Comparison operator

                - `"="`

                - `"!="`

                - `">"`

                - `"<"`

                - `">="`

                - `"<="`

                - `"IN"`

                - `"NOT IN"`

                - `"LIKE"`

                - `"NOT LIKE"`

                - `"IS NULL"`

                - `"IS NOT NULL"`

              - `source: optional string`

                Column source: 'data' or 'task_result_cache'

              - `value: optional string or number or boolean or array of unknown`

                Value to compare against. Not required for IS NULL / IS NOT NULL operators.

                - `string`

                - `number`

                - `boolean`

                - `array of unknown`

            - `logicalOperators: optional array of "AND" or "OR"`

              Logical operators connecting conditions. Length must be len(conditions) - 1

              - `"AND"`

              - `"OR"`

          - `groupBy: optional array of string`

            Columns to group by

          - `latest_only: optional boolean`

            When True, the widget computes against rows from only the most recent active evaluation in the group (by EvaluationORM.created_at). Only applicable for evaluation group dashboards. Composes with evaluation_ids (latest within the subset). Cannot be combined with per-aggregation evaluation_ids; the use case enforces these rules.

          - `limit: optional number`

            Max rows to return

          - `orderBy: optional array of object { column, direction, source }`

            Sort order

            - `column: string`

              Column name to sort by

            - `direction: optional "ASC" or "DESC"`

              Sort direction

              - `"ASC"`

              - `"DESC"`

            - `source: optional string`

              Column source: 'data' or 'task_result_cache'

        - `MetricQuery object { select, evaluation_ids, filter, latest_only }`

          Query that returns a single metric value (used for metric widgets).

          Used for widget type: metric.
          Enforces exactly 1 aggregation in select.
          Returns: {"type": "metric", "data": ...}

          Example SQL equivalent:
          SELECT AVG(score) as average_score
          FROM evaluation_items

          - `select: array of SelectItem`

            - `expression: object { column, source, type }  or object { column, function, evaluation_ids, 3 more }`

              Reference to a column from evaluation_items.data

              Example:
              {"type": "COLUMN", "column": "category"}

            - `alias: optional string`

              Optional alias for the selected item

          - `evaluation_ids: optional array of string`

            Optional subset of evaluation IDs to compute on. Only applicable for evaluation group dashboards. If omitted, computes on all evaluations in the group.

          - `filter: optional Filter`

            Filter conditions (WHERE clause)

          - `latest_only: optional boolean`

            When True, the widget computes against rows from only the most recent active evaluation in the group (by EvaluationORM.created_at). Only applicable for evaluation group dashboards. Composes with evaluation_ids (latest within the subset). Cannot be combined with per-aggregation evaluation_ids; the use case enforces these rules.

  - `widgets: optional array of EvaluationDashboardWidget`

    Widgets associated with this dashboard. Populated with 'widgets' view.

    - `id: string`

      Unique identifier of the widget

    - `account_id: string`

      Account that owns this widget

    - `created_at: string`

      When the widget was created

    - `title: string`

      Widget title

    - `type: EvaluationWidgetTypeEnum`

      Widget type

    - `archived_at: optional string`

      When the widget was archived (soft-deleted)

    - `config: optional map[unknown]`

      Chart-specific display configuration

    - `object: optional "evaluation_dashboard_widget"`

    - `query: optional SeriesQuery or MetricQuery`

      Structured query AST for metric computation (SeriesQuery or MetricQuery)

- `total: number`

  The total of items that match the query. This is greater than or equal to the number of items returned.

- `limit: optional number`

  The maximum number of items to return.

- `object: optional "list"`

  - `"list"`

### Example

```http
curl https://api.egp.scale.com/v5/evaluation-dashboards \
    -H "x-api-key: $SGP_API_KEY"
```

#### Response

```json
{
  "has_more": true,
  "items": [
    {
      "id": "id",
      "account_id": "account_id",
      "created_at": "2019-12-27T18:11:19.117Z",
      "created_by": {
        "id": "id",
        "type": "user",
        "object": "identity"
      },
      "name": "name",
      "tags": [
        "string"
      ],
      "updated_at": "2019-12-27T18:11:19.117Z",
      "archived_at": "2019-12-27T18:11:19.117Z",
      "description": "description",
      "error_message": "error_message",
      "evaluation_group_id": "evaluation_group_id",
      "evaluation_id": "evaluation_id",
      "object": "evaluation_dashboard",
      "widget_order": [
        "string"
      ],
      "widget_results": [
        {
          "id": "id",
          "account_id": "account_id",
          "computation_status": "pending",
          "created_at": "2019-12-27T18:11:19.117Z",
          "widget_id": "widget_id",
          "computation_job_id": "computation_job_id",
          "computed_at": "2019-12-27T18:11:19.117Z",
          "computed_result": {
            "foo": "bar"
          },
          "error_message": "error_message",
          "evaluation_group_id": "evaluation_group_id",
          "evaluation_id": "evaluation_id",
          "object": "evaluation_dashboard_widget_result",
          "widget": {
            "id": "id",
            "account_id": "account_id",
            "created_at": "2019-12-27T18:11:19.117Z",
            "title": "title",
            "type": "bar",
            "archived_at": "2019-12-27T18:11:19.117Z",
            "config": {
              "foo": "bar"
            },
            "object": "evaluation_dashboard_widget",
            "query": {
              "select": [
                {
                  "expression": {
                    "column": "column",
                    "source": "source",
                    "type": "COLUMN"
                  },
                  "alias": "alias"
                }
              ],
              "evaluation_ids": [
                "string"
              ],
              "filter": {
                "conditions": [
                  {
                    "column": "column",
                    "operator": "=",
                    "source": "source",
                    "value": "string"
                  }
                ],
                "logicalOperators": [
                  "AND"
                ]
              },
              "groupBy": [
                "string"
              ],
              "latest_only": true,
              "limit": 1,
              "orderBy": [
                {
                  "column": "column",
                  "direction": "ASC",
                  "source": "source"
                }
              ]
            }
          }
        }
      ],
      "widgets": [
        {
          "id": "id",
          "account_id": "account_id",
          "created_at": "2019-12-27T18:11:19.117Z",
          "title": "title",
          "type": "bar",
          "archived_at": "2019-12-27T18:11:19.117Z",
          "config": {
            "foo": "bar"
          },
          "object": "evaluation_dashboard_widget",
          "query": {
            "select": [
              {
                "expression": {
                  "column": "column",
                  "source": "source",
                  "type": "COLUMN"
                },
                "alias": "alias"
              }
            ],
            "evaluation_ids": [
              "string"
            ],
            "filter": {
              "conditions": [
                {
                  "column": "column",
                  "operator": "=",
                  "source": "source",
                  "value": "string"
                }
              ],
              "logicalOperators": [
                "AND"
              ]
            },
            "groupBy": [
              "string"
            ],
            "latest_only": true,
            "limit": 1,
            "orderBy": [
              {
                "column": "column",
                "direction": "ASC",
                "source": "source"
              }
            ]
          }
        }
      ]
    }
  ],
  "total": 0,
  "limit": 0,
  "object": "list"
}
```
