# Get a receipt

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

`GET /v1/receipts/{evt_id}`

One event with its hash, its position in the source's chain and the nearest signed checkpoint.

**Auth.** None. Without a token the call is served as Free (the Free delay and request budget, shared per IP); send `Authorization: Bearer lb_…` for your plan's.

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

## Parameters

### Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `evt_id` | string | yes | The event id (`evt_…`). |

## Request

**curl**

```bash
curl "https://api.langbot.ai/v1/receipts/evt_01M6FZG8RAB39YJ0YZEPX3DVFD"
```

**Python**

```python
from langbot import LangbotClient

async with LangbotClient() as lb:
    r = await lb.receipt("evt_01M6FZG8RAB39YJ0YZEPX3DVFD")
    print(r["verified"], r["checkpoint"])
```

**TypeScript**

```ts
import { LangbotClient } from "@langbotai/sdk";

const lb = new LangbotClient();
const r = await lb.receipt("evt_01M6FZG8RAB39YJ0YZEPX3DVFD");
console.log(r.verified);
```

## Response

`200 OK`

```json
{
  "event": {
    "id": "evt_01M6FZG8RAB39YJ0YZEPX3DVFD",
    "type": "phrase_detected",
    "event_id": "ev_kxtrumpsaynickname_27jan01",
    "market_refs": ["KXTRUMPSAYCOMPANY-26DEC01-CVX"],
    "phrase": "chevron",
    "raw": "chevron",
    "speaker": null,
    "confidence": 0.36,
    "t_spoken": 1793685201618,
    "t_detected": 1793685201674,
    "t_emitted": 1793685201686,
    "lag_vs_public_ms": null,
    "source_kind": "hls",
    "seq": 30768,
    "hash": "476e87db4ea4bba0f011d6d1c20359b87d7483c33812916ebe54fc42421fcf9d",
    "prev_hash": "481d3e63b6965bec1f4374ff70441d35c3917525c73030705e53b2510a3d6270",
    "raw_hash": "b419f17ecd856aa4d35396f2cbe44b7fa682f7245858966cae1ba506d1fe231d",
    "chain_seq": 108793,
    "fact": null,
    "class": "fact",
    "verdict": {
      "role": null,
      "counts": null,
      "needed": 1,
      "reason": "speaker not verified: only Donald Trump counts",
      "mention": 0
    }
  },
  "chain": {
    "chain_seq": 108793,
    "prev_hash": "481d3e63b6965bec1f4374ff70441d35c3917525c73030705e53b2510a3d6270"
  },
  "checkpoint": {
    "id": "ckp_01M6FZH50W5X8KP8VWEH2XW6JZ",
    "event_id": "ev_kxtrumpsaynickname_27jan01",
    "chain_seq": 108803,
    "hash": "9e483244111d0ab7a2d38369f69982d22fbd7caf62b299a17d461d956179c918",
    "count": 108803,
    "created_at": 1793685230620,
    "key_id": "7c2794192d3cf5a0",
    "signature": "Cr05JAZl7JZ14xZ1bSQzcsugwjrrunPBM5rS2Ah8tGL66LJcGOcHYqNMqg0nbiv49SReExZ728I1eLUSeQFtAA=="
  },
  "rights": "restricted",
  "verified": true,
  "delay_ms": 60000
}
```

A real response from the API; long lists are cut to their first items.

`verified` is the feed recomputing the stored hash; verify it yourself offline with the SDKs ([Receipts and replay](https://langbot.ai/docs/receipts#verifying-offline)).

## Errors

| Status | `code` | When |
|---|---|---|
| 404 | `not_found` | Unknown id, or the event is still inside your plan's delay. |
| 401 | `token_invalid` | A token was sent and not recognised. Send a valid one, or none to call anonymously. |
| 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).
