API reference · Receipts
Get the signing key
GET/v1/receipts/key
The Ed25519 public key that signs checkpoints, attestations and reports. Also at `/.well-known/langbot-receipts.json`.
On this page
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).
Request
curl "https://api.langbot.ai/v1/receipts/key"from langbot import LangbotClient
async with LangbotClient() as lb:
key = await lb.receipts_key()
print(key["key_id"], key["public_key"])import { LangbotClient } from "@langbotai/sdk";
const lb = new LangbotClient();
const key = await lb.receiptsKey();
console.log(key.key_id);Response
200 OK
{
"key_id": "7c2794192d3cf5a0",
"algorithm": "ed25519",
"public_key": "aiq2s7AF1azPcXK8COaosb94lxXwnp19EiENhQkeEc4=",
"hash": "sha256",
"canonical": "json-sorted-compact-ascii",
"v": 1,
"previous": []
}A real response from the API; long lists are cut to their first items.
After a rotation, previous lists the earlier keys; old checkpoints keep the key_id they were signed with.
Errors
| Status | code | When |
|---|---|---|
| 401 | token_invalid | A token was sent and not recognised. Send a valid one, or none to call anonymously. |
| 429 | rate_limited | Over your request budget; wait Retry-After seconds. |
Every error body is {"detail": …, "code": "…"}; branch on code. All codes: Errors.