# Get a provenance report

Source: https://langbot.ai/docs/api/receipts/get-provenance

`GET /v1/provenance/{attestation_id}`

A signed report of everything the feed had delivered to you for an event up to the moment you acted.

**Auth.** An API token: `Authorization: Bearer lb_…` ([create one](https://langbot.ai/app/tokens)). Signed-in web sessions work too.

**Limits.** Counts against your plan's API requests (60, 600 or 3,000 a minute on Free, Builder and Standard).

## Parameters

### Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `attestation_id` | string | yes | One of your attestations (`att_…`). |

### Query parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `format` | string | no | `json` or `jsonl`. Default `json`. |

## Request

**curl**

```bash
curl "https://api.langbot.ai/v1/provenance/att_01K7Q" \
  -H "Authorization: Bearer $LANGBOT_API_TOKEN"
```

**Python**

```python
import os

import httpx

r = httpx.get(
    "https://api.langbot.ai/v1/provenance/att_01K7Q",
    headers={"Authorization": f"Bearer {os.environ['LANGBOT_API_TOKEN']}"},
)
print(r.json())
```

**TypeScript**

```ts
const res = await fetch("https://api.langbot.ai/v1/provenance/att_01K7Q", {
  headers: { Authorization: `Bearer ${process.env.LANGBOT_API_TOKEN}` },
});
console.log(await res.json());
```

## Response

`200 OK`

```json
{
  "v": 1,
  "report": "provenance",
  "id": "att_01K7Q…",
  "event_id": "ev_nvda_q3_2026",
  "attestation": { "id": "att_01K7Q…", "evt_id": "evt_01K7Q…A2", "t_acted": 1760050125000 },
  "fact": { "event": { "id": "evt_01K7Q…A2", "hash": "5d0e05c3…" }, "chain": { "chain_seq": 2, "prev_hash": "b6e26232…" }, "hash_matches_attestation": true, "rights": "licensed" },
  "known_before": [ { "evt_id": "evt_01K7Q…A2", "channel": "socket", "t_delivered": 1760050124100 } ],
  "known_before_count": 1,
  "checkpoint": { "chain_seq": 2, "signature": "cEf385IN…" },
  "generated_at": 1760050130000,
  "key_id": "56475aa75463474c",
  "signature": "…"
}
```

Signed over the whole body; check it with [Verify events](https://langbot.ai/docs/api/receipts/verify) (`reports`) or offline. Evidence, not a judgement of the action.

## Errors

| Status | `code` | When |
|---|---|---|
| 404 | `not_found` | No attestation with that id on your account. |
| 401 | `auth_required` | No token was sent. |
| 401 | `token_invalid` | The token was not recognised (mistyped, revoked or expired). |
| 422 | `validation_error` | A parameter failed validation; `detail[].loc` names it. |
| 429 | `rate_limited` | Over your request budget; wait `Retry-After` seconds. |

Every error body is `{"detail": …, "code": "…"}`; branch on `code`. All codes: [Errors](https://langbot.ai/docs/api#errors).
