Docs
API clients
ReserveBeat ships no SDK. The read API publishes an OpenAPI contract, so any OpenAPI generator builds a typed client from it, and every read route has a copy-paste example below in curl, Python and TypeScript. The routes serving current figures need no key; only the history route does.
Reviewed
On this page
Contract
https://reservebeat.com/v1/openapi.jsonThe contract is one OpenAPI 3.1 document, served by the API itself. It names every read route, its parameters and every field of its response.
Generate a client
Build a client from the contract with any OpenAPI generator. Each command below builds one from the URL above.
openapi-typescript
npx openapi-typescript@7.13.0 https://reservebeat.com/v1/openapi.json -o reservebeat.d.tsTypeScript types for every route and response, for use with fetch or openapi-fetch.
openapi-python-client
uvx openapi-python-client@0.29.1 generate --url https://reservebeat.com/v1/openapi.jsonA Python package with sync and async functions per route and typed response models.
openapi-generator
npx @openapitools/openapi-generator-cli@2.41.0 generate \
-i https://reservebeat.com/v1/openapi.json -g typescript-fetch -o reservebeat-clientClients in many languages; change -g to pick one. Runs on Java.
Examples per route
Or call a route directly. Each example stops with an error on any answer outside 2xx, so a refusal is never read as data.
GET /v1/board/overview (No key)
One summary card per tracked stablecoin, plus the head of ReserveBeat's public evidence hash chain and its latest external timestamp anchor.
curl
curl -sS --fail-with-body "https://reservebeat.com/v1/board/overview"Python (httpx)
import httpx
res = httpx.get("https://reservebeat.com/v1/board/overview", timeout=30)
res.raise_for_status()
print(res.json())TypeScript (fetch)
const res = await fetch("https://reservebeat.com/v1/board/overview");
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body: unknown = await res.json();
console.log(body);GET /v1/board/tokens/{symbol} (No key)
Everything the board holds for one token, by ticker symbol (for example USDC): measured on-chain supply per network, the latest attestation report's stated figures, attested coverage points, reconciliations and report cadence.
curl
curl -sS --fail-with-body "https://reservebeat.com/v1/board/tokens/USDC"Python (httpx)
import httpx
res = httpx.get("https://reservebeat.com/v1/board/tokens/USDC", timeout=30)
res.raise_for_status()
print(res.json())TypeScript (fetch)
const res = await fetch("https://reservebeat.com/v1/board/tokens/USDC");
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body: unknown = await res.json();
console.log(body);GET /v1/board/coverage (No key)
What the board covers and what it does not: one row per tracked token stating what is held, how deep and how fresh, plus the tokens and networks not covered.
curl
curl -sS --fail-with-body "https://reservebeat.com/v1/board/coverage"Python (httpx)
import httpx
res = httpx.get("https://reservebeat.com/v1/board/coverage", timeout=30)
res.raise_for_status()
print(res.json())TypeScript (fetch)
const res = await fetch("https://reservebeat.com/v1/board/coverage");
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body: unknown = await res.json();
console.log(body);GET /v1/board/history (API key)
Coverage and supply history over a range of dates or a number of days, bucketed by hour, day or month, for every token or one. Needs an API key; the API meters each call.
curl
curl -sS --fail-with-body \
-H "X-API-Key: $RESERVEBEAT_API_KEY" \
"https://reservebeat.com/v1/board/history?days=7&symbol=USDC"Python (httpx)
import os
import httpx
res = httpx.get(
"https://reservebeat.com/v1/board/history?days=7&symbol=USDC",
headers={"X-API-Key": os.environ["RESERVEBEAT_API_KEY"]},
timeout=30,
)
res.raise_for_status()
print(res.json())TypeScript (fetch)
const res = await fetch("https://reservebeat.com/v1/board/history?days=7&symbol=USDC", {
headers: { "X-API-Key": process.env.RESERVEBEAT_API_KEY ?? "" },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body: unknown = await res.json();
console.log(body);GET /v1/board/attestations (No key)
Every active parsed attestation report, by token and report month (YYYY-MM), newest month first for each token.
curl
curl -sS --fail-with-body "https://reservebeat.com/v1/board/attestations"Python (httpx)
import httpx
res = httpx.get("https://reservebeat.com/v1/board/attestations", timeout=30)
res.raise_for_status()
print(res.json())TypeScript (fetch)
const res = await fetch("https://reservebeat.com/v1/board/attestations");
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body: unknown = await res.json();
console.log(body);GET /v1/board/attestations/{symbol}/{period} (No key)
One attestation report by token and report month (YYYY-MM): its stated figures and composition, the accountant and engagement standard as the document states them, and changes from the prior report.
curl
curl -sS --fail-with-body "https://reservebeat.com/v1/board/attestations/USDC/2026-01"Python (httpx)
import httpx
res = httpx.get("https://reservebeat.com/v1/board/attestations/USDC/2026-01", timeout=30)
res.raise_for_status()
print(res.json())TypeScript (fetch)
const res = await fetch("https://reservebeat.com/v1/board/attestations/USDC/2026-01");
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body: unknown = await res.json();
console.log(body);GET /v1/board/revisions (No key)
Every correction ReserveBeat has recorded, newest first: each replaced attestation parse or disclosure score beside the record that replaced it, with both timestamps and anchors and the reason given. Optionally for one token, by ticker symbol (for example USDC). Needs no key and costs nothing.
curl
curl -sS --fail-with-body "https://reservebeat.com/v1/board/revisions"Python (httpx)
import httpx
res = httpx.get("https://reservebeat.com/v1/board/revisions", timeout=30)
res.raise_for_status()
print(res.json())TypeScript (fetch)
const res = await fetch("https://reservebeat.com/v1/board/revisions");
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body: unknown = await res.json();
console.log(body);GET /v1/pricing (No key)
ReserveBeat's machine-readable API price list: the compute-unit cost of each metered endpoint shape, the free monthly allowance, the pay-as-you-go rate, the throughput budgets and how to buy more. Needs no API key.
curl
curl -sS --fail-with-body "https://reservebeat.com/v1/pricing"Python (httpx)
import httpx
res = httpx.get("https://reservebeat.com/v1/pricing", timeout=30)
res.raise_for_status()
print(res.json())TypeScript (fetch)
const res = await fetch("https://reservebeat.com/v1/pricing");
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body: unknown = await res.json();
console.log(body);GET /v1/account/balance (API key)
The calling API key's own account: its prepaid compute-unit balance and when it lapses, the free monthly allowance left and when it resets, and where to buy more. Needs an API key.
curl
curl -sS --fail-with-body \
-H "X-API-Key: $RESERVEBEAT_API_KEY" \
"https://reservebeat.com/v1/account/balance"Python (httpx)
import os
import httpx
res = httpx.get(
"https://reservebeat.com/v1/account/balance",
headers={"X-API-Key": os.environ["RESERVEBEAT_API_KEY"]},
timeout=30,
)
res.raise_for_status()
print(res.json())TypeScript (fetch)
const res = await fetch("https://reservebeat.com/v1/account/balance", {
headers: { "X-API-Key": process.env.RESERVEBEAT_API_KEY ?? "" },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body: unknown = await res.json();
console.log(body);Keys
The history route needs an API key. The examples read it from the RESERVEBEAT_API_KEY environment variable and send it in the X-API-Key header. The API meters each keyed call; the API docs say what a metered call costs.