# `get_audit_status`

Fetches the status of a run.

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

## Input

| Param | Type | Required | Notes |
|---|---|---|---|
| `run_id` | string | ✅ | The id returned by [`run_audit`](run-audit.md) |

## Output

```json
{
  "id": "…",
  "brand_id": "…",
  "status": "running",
  "started_at": "2026-08-31T09:12:04.000Z",
  "finished_at": null,
  "error": null
}
```

| `status` | Meaning |
|---|---|
| `pending` | Accepted, not yet started |
| `running` | In progress |
| `complete` | Finished — [`get_report`](get-report.md) will now return |
| `error` | Failed; `error` carries the reason |

## Errors

`NOT_FOUND` with `details.run_id` when the id is unknown.

## Polling

This tool has the highest rate limit of any (~60/min) precisely so it can be polled.
Every few seconds is fine. Poll until `complete` or `error` — do not poll
[`get_report`](get-report.md) directly, which is limited to ~30/min and returns
`NOT_FOUND` while a run is in flight.

!!!info An `error` status is not always a bug
A run legitimately ends in `error` when it could not gather enough evidence to score
honestly — for example, no engine returned a usable response. That is the system
refusing to publish a number it cannot stand behind. See
[evidence gates](../../audit/scoring.md#evidence-gates).
!!!
