# `get_report`

Returns the rendered markdown report for a completed run.

**Tier:** read · **Rate limit:** ~30/min

## Input

| Param | Type | Required | Notes |
|---|---|---|---|
| `run_id` | string | ✅ | The run to fetch the report for |

## Output

```json
{
  "run_id": "…",
  "markdown": "# AI SHOPPING AUDIT — BROOKLINEN\n…"
}
```

The markdown is the full report. See [Reports](../../audit/reports.md) for its section
structure and how to read the four-state checklist.

## Errors

`NOT_FOUND` — `"No report found for run <run_id>. The run may still be in progress."`

This is the expected response for an unfinished run. Poll
[`get_audit_status`](get-audit-status.md) first.

## The report may contain no score

When the [evidence gates](../../audit/scoring.md#evidence-gates) fail, the report opens
with an *Insufficient evidence — no score issued* section listing named blockers, in
place of the scorecard. This is a successful response describing a withheld score, not
an error. Do not present it as a zero.
