---
path: /v1/reference/get-audit
title: Get an audit
summary: GET /api/public/audit/{id} — poll a run and retrieve the scored report.
group: Reference
updated: 2026-06-22
---

# Get an audit

`GET https://agentfit.dev/api/public/audit/{id}`

Retrieve the status and, once complete, the full scored report for a run started by
[`POST /audit`](https://docs.agentfit.dev/v1/reference/audit). Responses set `Cache-Control: no-store`.

## Request

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| `id` | path | string (UUID) | yes | The `run_id` returned when the audit was started. |

### curl

```bash
curl -s 'https://agentfit.dev/api/public/audit/019eefa7-fdb7-77ac-8c56-ad184e44ece6' | jq '.status, .total_score'
```

### Python

```python
import requests

run_id = "019eefa7-fdb7-77ac-8c56-ad184e44ece6"
resp = requests.get(f"https://agentfit.dev/api/public/audit/{run_id}", timeout=10)
data = resp.json()
if data["status"] == "done":
    print(data["report"]["total_score"])
```

### JavaScript

```javascript
const runId = "019eefa7-fdb7-77ac-8c56-ad184e44ece6";
const resp = await fetch(`https://agentfit.dev/api/public/audit/${runId}`);
const data = await resp.json();
if (data.status === "done") console.log(data.report.total_score);
```

## Response

While the audit runs, `status` is `pending` or `running`. When `done`, the report is nested
under `report`. `categories` is an **object keyed by category id** (`A_discovery` …
`F_agent_surface`), each value a `{score, max}` pair; `criteria` is an **array** of
per-criterion results:

```json
{
  "run_id": "019eefa7-fdb7-77ac-8c56-ad184e44ece6",
  "status": "done",
  "total_score": 71,
  "report": {
    "base_url": "https://docs.stripe.com",
    "audit_date": "2026-06-22",
    "total_score": 71,
    "max_score": 100,
    "categories": {
      "A_discovery": { "score": 11, "max": 13 },
      "F_agent_surface": { "score": 9, "max": 10 }
    },
    "criteria": [
      { "id": "A1", "status": "present", "score": 2, "max": 2, "evidence_url": "https://docs.stripe.com/llms.txt" }
    ]
  }
}
```

The six categories are **A Discovery, B Page artifacts, C API spec, D Content, E Hygiene,
F Agent Surface** (see the [glossary](https://docs.agentfit.dev/v1/glossary)). A `status` of `error` includes
a short, safe `error` reason.

## Errors

| Status | `code` | Meaning |
|---|---|---|
| 404 | `not_found` | No run exists for that `id`. |
| 422 | `not_done` | The run has not finished yet. |
| 429 | `rate_limited` | Per-IP poll rate exceeded; see `retry_after`. |

## Deprecated: the legacy in-memory poll

> **Deprecated.** The legacy `GET /audit/{id}` poll path is an in-memory fallback used only
> when the service runs without a database. It is **not** part of the versioned contract and
> may be removed. Always poll the durable `GET /api/public/audit/{id}` endpoint documented
> above; the legacy path is retained only for backward compatibility with old clients.
