---
title: "Get Eval Run Report"
method: GET
path: "/api/platform/v1/eval-runs/{id}/report"
tags: ["observability"]
---

# Get Eval Run Report

`GET /api/platform/v1/eval-runs/{id}/report`

## Request

- Base URL: `https://docs.amdahl.ai`
- URL: `https://docs.amdahl.ai/api/platform/v1/eval-runs/{id}/report`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Fetch the canonical report card for one eval run as ready-to-paste markdown: your draft score vs the improved one, the bar, the transition, cited customer quotes, and any confidence caveat. Read when presenting a result to a person — paste the markdown as written rather than summarising it, so the numbers reported are the ones Amdahl computed.

## Path parameters

- `id` string, required

## Response `200`

OK

- object
  - `data` object, required
    - `status` 'queued' | 'running' | 'complete' | 'failed' | 'canceled', required: The run status, mirrored at the root so `data.status` resolves here as it does on every other eval read. Identical to `report.status`. The terminal success value is `complete` — never `completed`.
    - `report` object, required: The canonical report card. `markdown` is a string on every run state; `headline` and `findings` are null until the run reaches `complete`.
      - `run_id` string, required
      - `eval_slug` string, required
      - `status` string, required
      - `markdown` string, required
      - `headline` object, nullable
      - `findings` object, nullable: What did not hold up on the submitted copy: `failed[]` (one entry per rubric line missed, each `{dimension, reasoning}`), `contradicting[]`, and `truncated`. `dimension` is the rubric line’s STEM — the clause before the first colon — because the card renders it as a bold lead-in to that line’s `reasoning`, which carries the substance. The gate read names the SAME lines IN FULL: `gate.dimensions_failed` on GET /eval-runs/{id}/gate spells out each line’s whole text, because it travels without a reasoning field and the stem alone would drop the criterion. Same lines, two renderings, on purpose — a diff between the two strings is expected, not a bug. The two can also differ in LENGTH: `failed[]` cuts at 8 and says so via `truncated`, while `gate.dimensions_failed` is uncapped. On the shipped five-line rubric that cut never binds; a tenant-authored eval with a longer rubric can reach it.

## Other responses

- `400`: Invalid input - failed schema validation
- `401`: Authentication required
- `403`: Forbidden - missing scope or role
- `404`: Not found
- `500`: Internal server error

---

[API](https://skmtc.dev/amdahl/apis/amdahl-platform-api.md) · [All operations](https://skmtc.dev/amdahl/apis/amdahl-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/amdahl/apis/amdahl-platform-api/revisions/d4eee33e2472?raw)
