---
title: "Get evaluation results"
method: GET
path: "/v1/retrievers/{retriever_id}/evaluations/{evaluation_id}"
tags: ["Retriever Evaluations"]
---

# Get evaluation results

`GET /v1/retrievers/{retriever_id}/evaluations/{evaluation_id}`

## Request

- Base URL: `https://api.mixpeek.com`
- URL: `https://api.mixpeek.com/v1/retrievers/{retriever_id}/evaluations/{evaluation_id}`
- Auth: HTTP bearer and API key in header `X-Namespace`

Retrieve evaluation results with all calculated metrics

## Path parameters

- `retriever_id` string, required
- `evaluation_id` string, required

## Response `200`

Successful Response

- EvaluationRecord: Complete evaluation record with results.
  - `evaluation_id` string, required: Unique evaluation identifier
  - `retriever_id` string, required: ID of retriever being evaluated
  - `dataset_id` string, required: ID of dataset used for evaluation
  - `dataset_name` string, required: Name of dataset
  - `config` EvaluationConfig, required: Configuration for an evaluation run.
    - `k_values` integer[], nullable: K values for Precision@K, Recall@K, NDCG@K, etc.
    - `metrics` string[], nullable: List of metrics to calculate. Available: precision, recall, f1, f2, map, ndcg, mrr. f2 is the recall-weighted F-beta (beta=2) — useful when missing a relevant doc costs more than a false positive.
  - `status` 'pending' | 'in_progress' | 'completed' | 'failed', required: Status of an evaluation run.
  - `created_at` string, date-time, required: When evaluation was created
  - `updated_at` string, date-time, required: Last update timestamp
  - `completed_at` string, date-time, nullable: When evaluation completed
  - `namespace_id` string, required: Namespace ID
  - `internal_id` string, required: Internal organization ID
  - `query_count` integer, required: Number of queries evaluated
  - `overall_metrics` object, nullable: Aggregated metrics across all queries
  - `metrics_by_k` object, nullable: Metrics broken down by K value (keys are string K values like '5', '10', '20')
  - `total_queries` integer, nullable: Total queries in the dataset for this run (= evaluated_queries + skipped_queries).
  - `evaluated_queries` integer, nullable: Number of queries that produced metrics. May be < total_queries when some queries were skipped (skip-and-continue on empty/failing input).
  - `skipped_queries` integer, nullable: Number of queries skipped during evaluation (empty query_input or a per-query execution failure) — these did not fail the whole eval.
  - `error_message` string, nullable: Error message if failed
  - `query_results` QueryOutcome[], nullable: Per-query outcomes: which branch each attempted query took and the actual error for skips, so an all-skipped run is actionable from the record without worker-log access.
    - `query_id` string, required: Ground-truth query id from the dataset
    - `status` string, required: 'evaluated' (produced metrics) or 'skipped' (see error)
    - `error` string, nullable: The per-query execution error when status='skipped'; null otherwise.
    - `retrieved_count` integer, nullable: Documents retrieved when status='evaluated'; null for skips.
  - `baseline_evaluation_id` string, nullable: For a trained weight set's evaluation: the evaluation of the live configuration on the same dataset that this run was gated against.
  - `weight_set_id` string, nullable: For a trained weight set's evaluation: the weight set this run scored. When the verdict passed, the stage's learning_config.shipped_weight_set carries the same id.
  - `verdict` GateVerdict: The evaluation gate's verdict on a candidate against the live baseline.
    - `passed` boolean, required: True only when the candidate shipped: no metric regressed and the primary metric scored strictly higher than the baseline.
    - `reason` string, required: Why the candidate shipped or was refused.
    - `primary_metric` string, nullable: Metric the candidate had to beat the baseline on.
    - `compared_metrics` integer: Number of metrics compared between the two evaluations.
    - `regressed_metrics` string[]: Metrics that dropped past their threshold.
    - `skipped_metrics` string[]: Baseline metrics the candidate did not produce.
    - `per_metric` object: Baseline and candidate score for every compared metric.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `500`: Internal Server Error
- `503`: Service Unavailable

## Changes

- **2026-10-09** `61a175e8eb9a`: 1 warning, 5 info
  - removed the optional property `detail` from the response with the `422` status
  - added the non-success response with the status `429`
  - added the non-success response with the status `503`
  - added the optional property `success` to the response with the `422` status
  - …2 more
- **2026-10-06** `b75474e978ff`: 3 info
  - added the optional property `baseline_evaluation_id` to the response with the `200` status
  - added the optional property `verdict` to the response with the `200` status
  - added the optional property `weight_set_id` to the response with the `200` status
- **2026-08-23** `5307993e44d3`: 1 info
  - added the optional property `query_results` to the response with the `200` status
- **2026-08-09** `5d4c905106b4`: 1 info
  - the endpoint scheme security `BearerAuth AND NamespaceHeader` was added to the API

[Operation history](https://skmtc.dev/mixpeek/apis/mixpeek-api/changes/v1/retrievers/:retriever_id/evaluations/:evaluation_id/get.md)

---

[API](https://skmtc.dev/mixpeek/apis/mixpeek-api.md) - [All operations](https://skmtc.dev/mixpeek/apis/mixpeek-api/llms.txt) - [OpenAPI document](https://skmtc.dev/mixpeek/apis/mixpeek-api/revisions/790bc16455f6?raw)
