---
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}`

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 (BACKE-3453): 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.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Validation Error
- `500` — Internal Server Error

---

[API](https://skmtc.net/mixpeek/apis/mixpeek-api.md) · [All operations](https://skmtc.net/mixpeek/apis/mixpeek-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mixpeek/mixpeek-api/revisions/5307993e44d3/schema)
