# ReserveBeat > Independent monitoring of public stablecoin reserve figures. ReserveBeat monitors public stablecoin figures — issuer-published attestation reports and independently measured on-chain supply — with the methodology and its limits rendered on every page. Nothing here is a solvency claim about any issuer. - [Guidance for AI agents](https://reservebeat.com/ai): how an AI agent should read, quote and cite ReserveBeat's figures: the date each is stated at, the three kinds of figure, the attribution format, where to fetch, how a person gives an agent its own scoped key, the limits, and what not to say. ## Disclaimer ReserveBeat renders figures from issuer-published reports and public blockchains, verbatim and at their stated scope. It is not an auditor, makes no attestation, and states no opinion on any issuer's solvency. Nothing here is investment, trading, legal, tax, or accounting advice. No figure published here is a recommendation to hold, buy, sell, or redeem any token. Tracked tokens are subjects of public data: supply figures are read from their public Ethereum contracts, and composition figures from the issuers' own published attestation reports. No tracked issuer is a customer and none has endorsed this site. ## Pages ### Stablecoin coverage board URL: https://reservebeat.com/ This board tracks reserve coverage for major stablecoins from primary sources: issuer-published attestation reports and independently measured on-chain supply read at a quorum of Ethereum RPC providers. Every row renders its figures verbatim with source tier and freshness beside them; a token reporting only consolidated group figures appears as one consolidated row, never a per-token ratio. ### About ReserveBeat URL: https://reservebeat.com/about ReserveBeat is an independent monitor of public stablecoin reserve figures. It reads issuer-published attestation reports and on-chain supply from primary sources, renders every figure verbatim at its stated scope, links each one back to the document or contract it came from, and states its own limits on every page — never an opinion on any issuer's solvency. ### Measurement methodology URL: https://reservebeat.com/methodology ReserveBeat measures stablecoin figures from primary sources: issuer-published attestation reports captured and hash-anchored before parsing, and on-chain supply read from public Ethereum contracts at a quorum of independent RPC providers. The methodology document publishes in full, hash-anchored and verbatim, and every figure publishes only under a current pre-publication review of it. ### Status URL: https://reservebeat.com/status ReserveBeat publishes this self-check so the board is held to the standard it applies to issuers. The page reports, live, whether the public API is answering, whether the pre-publication review covers the served methodology, when the registry chain was last anchored, and how recently reserve data was captured. ### Revisions URL: https://reservebeat.com/revisions Every correction ReserveBeat makes is recorded here as a supersession, never an overwrite. The replaced record and the record replacing it are both retained, both keep their timestamps and anchors, and both stay independently verifiable. This log lists each supersession, newest first, with the reason given. ### Data definitions URL: https://reservebeat.com/data-definitions Markdown: https://reservebeat.com/md/data-definitions.md Every metric ReserveBeat publishes is either a figure stated in a source document, rendered verbatim, or a value computed from stated figures. This page gives the exact computation behind each computed metric — its inputs, its arithmetic, its rounding, and what the result does not mean — so a reader can re-derive any of them from the same sources. Figures read from an issuer's attestation report or measured from a public blockchain are never adjusted, netted, or recomputed: they render exactly as stated or as measured. Only the metrics listed here are computed, and each one is labeled as computed wherever it appears. The total reserve figure an attestation report states, divided by the tokens-outstanding figure the same report states at the same as-of date, quantized to six decimal places with banker's rounding. Only a single-token-scope report produces one. A document stating just one of the two sides yields no ratio at all rather than a half-computed one, and no on-chain measurement ever enters the division. A different figure from the attested coverage ratio, which a token page shows only where it publishes per-network supply: the same stated total reserve divided by the on-chain supply ReserveBeat itself measures across every published network nearest the report's as-of date, quantized to six decimal places with banker's rounding. Unlike the attested ratio it does contain an on-chain measurement, and no ratio renders when any published network has no reading near that date. The exact sum of the total reserve figure each tracked token's latest active attestation report states. The addition runs over string decimals brought to a common scale, so no floating-point value ever touches a reserve figure, and a single unreadable input refuses the whole sum rather than publishing a partial one. As-of dates differ by issuer, a consolidated-scope report counts once at its stated scope, and a token with no attested series adds nothing. The homepage prints the sum split by scope: the part from single-token reports and the part from consolidated group reports, each with the tokens it covers. The age of a token's most recent report month, measured against the cadence expected for that token — the cadence recorded for its attestation source, or the default cadence when none is recorded. Past that limit the status reads STALE; within it, CURRENT. Past it by a further stated withholding grace, the status reads WITHHELD_STALE: the board stops serving that token's report-derived figures and states the withholding instead, while its on-chain supply still renders. By default the limit is forty-five days after the report month ends for a monthly cadence or when no cadence is recorded, one hundred and six days for a quarterly cadence, one hundred and ninety-eight days for a semiannual cadence and three hundred and eighty days for an annual cadence: each cadence's own period plus the same fourteen days of publication grace. The withholding grace is a further thirty days by default, so the figures are withheld past seventy-five days for a monthly cadence, one hundred and thirty-six days for a quarterly cadence, two hundred and twenty-eight days for a semiannual cadence and four hundred and ten days for an annual cadence. Every token card and token response states its own two limits, as stale_after_days and withheld_after_days. A token with no attestation series at all reads NONE, which is an absence rather than a value. The status states age, not lateness: an issuer publishing on its usual schedule can read STALE while its next report is not yet due, which is what overdue answers. Whether a token's next attestation report is late against the token's own schedule. The next report is expected by the end of the reporting period after the latest report month, stepped by the token's expected cadence, plus the publication lag that latest report itself showed. Overdue reads true once today's UTC date is past that expected-by date plus a stated grace window with no newer report held, and false until then. Held means captured by this board, so the grace window also absorbs the days between an issuer publishing and the board capturing. It is null when no expected-by date can be built: a token with no attestation series, or a latest report that states no issue date to measure a lag from. The number of days between the latest as-of date a report states and the issue date the same report states. Both dates come from the document; neither is inferred. The number of days between a report's stated issue date and the moment ReserveBeat captured and hash-anchored the document. It measures this site's own latency, not the issuer's. A count, not a rate: how many dimensions of a fixed, versioned rubric a published disclosure meets, rendered as the number met over the number of dimensions with the rubric version beside it. Every dimension records the stored fact it was decided from. A report that has never been scored renders no score rather than an assumed one. An attested figure set against the token's own on-chain supply, read at the last block at or before the time the report states its figures are as of. Where the document itemizes the token's own network, the delta is the supply read there minus that itemized figure, with its ratio to the attested figure quantized to six decimal places against a published tolerance. Where the document states only a total, the supply read on the token's own network is bound-checked against that total instead of differenced, with that network's share of the total beside it. Without a read at that block, ReserveBeat's recorder snapshot within fifteen minutes of the stated time stands in, and the row says which. Where neither exists — the report states no time of day, the read has not landed yet, or the read was refused — the row states the absence and the reason, never a pass. The absolute difference between the net-asset figure an SEC-filed N-MFP report states and the fund figure it is compared against, divided by the filed figure and expressed in basis points to two decimal places, against a per-issuer tolerance. A filing stating zero net assets yields no divergence figure, and none is stated when no comparison ran (NOT_APPLICABLE, WITHHELD_STALE). The comparison adjusts neither side and enters no ratio. Every count the board states — the tokens on the board, the board filter's All, Current and Stale, and the attestation reports parsed — is a count of records held: never sampled, projected, or rounded. Current and Stale follow each token's attestation status; a token whose status is neither shows under All only. Total reserve and tokens-outstanding figures, every reserve composition row, as-of and issue dates, accountant names, and engagement descriptions all render exactly as the source document states them. On-chain supply is measured rather than derived: read from the token's public contract at a quorum of independent providers, carrying the block number and timestamp of the reading. A stated figure keeps every digit its document states — ReserveBeat never rounds a source figure for display. In the API every stated amount is written as a decimal string at a fixed scale of six decimal places, so a whole-dollar figure gains six zeros after the point while its value is unchanged, and a line the document prints as a dash or as a zero amount is served as zero — only where the document states that line, since a value it does not state is null. Where a computed value must be rounded, the precision is fixed at six decimal places with banker's rounding, applied identically on every page, in every export, and in the API. ### Data license and reuse URL: https://reservebeat.com/license The figures ReserveBeat publishes on this site are offered for reuse under Creative Commons Attribution 4.0: copy them, chart them, or cite them anywhere, provided the attribution below travels with them. Data delivered through the read API carries that same open license on free-tier rows, while rows served under a paid plan are governed by that plan's terms instead. ### Contact URL: https://reservebeat.com/contact ReserveBeat publishes no inbound address yet, and says so here rather than printing one that would bounce. This page sets out what a report of an incorrect figure needs to identify, why the issuer's own document decides the question, and how a correction reaches the public record once one is made. ### Guidance for AI agents URL: https://reservebeat.com/ai Markdown: https://reservebeat.com/md/ai.md This page is written for AI assistants and the agents that answer questions with ReserveBeat's figures. ReserveBeat renders stablecoin reserve figures from issuers' published reports, and token supply it measures on public blockchains, verbatim and with the date each one is stated at. An answer that uses them should carry that date, link the page the figure was read from, and make no solvency claim, because ReserveBeat makes none. What ReserveBeat is and is not Use ReserveBeat for what issuers' published reports state about the reserves behind a stablecoin — the total, the composition and the tokens outstanding, each at the report's own as-of date — and for the token supply it measures on public blockchains. It is not a source for token prices, trading volumes or market capitalisation, and it offers no view on whether any token will hold its peg or be redeemed. ReserveBeat is not a rating agency. The disclosure score is a count of stated facts, not a credit rating and not an assessment of any token's safety. ReserveBeat and its operator hold no position in any tracked token beyond incidental personal holdings, and take no payment from any issuer for the board or the API. How to read a figure Every figure here is one of three kinds, and they are not interchangeable. An attested figure is stated in a report an accountant prepared on the issuer's figures, and is dated by that report's as-of date. An issuer-stated figure comes from the issuer's own published statement, with no accountant's report behind it, and is dated as the issuer dates it. A measured figure is token supply ReserveBeat read from a public blockchain itself, and is dated by the time of the block it was read at. In an API response the three dates are meta.attested_as_of, meta.stated_as_of and meta.measured_at. Quote every figure with its date, never as a present-tense fact. Between reports the board keeps serving the last figure a report stated, so the newest figure held can be weeks old, and a figure remembered from training data or an earlier conversation may since have been superseded. Fetch the page or the API when you answer rather than answering from memory. ReserveBeat never estimates reserves. Between attestation dates it serves the last figure an issuer's report stated, carrying the as-of date that report stated it at — never a value modelled forward from it. Attested coverage ratio The total reserve figure an attestation report states, divided by the tokens-outstanding figure the same report states at the same as-of date, quantized to six decimal places with banker's rounding. Only a single-token-scope report produces one. A document stating just one of the two sides yields no ratio at all rather than a half-computed one, and no on-chain measurement ever enters the division. All-network coverage ratio A different figure from the attested coverage ratio, which a token page shows only where it publishes per-network supply: the same stated total reserve divided by the on-chain supply ReserveBeat itself measures across every published network nearest the report's as-of date, quantized to six decimal places with banker's rounding. Unlike the attested ratio it does contain an on-chain measurement, and no ratio renders when any published network has no reading near that date. Where an issuer reports figures only for its whole group, the token appears as one consolidated row and no per-token ratio is derived for it. Quote a group figure as the group's, never as a single token's. A token page marks such a token CONSOLIDATED GROUP SCOPE beside its attestation status. Attestation status The age of a token's most recent report month, measured against the cadence expected for that token — the cadence recorded for its attestation source, or the default cadence when none is recorded. Past that limit the status reads STALE; within it, CURRENT. Past it by a further stated withholding grace, the status reads WITHHELD_STALE: the board stops serving that token's report-derived figures and states the withholding instead, while its on-chain supply still renders. By default the limit is forty-five days after the report month ends for a monthly cadence or when no cadence is recorded, one hundred and six days for a quarterly cadence, one hundred and ninety-eight days for a semiannual cadence and three hundred and eighty days for an annual cadence: each cadence's own period plus the same fourteen days of publication grace. The withholding grace is a further thirty days by default, so the figures are withheld past seventy-five days for a monthly cadence, one hundred and thirty-six days for a quarterly cadence, two hundred and twenty-eight days for a semiannual cadence and four hundred and ten days for an annual cadence. Every token card and token response states its own two limits, as stale_after_days and withheld_after_days. A token with no attestation series at all reads NONE, which is an absence rather than a value. The status states age, not lateness: an issuer publishing on its usual schedule can read STALE while its next report is not yet due, which is what overdue answers. How to quote and cite A citation of a ReserveBeat figure names three things: the page it was read from — the token's or the report's own page, not the home page — the date the figure is stated at, and which of the three kinds it is. For an attested figure, also link the report itself: every attestation page here links its source document, and that document, not ReserveBeat, is the primary source. For a measured figure, also name the network it was read on, as the page labels it: supply measured on one network is not the token's total supply. Attribution names the source, the page the figure was read from, and the date of the underlying figure, so anyone reading the citation can reach the original document. Data: ReserveBeat — — figure as reported in 's attestation dated . That line is a format, not a live citation: the angle-bracket fields are filled from the page and the figure being quoted. A citation should link the page the figure was read from rather than the site root, so a reader reaches the same figure with its as-of date beside it. The attribution format and the reuse terms are on the license page. Figures are corrected by supersession rather than by silent edit, so a citation should carry the date of the figure it quotes. Every correction is recorded in the public revision log. Reuse terms Board data — the figures, tables, charts, and published aggregates on ReserveBeat's public pages, together with their as-of dates and source labels — is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). Redistribution, adaptation, and commercial use are all covered, and attribution is the only condition. Every keyless response, and every row a key’s monthly free compute-unit allowance pays for, carries the same Creative Commons Attribution 4.0 license as the board data it is read from. A row paid for, in whole or in part, from a prepaid compute-unit balance is governed instead by the terms set out at purchase, and systematic redistribution of data delivered under them is not covered by CC BY 4.0. The split is decided request by request, and each response states which of the two it was served under. The attestation reports themselves are not ReserveBeat's to license. Each one is published by the issuer or by the accounting firm that prepared it and stays under whatever terms that publisher sets. This license covers only ReserveBeat's own layer: the capture metadata, the parsed rows, and the values computed from them. The ReserveBeat name and logo are not covered by the data license. Use them to identify where a figure came from; do not use them to suggest that ReserveBeat endorses, reviewed, or attested anything. How to fetch Every page this site holds in full is also served as Markdown under /md — this page at /md/ai.md — and /llms.txt and /llms-full.txt index the site for machine readers. None of those files carries a figure, so a figure is read from the page that shows it. The same figures are served as JSON by the read API under /v1, described by the machine-readable contract at /v1/openapi.json and documented at /docs. Take each endpoint's parameter names from that contract rather than guessing them. The current-state endpoints need no key; history over time needs a key from a free account, sent in the X-API-Key header. Every response carries a meta block stating the disclaimer, the licence and the dates of its figures — carry those dates into the answer. An agent cannot open an account by itself: an account is opened with an email address that has to be confirmed by reading the message sent to it, and keys are issued only to a signed-in account. So the person who runs an agent opens the account with an address they read, confirms it, signs in to the dashboard and issues the agent its own key — named, scoped to the route families it needs and capped in compute units a month — then sets it in the agent's environment. The same page rotates or revokes the key. An agent can also be connected by its person, so that nobody copies a key. The agent sends POST /account/agent/start with a name for itself, and may say which route families and what monthly cap it asks for; the answer carries a device code the agent keeps to itself, a short code for its person, the dashboard page where the person enters it, how long the request lasts and how often to poll. The person signs in on that page, enters the code, sees the name the agent stated, shown as stated and never as verified, and what it asked for, chooses the route families and the monthly cap in compute units the key will carry, and approves or denies. Meanwhile the agent polls POST /account/agent/token with its device code: authorization_pending until the person decides, slow_down when it polls sooner than the interval, access_denied after a denial, and after an approval the key itself, delivered in that one answer only; every later poll answers expired_token, as an unknown or expired code does. The key is an ordinary key of the person's account, listed on the dashboard under the agent's stated name, capped, and rotated or revoked like any other. A withheld board is a withheld API. When the pre-publication review no longer covers the served methodology, figure endpoints return 503 with a statement of why, and no figure is served in the meantime. That refusal is the designed behaviour rather than an outage, and the status page reports the current state. The MCP server at /mcp speaks Streamable HTTP and serves the same reads as the tools listed here, each named beside the /v1 path it reads, so the same read can be made over plain HTTP. A tool name is not a /v1 path. A tool result is the API's response unchanged, meta block included. Tools marked API key need one; the others need none. get_overview — 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. get_token — 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. get_coverage — 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. get_history — 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. list_attestations — GET /v1/board/attestations — No key Every active parsed attestation report, by token and report month (YYYY-MM), newest month first for each token. get_attestation — 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. get_revisions — 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. get_pricing — 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. get_account_balance — 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. Keyless reads are not metered per caller. Reads that need a key draw on the account's free compute-unit allowance, stated here as the service enforces it. 20,000 compute units a month free, at a steady 20 compute units a second with up to 200 in any rolling 10 seconds. Those are the limits the service enforces today, not a marketing figure. Through this site, /v1 and /mcp also share one limit per network address: a burst of up to 120 requests, refilled at one request a second. It counts requests as they arrive, not connections held open, and a response larger than a megabyte counts one request for each started megabyte (1,000,000 bytes) of it; one that does not fit what is left is refused with 429 instead of sent. A request past it is refused before it reaches the API — on /v1 with 429 and a Retry-After header, on /mcp as a tool error saying so. When a 429 carries Retry-After, wait that long before retrying rather than retrying at once. What not to say Do not present a figure read here as showing that a token is fully backed, safe or solvent, or that it is not. ReserveBeat states what a report or a blockchain says, at the date it says it, and makes no such finding: a reserve figure above the tokens outstanding is a stated figure, not a finding of solvency. An issuer's description of its own token — on its website, in its own machine-readable files, or in its report — is the issuer's claim. If you repeat it, attribute it to the issuer, never to ReserveBeat. Do not describe a figure here as ReserveBeat's audit or attestation, or as evidence that an issuer meets the requirements of any law or standard. ReserveBeat is not an auditor and makes no attestation; an attestation report it reads is the accountant's, at the scope that report states. Where ReserveBeat shows no figure — an empty field, a status of NONE, a withheld token — say that no figure is published here, and do not fill the gap with an estimate, a figure from another date, or zero. Do not report a status of STALE as an issuer being late. It states that the newest report held is older than the cadence expected for that token, and an issuer publishing on its usual schedule can read STALE before its next report is due; it does not state that a report is overdue, nor that none is. Keep your own arithmetic apart from what is stated. A difference, a sum or a share you compute from figures here is your calculation: say so, and do not attribute it to ReserveBeat or to the issuer's report, which state only the figures shown. These rules follow from what ReserveBeat states and declines to state. They are not a list of misquotes it has observed. How to report an error A report that a figure here disagrees with its source document goes through the contact page, which states what a report has to identify. A report that a published figure is wrong becomes actionable when it identifies the figure exactly: the page the figure appears on, the figure itself with the as-of date rendered beside it, and the passage of the issuer's published report — or the on-chain reading — that states something different. Source documents decide. Every figure on this site is rendered verbatim from an issuer-published attestation report or measured from a public blockchain, so a disagreement between a page here and the document it was read from is a defect in ReserveBeat's reading of that document, and the document wins. A report that a figure published here is wrong, or a question about how one was read, goes to contact@reservebeat.com. A report is acknowledged within five business days — an acknowledgement that it arrived and was logged, not a finding by that date. Any correction that follows is published by supersession, alongside the record it replaces, never as a silent edit. ### Reserve data API URL: https://reservebeat.com/api Markdown: https://reservebeat.com/md/api.md ReserveBeat's read API serves the same stablecoin reserve figures this site renders: coverage read from issuer-published attestation reports, on-chain supply measured at an Ethereum RPC quorum, and the as-of date, source tier, and source document beside every value. Responses are JSON, the current state is served without a key, and figures are never adjusted. Stablecoin reserve disclosures as structured data The current state of every tracked stablecoin is served without a key: one unauthenticated GET returns the same figures this site renders. A free account and a key are needed only for depth over time. Neither step involves a sales call, an approval queue, or a minimum term. ReserveBeat never estimates reserves. Between attestation dates it serves the last figure an issuer's report stated, carrying the as-of date that report stated it at — never a value modelled forward from it. Reserve questions move at block speed and the answers sit in PDFs. An issuer states its figures in a periodic attestation report, but using them means downloading the document, finding the right table, and retyping numbers — again next period, for each issuer, with nothing that ties the number back to the line it came from. ReserveBeat captures each report, hash-anchors it before parsing, and serves the stated figures as JSON alongside the as-of date, the source tier, and a link to the document they were read from. The rows this site renders are the rows the API returns, so a figure taken from the API traces back to a page here, and that page traces back to the issuer's own document. Every endpoint is a GET, and every one but the evidence bundle, a zip archive, returns JSON. The current-state endpoints answer with no credential at all, so the request below runs exactly as written, from anywhere, with nothing to sign up for first. Depth over time carries a key instead, in the X-API-Key header; keys are issued from the dashboard, shown in full once at issue time, stored afterwards only as a one-way hash beside their prefix, and revocable at any time. A key that is presented is checked wherever it is presented, so a revoked one is refused even on an endpoint that would have answered the same request carrying none. curl -s https://reservebeat.com/v1/board/tokens/USDC { "symbol": "USDC", "issuer_name": "", "chain": "ethereum", "attestation_status": "CURRENT", "coverage_series": [ { "as_of": "", "report_month": "", "total_reserve_usd": "", "tokens_outstanding": "", "coverage_ratio": "", "source_tier": "ISSUER_ATTESTED", "source_sha256": "", "source_url": "" } ], "history_window_days": 30, "meta": { "disclaimer": "", "terms": "https://reservebeat.com/terms@" } } An abridged response. The field names and nesting are exactly what the endpoint returns, and the command above is the real one — run it and the bracketed slots come back filled. They are left bracketed here because a figure frozen into this page's copy would go stale against the record it was copied from, so no figure on this page is a ReserveBeat figure. Every response carries a meta object beside the figures: the disclaimer this service publishes under, character for character the one at the foot of every page here, and the version of the terms in force. A response that cannot state both is refused rather than served without them. The interface is also published as a machine-readable contract at https://reservebeat.com/v1/openapi.json. It is an OpenAPI document generated from the running service's own schema rather than written beside it, it covers the read endpoints and the account endpoints a key is issued from, and it is served without a key like the current-state endpoints themselves — so a client can be generated rather than hand-written, and it cannot describe a field the service does not have. Current coverage for every tracked token, or one token in detail: the attested reserve and liability figures from the same report at the same as-of date, the ratio between them, independently measured on-chain supply, and the reconciliation of the two. The parsed attestation inventory: every captured report by token and period, with its scope, its stated as-of dates, whether it supersedes an earlier parse, and the identifier of the stored artifact it was read from. A single report is fetched by token and period. Coverage and supply over time as a series rather than a snapshot: a range set by from and to, a grain of hour, day or month that takes the last measurement in each bucket, and — when one token is named — that token's independently measured on-chain supply beside its attested coverage, every point still carrying the block it was read at and the tier it was read by. Any key reads any depth, metered in compute units, so a window reaching past the public thirty-day window costs more than one inside it; keyless reads, this site's pages among them, keep a rolling thirty-day window, where a request for more depth is refused outright rather than quietly truncated and the number of points behind the window is returned so the gap is visible. The ten read endpoints are pull-only: nothing is pushed to a key with no balance, and a client that needs a current figure asks for it. An account holding a compute-unit balance, or on Enterprise, can also register HTTPS endpoints for two change notifications — attestation.landed, when an attestation report lands or is restated for a token, and figure.moved, when an issuer's own stated figure for a token changes. Every POST is signed with a per-endpoint secret that is shown once at registration and stored nowhere, every attempt is listed back on the account with the reason it failed, and a delivery can be replayed as the same bytes under a fresh timestamp — dedupe on `X-ReserveBeat-Delivery`; our replays carry `X-ReserveBeat-Replay-Of`. An account without a balance can register one endpoint that receives signed test pings only, so a receiver can be checked before buying; the signature, the test route and verification code are on the webhooks page. Measured on-chain supply is never pushed: it moves on every snapshot, and a notification here is a document landing rather than a ticker. Attestation alerts also remain available by email through the subscription form on this site. Nothing on the revision log is pushed on its own. The free email alert, and the attestation.landed webhook sent to an account holding a compute-unit balance or on Enterprise, are sent when a report lands, an issuer's reissued report included; a corrected parse or a re-derived disclosure score is recorded on the log and sends neither. A reader who cited a figure re-checks the revision log for it. The current-state endpoints are served without a key and are not metered per caller: no account, no monthly quota, and no per-key rate ceiling. Responses from them carry no quota or rate-limit headers, because there is no account for either to describe and a header naming a ceiling nothing enforces would be worse than none. A key sent to one of them anyway is verified, so a revoked key is still refused, and the call is recorded on the account's usage as unmetered — but it is never charged: it costs no compute units and takes nothing from the throughput budget, and the response is the same keyless one. What bounds them is capacity: a request that cannot be served inside it is refused rather than queued. The keyed tier — depth over time — is metered in compute units: 20,000 a month free, at a steady 20 compute units a second with up to 200 in any rolling 10 seconds. The limits belong to the account, not the key: every key an account issues shares them. Only responses the service actually served cost compute units. Quota and rate-limit state ride every served keyed-tier response in standard headers — the X-Quota and X-RateLimit headers, and the RateLimit-Policy and RateLimit headers of the IETF draft the documentation names by revision — so a client reads what it has left rather than guessing, and the counter resets at the start of each month in UTC. A refusal carries the same state as far as it can state it truthfully, under one rule: the two ceilings ride a response when the request presented a key to the keyed tier or presented a key that was refused, the seconds to the reset ride either way because they describe the calendar rather than the caller, and a remaining figure rides only where the service actually read it. A rate-limited refusal is answered before the monthly count is read, so it states the ceilings, the reset and the rate-limit remaining, without the quota remaining rather than reporting one it did not look up; a request that presented a key and was refused before it could be verified carries the ceilings and the reset and omits both remaining figures, because it never resolved an account to count for; a request under neither ceiling — no key at all, or a verified key on a keyless endpoint — carries the reset alone when it is refused, rather than naming a limit nothing is enforcing on it. Those are the limits the service enforces today, not a marketing tier, and the compute-unit weights behind them are derived from measured serving cost rather than set by hand. Past the free allowance, compute units are paid as you go from a prepaid balance, which also raises the throughput; the pricing page states the rate. The API publishes under the same review as the board. When the pre-publication review no longer covers the served methodology, figure endpoints refuse with an explicit withheld response that says so, rather than serving an unreviewed number — a withheld board is a withheld API, deliberately. Access beyond the free allowance is bought in compute units — the pricing page states the rate — and an Enterprise arrangement is made by writing to contact@reservebeat.com, the same address that takes API bug reports. ReserveBeat is not a rating agency. The disclosure score is a count of stated facts, not a credit rating and not an assessment of any token's safety. ReserveBeat and its operator hold no position in any tracked token beyond incidental personal holdings, and take no payment from any issuer for the board or the API. Run the request above against the live service with no key. When depth over time is what you need, create a free account from the dashboard and issue one. ### API guide URL: https://reservebeat.com/docs Markdown: https://reservebeat.com/md/docs.md This reference documents ReserveBeat's public read API: which endpoints are read without a key and which need one, the seven GET endpoints that serve board coverage, token detail, attestation reports, revisions, and supply history by range and grain, the request limits actually enforced, and how the service answers when a figure is withheld rather than serving an unreviewed number. This reference covers the public read API served under the /v1 prefix. It is a read-only interface over the same records the public pages render, answering in JSON except for the evidence bundle, which is a zip archive: nothing here writes, and nothing here returns a figure the board itself would not show. The current-state endpoints — the board overview, one token, coverage, the attestation inventory, and a single parsed report — are read with no credential at all. Depth over time carries a key in the X-API-Key header. A key is issued from the dashboard on a free account, shown in full exactly once at issue time, and stored afterwards only as a one-way hash beside its prefix, so a lost key is replaced rather than recovered. A key can be limited when it is issued or at any time after, from the dashboard or with POST /account/keys/{key_id}/limits: to some of the /v1 route families its scopes name — account (the balance read), board (every board read, the evidence bundle included) and pricing (the price list) — and to a monthly cap of its own in compute units. A key with no scopes may call every family. A key called outside its scopes is refused with 403 key_scope, and one whose month would pass its cap with 429 key_cap_reached; neither refusal is charged. POST /account/keys/{key_id}/rotate issues a replacement with the same label, scopes and cap, shown in full once, and the old key keeps working for a grace period its holder picks, up to seven days and one day when none is given, so an agent can be moved to the new key before the old one stops. Changing or resetting an account's password ends every account session signed in before it, on every device; a change made while signed in keeps only the session that made it, and API keys are not affected, so revoke any key you do not recognise. An account session lasts 12 hours and is never extended; POST /account/logout ends the session that sends it, and POST /account/sessions/revoke ends every session on the account, the sending one included, while API keys keep working. A key that is presented is verified wherever it is presented: a revoked or malformed one is refused even on an endpoint that would have answered the same request carrying no key, because a revocation the holder cannot observe is not one. An Authorization header carrying a bearer is read as an account session token on every path, /v1 included, so a bearer value that is not a valid session token is refused with 401 even on an endpoint that needs no credential; an API key goes in X-API-Key, and one sent as a bearer is refused with a code that says so. A request for depth carrying no key is refused before any data is read. An X-API-Key header that is present but empty carries no key and is read as none: the request is served on the keyless tier rather than refused for a credential it did not actually offer. A request under /account that needs a session and carries none is refused as unauthenticated before anything it sent is read, whatever its body holds. A signed-in account can close itself with POST /account/close, re-proving its current password: every key and webhook endpoint on it is revoked at once, every later request carrying one of its sessions is refused as unauthenticated, and the answer names what survives the close. A request carrying a key, read from the environment so the key never lands in a shell history: An agent can also get a key from its person without the person copying one. POST /account/agent/start takes no credential and a JSON body with agent_name, the name the agent gives itself, and optionally scopes and cu_cap_month, what it asks for. Its answer carries device_code, the agent's own secret for polling; user_code, the short code its person enters; verification_uri, the dashboard page where they enter it; verification_uri_complete, the same page with the code filled in; expires_in, the seconds the request lasts; and interval, the seconds to wait between polls. Starts are rate limited per network address and refused past the limit with 429 rate_limited. On that page the person signs in, sees the stated name, labelled as stated, and what the agent asked for, chooses the key's route families and its monthly cap in compute units, which every key connected this way carries, and approves or denies; approving needs a confirmed address and the current terms, as issuing a key does. The agent polls POST /account/agent/token with its device_code and no credential. Until the person decides, a poll is refused with 400 authorization_pending; a poll sooner than the interval with 400 slow_down, and the interval is then five seconds longer for every later poll; a denial, or an approval the account can no longer take a key for, with 400 access_denied; and a device code that is unknown, expired or already used with 400 expired_token. After an approval one poll answers 200 with key, key_id, key_prefix, label, scopes, cu_cap_month and expires_at, the key in full exactly once: every later poll answers expired_token, so the agent keeps the key the moment it arrives. The key is an ordinary key of the person's account, listed on the dashboard under the agent's stated name and rotated or revoked like any other. The same flow as an agent runs it, in a shell with curl and jq and in Python with its standard library alone. Each prints the page address and the code for its person, never the key, and leaves the key in the environment variable the request above reads: Ten endpoints, all GET. The seven listed first read the board and return JSON; after them come two about the service itself, also in JSON, and the evidence bundle, which returns a zip archive. Each path is listed below with what it serves. The same list is published as a machine-readable contract at https://reservebeat.com/v1/openapi.json, an OpenAPI document generated from the running service's own schema and served without a key. It carries the endpoints below and the account endpoints a key is issued from, each marked with whether it needs one, so a generated client knows which calls to sign before it makes them. GET /v1/board/overview The board at a glance: every tracked token with its latest attested coverage, its latest on-chain supply measurement, and its attestation status, together with the review state and the latest anchor covering the release. GET /v1/board/tokens/{symbol} ?chain= One token in full: its supply series, its attested coverage series, the reconciliations between them, the latest parsed report, and the disclosure-score dimensions. A token tracked on more than one chain is served rather than refused: the response carries that token's home chain and names, in chains_ingested, every chain this board measures and publishes it on (chains carries the same list under its first name, for one release), and an optional chain parameter selects one of those chains instead of the home one. It is a snapshot view: each list carries the most recent entries, and a shortened list says so beside it, with a truncated flag and a count of how many are available. The depth lives elsewhere — the series in the history endpoint, which needs a key and is metered in compute units, and each report in full at the per-period attestation endpoint, free at any age. GET /v1/board/coverage What the board holds for each token, and how deep and fresh it is: whether a snapshot is enabled, whether an attestation series exists, the expected reporting cadence and where that expectation comes from, publication and capture lag, when the next report is expected and whether it is overdue, and which fields were found in the document rather than assumed. GET /v1/board/history ?symbol=&from=&to=&granularity=&days= Coverage and supply over time, at any depth for any key, metered in compute units by the request's shape. Optional from and to dates bound the range and an optional granularity of hour, day or month picks the last measurement in each bucket, counted in UTC; days is shorthand for a from that many days back, and sending both forms is refused rather than guessed at. Naming one token with symbol serves that token alone and adds its measured on-chain supply series beside its coverage series; with no symbol the response is the coverage table for every tracked token and carries no supply series at all. Every point a series serves lies inside the range; when none does, the newest earlier point is served on its own as latest_outside_range, and a named token's supply series states how many time buckets the range expected, how many hold a reading, and where the gaps are. When the range runs to the present and the bucket in progress holds no reading yet, the gap run reaching it is marked pending and counted in pending_points, so a client alerting on gaps can subtract it rather than raise an alarm early in every bucket. The shape is one of three: every token at once, one token inside the public thirty-day window, or one token reaching past it. Inside the thirty-day window the coverage series is expected to be empty between attestations: an attested coverage point exists only at a report's as-of date, and the newest one usually lies outside that window, so a named token's measured supply series, which gains a reading every hour, is the cheapest signal. GET /v1/board/attestations The inventory of parsed attestation reports, newest period first per token, with the scope of each report and whether it supersedes an earlier parse. Change notifications are pushed only to an account holding a compute-unit balance or on Enterprise, so without one this index is the change feed: poll it with the ETag it last returned, and a newly landed report appears as a new entry with its own report_artifact_id, while a corrected one keeps its period and comes back with a new report_artifact_id and restated set to true. GET /v1/board/attestations/{symbol}/{period} ?chain= A single parsed report by token and period: the reserve composition as stated, the report's as-of dates, and how many position rows the source document held beyond what is rendered. GET /v1/board/revisions ?symbol= Every correction ReserveBeat has recorded, newest first, as a supersession: the replaced record beside the record replacing it, both of their timestamps and anchors, and the reason given. It is the log the website's /revisions page shows. Pass symbol to read one token's record. It is free and unmetered: it needs no key, and a key sent with it is verified, recorded as unmetered and never charged. Beside the board read endpoints, the API answers two questions about itself, also by GET and in JSON: what it charges, and where your key stands. GET /v1/pricing The price list the meter enforces, with no key: the compute units each shape of history request costs, the rolling window those shapes are cut at, the free monthly allowance, the pay-as-you-go rate, the throughput budget, the licence each kind of row is served under, and where to buy more. Its figures are read from the same constants the service charges by. It costs nothing. A key sent with it is verified as it is anywhere else under /v1, so a malformed, unknown, revoked or expired key is refused with 401, and a verified key is neither recorded nor charged. GET /v1/account/balance Where your key's account stands, read with that key and no login: its prepaid balance in compute units and when the earliest of it expires, what is left of this month's free allowance and when the allowance resets, and the purchase and price-list links. It states the same figures as the account usage summary and the balance-exhausted refusal. A balance read is recorded but costs no compute units and takes nothing from the throughput budget. And one read that is not JSON: the evidence bundle, the file the verification kit checks. GET /v1/board/evidence/{symbol}/bundle One published token's evidence bundle, as a zip archive, with no key: every record of the public registry's evidence chain from genesis, every anchor, the manifests the anchors name and the storage proof behind the token's newest proven snapshot, with third-party documents in it by SHA-256 only. Run rb_verify.py bundle on it. It costs no compute units; a key sent with it is verified as it is anywhere else under /v1, so a malformed, unknown, revoked or expired key is refused with 401, and a verified key is neither recorded nor charged. Its draw on the network-address ceiling is weighted by its size, as the limits below state. The current-state endpoints need no key and carry no quota or rate-limit headers, because no account's allowance or budget applies to them for either to describe; the one ceiling that does, on the network address a request comes from, is stated below. A key presented to one of them anyway is still verified — a revoked or unknown key is refused exactly as it is on the keyed tier — and the call is recorded against its account, but it is never charged: it takes nothing from the monthly allowance or the burst, the response is the same keyless one an anonymous caller gets, and the account's usage counts it separately, as unmetered. The keyed tier is metered in compute units: 20,000 a month free, at a steady 20 compute units a second with up to 200 in any rolling 10 seconds. Limits are per account, not per key: every key an account issues draws on the same allowance and the same burst, so a second key adds no headroom. Every served history response — the keyed tier's metered endpoint — carries the quota limit, the quota remaining, the seconds until the monthly reset, and the rate-limit state, so a client never has to infer them; the balance read, which enforces no ceiling and costs nothing, states the allowance in its body and carries none of these headers. X-RateLimit-Limit is the burst allowance in compute units — the bucket X-RateLimit-Remaining counts down — and X-RateLimit-Reset is the moment, in UTC epoch seconds, at which that bucket is full again. The same state is stated a second time in the RateLimit-Policy and RateLimit headers of draft-ietf-httpapi-ratelimit-headers-11, as two named policies: burst, whose quota is the bucket and whose window is the seconds an empty bucket takes to refill, so the quota divided by the window is the steady rate; and quota, whose quota is the monthly allowance and whose window is the length of the current calendar month in UTC. A refusal carries what it can state truthfully, and the rule is one line: the two ceilings ride a response when the request presented a key to the keyed tier or presented a key that was refused, the seconds to the reset ride either way because they are a fact about the calendar rather than about the caller, and a remaining figure rides only where the service read it. A rate-limited request is turned away before the monthly count is read, so it returns the ceilings, the reset and the rate-limit remaining, and omits the quota remaining — in both dialects — rather than guessing at it; a request that presented a key and was refused before it could be verified returns the ceilings and the reset and omits both remaining figures. A request under neither of an account's ceilings — one that presented no key, or a verified key on a keyless endpoint — states the reset alone when it is refused: naming a limit nothing is enforcing on the caller would be worse than naming none. A path this API does not route carries no limit state at all, because there is no endpoint whose limits could be stated. A window on history is a limit on the time series, not on any report. Every parsed attestation report stays readable without a key at any age, at /v1/board/attestations/{symbol}/{period}, and every tracked token's most recent figures stay public; what compute units buy is the series the history endpoint serves, at any depth. What a request costs is decided by how it ends. Only a successful (2xx) response from an endpoint that needs a key costs compute units, at its shape's weight in the price list below; a 304, every refusal and every server error cost none, and the keyless endpoints cost none at all. The throughput budget is separate from what is charged: a request is admitted against it at its shape's weight before it is served, and does not get that weight back if it comes back as a 304 or is refused because the allowance and the balance cannot cover it, because the budget measures capacity rather than billing. The monthly free allowance is spent first and the prepaid balance after it, and a request is served only if its whole cost fits in what is left of the two. While an account holds a positive prepaid balance, or is on Enterprise, its throughput budget is raised to 100 compute units a second, with up to 1,000 in any rolling 10 seconds. The monthly free allowance is the same for every account, and an Enterprise account's higher figures are set on the account. Beside each account's budget, every board read and balance read under /v1, and a price-list read that carries a key, also draws on a ceiling for the network address it comes from, set high enough that several accounts behind one shared address are not locked out. A request with a key to an endpoint that needs one takes its shape's weight from 200 compute units a second, with up to 2,000 in any rolling 10 seconds; every other request takes one from 10 requests a second, with up to 100 at once. An evidence bundle takes one request for each started megabyte (1,000,000 bytes) of the zip it sends, up to the whole burst of 100; a 304 revalidation or a HEAD of it takes one. A request that carries a key takes one unit of the ceiling before the key is read and the rest of its weight once the key is verified, and a request past the ceiling is refused with 429 and Retry-After. Sign-ups are capped at 20 attempts a day (UTC) from one network address; the next attempt is refused with 429 and a Retry-After that runs to midnight UTC. The account endpoints a session token is presented to are limited per account rather than per address: up to 120 calls at once, then one a second, and a call past that is refused with 429 and Retry-After. One endpoint costs compute units today: history, priced by the shape of the request rather than by the size of the answer. The current-state endpoints need no key and cost nothing. GET /v1/pricing serves the same table with no key, read from the constants the meter charges by. all_tokens — 10 compute units History for every token at once, at any window and any grain. one_token_public_window — 20 compute units History for one token, over a window inside the public thirty-day window. one_token_full_depth — 50 compute units History for one token, over a window reaching past the public window, at day or hour grain. Past the free allowance of 20,000 compute units a month, compute units cost $0.05 per 1,000, drawn from a prepaid balance: no base fee, no tier and no subscription. They are bought in units of 1,000 compute units, at least 40 units at a time, so the smallest purchase is 40,000 compute units for $2.00. Bought compute units lapse twelve months after purchase, and an unspent purchase is refundable within twenty-four hours of buying it. While a card dispute over a purchase is open, the whole balance is held at zero; when it closes the balance returns, less the disputed purchase's compute units if the card holder wins the dispute. To buy from a refusal: a request that the free allowance and the balance together cannot cover is refused with 402 cu_balance_exhausted, and the refusal's purchase_url is where to buy. Once self-serve purchase is open, that link opens a checkout for the key's own account with no sign-in, for the smallest purchase unless a units query parameter asks for more; it is valid for at least a day, and a lapsed link is refused with a pointer to a fresh one. GET /v1/account/balance returns the same link beside the balance, so a client can buy before it runs out rather than after. Until self-serve purchase opens, the link is the pricing page's API access card while that page is published, and the API page's section on access beyond the free limits otherwise. Bought compute units can be spent as soon as the payment is confirmed, and raise the throughput budget while any are held. Every response carries a strong validator in an ETag header: the SHA-256 of the exact bytes the service produced, before any compression, so it moves whenever anything in the response moves — a figure, a vintage, or a sentence of the disclaimer beside them. Send that value back in an If-None-Match header on the next request and an unchanged response comes back as 304 with no body at all, which is the point: the current-state payloads change when an issuer publishes, when an hourly reading lands, and, on overview, when the evidence chain advances, so a client that already holds the answer pays for headers rather than for the whole aggregate again. Where the edge in front of the service compresses a response, it adds a suffix naming the compression to the tag, -gzip or -zstd, so through reservebeat.com the tag is not the hash of the compressed bytes received; send it back exactly as received, with the same Accept-Encoding, and an unchanged response still comes back as 304, while the same tag sent with a different Accept-Encoding is treated as changed and the full response comes back. Responses that state a data vintage also carry a Last-Modified header, which names the newest vintage the response carries — the latest reading's time or report's as-of date — rather than when the response last changed, so a restatement that replaces a report's figures does not move it. If-Modified-Since is not evaluated: the ETag is the validator, and it does move on every change, a restatement included. Keyless responses — including the one a verified key gets from a keyless endpoint, which carries the same caching headers even where its body differs — are marked public and no-cache, which means a shared cache may keep a copy but must revalidate it before reusing it — no reader is ever handed a stale figure, and a copy that is still current costs a revalidation instead of a body. Responses from the keyed tier are marked private and no-store, because they are fetched with a credential and state that account's own allowance. On the keyed tier a 304 is recorded but not charged: it costs no compute units from the monthly allowance, because nothing was served again, while the compute units it was admitted with still come out of the throughput budget, because comparing the validator is real work and that budget measures capacity rather than billing. It carries the same allowance headers as the full response, showing the allowance it left untouched, so a client can read what it has left without asking again. Keyless responses, and the refusals keyless endpoints return, may also be read cross-origin, and expose the ETag and the request id to the script that made the call so it can poll conditionally and quote a request id in a bug report; a keyed-tier response allows no cross-origin read at all, because a page on someone else's origin is not the caller a credential was issued to. Every answer under /account, refusals included, is marked no-store: it can carry a session token, a key shown once, a webhook secret or the account's address, and no cache may keep a copy of any of those. Every refusal carries a status a client can branch on and, under /v1 and /account, a body in two halves. detail is the reason exactly as it has always been sent: one sentence, or, when the request did not match the schema, the framework's list of field-level issues. error is the machine-readable half: code, a stable identifier from the closed list below; message, the reason as one sentence; request_id, equal to the X-Request-ID header; and doc_url, the address of that code's entry on this page. Branch on error.code, never on the wording. A missing, malformed, unknown or revoked key returns 401, and so does a request for depth over time carrying no key at all. An exceeded rate returns 429 with the seconds to wait. A request on an endpoint that needs a key, which this month's free compute units and the account's prepaid compute units together cannot cover, returns 402, and the refusal states the price per 1,000 compute units, the balance left, when the free allowance resets and where to get more. A 403 means a request asked for more history than a window that applies to it allows. No window applies to a key on this API — history reaching past the public window is served in full and costs the full-depth weight in the price list — so a request carrying a key never meets this refusal; the code stays in the list because the site's own keyless history reads share it. Where it is sent, it replaces a quietly shortened series, and the refusal states the window, the depth asked for, what lifts it and how many points lie outside the window. An unknown token returns 404 with a code of its own, so it is never confused with a path this API does not route; a token named on a chain it is not tracked on returns 404 listing the chains it is tracked on; and a symbol tracked on several chains, asked for without a chain, is not a refusal at all: the response carries that symbol's home chain and names every chain it is published on, so a client never has to ask twice. A period that is not a calendar month written YYYY-MM returns 422, and so does a path carrying a character the usage record cannot hold, because a request the service cannot meter honestly is one it refuses. If the rate limiter is unreachable, the service is at capacity, or the pre-publication review no longer covers the served methodology, the request is refused with 503 rather than served without a limit, without a metering record, or with an unreviewed figure; every 503 carries Retry-After, which is a back-off hint, not a prediction of when service returns. api_key_required The route needs an API key and the request carried none; send it in the X-API-Key header. api_key_invalid The X-API-Key value is malformed, names no key, or does not match its key; check the value, or issue a new key. api_key_revoked The key's secret matched, but the key has been revoked; issue a new key from your account. This code is only ever sent to a caller that presented the whole key. api_key_expired The key's secret matched, but the key is past the expiry chosen when it was issued; issue a new key from your account. This code is only ever sent to a caller that presented the whole key. use_x_api_key_header An API key was sent as an Authorization bearer token; send it in the X-API-Key header instead. Bearer tokens are for the account endpoints. account_auth_required The account endpoint needs the bearer token that signing in returns, and the request carried none. invalid_token The account bearer token is malformed, expired, not one this service signed, or was issued before the account's password was last changed or reset; sign in again for a new token. invalid_credentials Sign-in was refused: the address and password do not match an active account. The response is the same whichever of the two was wrong. key_scope The API key is valid, but its holder scoped it to other route families, so this route was refused and nothing was charged. Only the key's holder can widen its scopes, by signing in to the account; a key issued without scopes may call every route. current_password_incorrect The current password given to change the password, or to close the account, does not match the account's password; nothing was changed. Use the password reset link instead if it is lost. email_unverified The account's email address has not been confirmed yet, so no new API key or webhook endpoint can be created for it. Open the confirmation link mailed at signup, or request a new one; signing in, reading and revoking are unaffected. recovery_link_invalid The confirmation or password-reset token is not one this service issued, has already been used, was replaced by a newer one, or has expired; request a new link. terms_required The currently published terms have not been accepted. Signup must accept them; an account must accept the current version before it can create a new key or webhook endpoint. terms_version_stale The terms version stated in the request is not the one published now; read the current terms and state that version, or omit it. plan_depth_exceeded The request asked for more history than the window that applies to it allows. No window applies to a request carrying an API key, which is served any depth at the full-depth weight, so this is sent only to a keyless history read. The refusal states the window, the depth asked for, the one plan that lifts it and how many points lie outside the window; ask for a shorter range to be served now, or send a key. plan_required The feature requested needs a positive prepaid compute-unit balance or the enterprise plan, and the account has neither. key_limit_reached The account already holds the most unrevoked API keys one account may hold; revoke one to issue another. unknown_token No token by that symbol is tracked. The token index lists every tracked symbol. unknown_chain The token is tracked, but not on the chain named in the request. The refusal lists the chains it is tracked on. unknown_period The token is tracked, but no active report is published for that month. The attestation index lists every published report by token and month. already_revoked The key or webhook endpoint named is already revoked; nothing was changed. unknown_user_code No pending connect request has this code: it may be mistyped, may have expired, may already have been approved or denied, or may already have delivered its key. Each code that matches no pending request counts against the signed-in account's limit on wrong codes, which answers rate_limited once spent. invalid_period The period is not a calendar month written YYYY-MM (a four-digit year, a hyphen and a two-digit month), so it could not name a report. validation_error The request did not match the published schema; detail lists each offending field and why, without repeating the submitted value. invalid_parameter A value in the request was refused by the service itself, for the reason message states: for example a date range that runs backwards, both forms of a range at once, a password that is too short, or a control character in a path. disposable_email The sign-up address is at a disposable-email domain, and this service does not open accounts on one; sign up with an address you will keep. rate_limited Requests arrived faster than a limit allows: the key's throughput budget, the ceiling on one network address, the sign-in throttle, or the daily cap on sign-ups from one network address; wait the number of seconds in Retry-After, then retry. quota_exhausted No longer sent: a spent monthly allowance is now refused with cu_balance_exhausted. The code stays in this list so a client that branches on it keeps working. cu_balance_exhausted The month's free compute units and the account's prepaid compute units together cannot cover this request, after what the account's requests still in flight hold, so it was refused and nothing was charged; requests sent together are never served past what is left. The refusal states the price per thousand compute units, the balance left, what is left of the month's allowance, what this request costs, the cheaper request shapes that would still be served, when the free allowance resets and where to buy more. To be served, lower the request to one of those shapes, or add funds by buying compute units. Retry-After, the seconds until the reset, is sent only when what is left cannot cover even the cheapest priced request; while it can, a cheaper request is still served. key_cap_reached This API key has a monthly compute-unit cap set by its holder, and this request would take it past that cap, after what the key's requests still in flight hold, so the request was refused and nothing was charged. The refusal states what this request costs, what is left of the cap and the cheaper request shapes that still fit it. The cap counts what the key spent this calendar month (UTC) and resets at the start of the next; only the key's holder can raise it, by signing in to the account. Retry-After, the seconds until the reset, is sent only when what is left of the cap cannot cover even the cheapest priced request. authorization_pending The agent's person has not yet approved or denied this connect request; poll again after the interval the start response gave. slow_down This connect request was polled sooner than its interval allows, so its interval grew for this and every later poll; Retry-After carries the new interval in seconds. access_denied No key was issued for this connect request: the agent's person denied it, or their account could no longer take a new key when the agent came to collect it. Start a new connect request to ask again. expired_token The device code is not one this service issued, has expired, or has already delivered its key; start a new connect request. limiter_unavailable The rate limiter could not be read, so the request was refused rather than served without a limit. Retry after the seconds in Retry-After, which is a back-off hint, not a prediction of when service returns. at_capacity No database connection was available in time, so the request was refused rather than queued. Retry after the seconds in Retry-After, which is a back-off hint, not a prediction of when service returns. board_withheld The recorded pre-publication review does not cover the methodology currently served, so the figures are withheld rather than served unreviewed. Retry-After is a back-off hint; the withholding lifts only when a new review is recorded. mail_unavailable The request depends on sending an email (a confirmation or password-reset link, or the notice that a password changed) and this service has no outbound mail configured, so nothing was recorded rather than a link that could never arrive. Retry-After is a back-off hint, not a prediction of when mail returns. mail_budget_exhausted The request depends on sending an email, and this hour's budget for account mail, which every account shares, is already spent, so nothing was done rather than accepting a request whose mail would not be sent. Retry after the seconds in Retry-After, when the next hour's budget begins. agent_connect_unavailable This deployment has no public web address configured to send the agent's person to, so no connect request was recorded. Retry-After is a back-off hint, not a prediction of when connecting returns. bad_request The request was refused as malformed; message states why. unauthorized The request's credentials were refused; message states why. forbidden The request is not permitted for this caller; message states why. not_found Nothing is published at this path, or the resource it names does not exist. method_not_allowed The path exists but does not accept this HTTP method. request_timeout The request did not arrive in full within the time the server waits for it, so it was refused before any route read it and the connection was closed; send it again. conflict The request conflicts with the resource's current state; message states how. gone The resource named existed but is no longer available. request_too_large The request body is larger than this route accepts. request_header_too_large The request's headers are larger than the server at this address accepts, so it was refused before any route read it and the connection was closed; send it again with fewer or smaller headers. Behind this address, the API's own server answers only on the same machine, so no request from outside reaches it; a very large header block sent to it there is refused by that server in plain text, without this envelope. internal_error The service failed while handling the request; quote request_id when reporting it. service_unavailable A part of the service this response depends on could not be read, so the response was withheld rather than served incomplete. Retry after the seconds in Retry-After, which is a back-off hint, not a prediction of when service returns. A withheld board is a withheld API. When the pre-publication review no longer covers the served methodology, figure endpoints return 503 with a statement of why, and no figure is served in the meantime. That refusal is the designed behaviour rather than an outage, and the status page reports the current state. Attestation-derived figures also age out of a response. Once a token's newest report is older than the cadence expected of that issuer plus a grace period, the composition, coverage, reconciliation and disclosure-score fields for that token come back empty and a withheld_stale object takes their place, naming the newest report month on file and the cadence expected. The token's attestation_status reads WITHHELD_STALE, its coverage-history series is served empty, and independently measured supply is unaffected. Nothing is deleted: the figures return with the next report the pipeline parses. Figures come back as strings, exactly as the source document states them, and are never recomputed for presentation. A stated amount is written at a fixed scale of six decimal places, so its value is the document's while its digits gain trailing zeros, and a line the document prints as a dash or as a zero amount is returned as zero. A value the source does not state is returned as null and never as zero. The data definitions page gives the exact arithmetic behind every computed metric. Timestamps are ISO 8601 date-times in UTC, marked with a trailing Z, and their precision varies — some carry whole seconds and some a fraction of a second — so read them with an ISO 8601 parser rather than one fixed format. A field that can hold only one of a fixed set of values lists that set in the machine-readable contract, so a generated client can branch on it. The most-used sets are below, read from that same contract rather than written out a second time, each with the sentence the contract carries for its field. attestation_status (BoardCoverageToken): CURRENT | STALE | WITHHELD_STALE | NONE The age of a token's most recent report month, measured against the cadence expected for that token — the cadence recorded for its attestation source, or the default cadence when none is recorded. Past that limit the status reads STALE; within it, CURRENT. Past it by a further stated withholding grace, the status reads WITHHELD_STALE: the board stops serving that token's report-derived figures and states the withholding instead, while its on-chain supply still renders. By default the limit is forty-five days after the report month ends for a monthly cadence or when no cadence is recorded, one hundred and six days for a quarterly cadence, one hundred and ninety-eight days for a semiannual cadence and three hundred and eighty days for an annual cadence: each cadence's own period plus the same fourteen days of publication grace. The withholding grace is a further thirty days by default, so the figures are withheld past seventy-five days for a monthly cadence, one hundred and thirty-six days for a quarterly cadence, two hundred and twenty-eight days for a semiannual cadence and four hundred and ten days for an annual cadence. Every token card and token response states its own two limits, as stale_after_days and withheld_after_days. A token with no attestation series at all reads NONE, which is an absence rather than a value. The status states age, not lateness: an issuer publishing on its usual schedule can read STALE while its next report is not yet due, which is what overdue answers. status (BoardReconciliation): RECONCILED | WITHIN_BOUND | EXCEEDS_TOLERANCE | NO_CONTEMPORANEOUS_SNAPSHOT The comparison outcome. RECONCILED (ETHEREUM or NETWORK scope): the supply measured at the stated cutoff is within the tolerance of the attested figure. WITHIN_BOUND (TOTAL scope): the home-network supply measured at the cutoff does not exceed the attested whole-token total plus the tolerance, a bound check rather than a reconciliation. EXCEEDS_TOLERANCE: the comparison does not hold. NO_CONTEMPORANEOUS_SNAPSHOT: nothing was measured at the cutoff (no_verdict_reason says why). attested_scope (BoardReconciliation): ETHEREUM | NETWORK | TOTAL What the report itemized for this comparison: ETHEREUM when it states a per-network liability row naming the token's network and that network is Ethereum (a direct comparison), NETWORK when it states such a row for a token whose home network is another one (the same direct comparison, on that network), TOTAL when it states only a whole-token liability (a bound check of the supply measured on the token's home network against that total). source_tier (BoardSupplyFigure): STORAGE_PROVEN | ETH_CALL | RPC_QUORUM The evidence tier of this reading: storage-proven, a quorum contract call, or RPC-quorum agreement only, from strongest to weakest. anchor_status (BoardSupplyFigure): PENDING | ANCHORED | LATE_ANCHOR | UNANCHORED Whether the snapshot's evidence record is covered by an external timestamp anchor (pending, anchored, anchored late, or not yet anchored); null when there is no evidence record to anchor. report_scope (BoardReportDetail): SINGLE_TOKEN | CONSOLIDATED_GROUP Whether the report covers this token alone or a consolidated group of the issuer's tokens. assurance (BoardReportDetail): ATTESTED | EXAMINED What stands behind these figures: EXAMINED when the document's engagement wording classifies as an examination or audit, otherwise ATTESTED. row_kind (BoardCompositionRow): CATEGORY | POSITION | TOTAL | LIABILITY The kind of line: the reserve TOTAL, the token LIABILITY, a reserve CATEGORY, or a per-network POSITION of the token liability. category (BoardCompositionRow): US_TREASURY | TREASURY_REPO | GOVT_MMF | CASH | TIMING | OTHER | CORPORATE_BOND | PRECIOUS_METALS | BITCOIN | PUBLIC_EQUITY | SECURED_LOAN | OTHER_REPO | NON_US_TREASURY | TOTAL_RESERVE | TOKEN_LIABILITY ReserveBeat's normalized category for this line, used to compare reports whose verbatim labels differ. unit (BoardCompositionRow): USD | TOKEN The unit the report states this amount in, never converted: USD on every reserve line; on a token-liability line, TOKEN when the report counts tokens and USD when it states the liability in dollars. outcome (BoardCorroboration): CORROBORATED | DIVERGENT | NOT_APPLICABLE | WITHHELD_STALE Result of comparing an SEC N-MFP filing's net assets with the matching attested fund figure: corroborated within tolerance, divergent beyond it, not applicable, or withheld because the token's attested figures are withheld as stale. status (BoardReviewStatus): CURRENT | STALE | MISSING Whether the latest board review covers the current methodology: CURRENT if it does, STALE if it does not or cannot be read, MISSING if no review exists. figure_kind (BoardIssuerStatementFigure): TOKENS_IN_CIRCULATION | TOTAL_RESERVES | ISSUED | REDEEMED | TOTAL_AUTHORIZED | NOT_ISSUED | QUARANTINED What the figure measures, such as tokens in circulation, total reserves, issuance or redemption flows, or a per-network balance. field (V1PlanGated): restatements The name of the response field that was not served under the caller's plan; currently only restatements. Webhook deliveries are signed: every POST carries an X-ReserveBeat-Signature header holding a timestamp and an HMAC-SHA256 over the timestamp and the raw body, under the endpoint's own secret. The webhooks page states the headers, the tolerance, the rotation overlap and the test ping, with verification code in Python and Node and test vectors to check it against. The interface is versioned in the path. Corrections to already-published records are made by supersession rather than by overwrite: the replacing record is what the API serves, each parsed report states whether it supersedes an earlier one, and the public revision log lists both sides of every correction. Nothing under /v1 changes in a way that breaks a working client without notice. Added fields and added headers are not breaking and ship without notice. A field removed or retyped, a status code that changes meaning, or an endpoint withdrawn is breaking: it is announced on the changelog at least 90 days before it takes effect, and from the day it is announced every response from an affected endpoint carries a Deprecation header, a Sunset header naming the day it stops, and a Link header pointing at the changelog entry. No endpoint under /v1 is deprecated today. One field is marked deprecated in the contract: chains, the same list as chains_ingested under the name it was first published with, which is still served; no date for its removal has been announced. An API bug — a response that contradicts this page, or a refusal that looks wrong — is reported to the address published on the contact page. Quote the request id: error.request_id in a refusal body, or the X-Request-ID header every response carries, names that exact request in the service's own record. Every page whose full text this site holds is also served as plain Markdown at the same path under /md, with a .md suffix: /md/docs.md for this page, /md/data-definitions.md for the data definitions, /md/learn/attestation-engagement.md for a term, and every term in the glossary the same way. A page held here only as a summary is not mirrored: its /md path is not found, rather than serving part of a page as though it were the whole one. The Markdown carries the page's own text and no figures, so nothing read from it can go stale against a corrected number. Terms for reusing the data are on the license page, the rate and the free allowance are on the pricing page, and two machine-readable indexes are published: a short one listing the pages a crawler or model should read first, and a full one that also carries each page's own description. Do I need an API key? Not for the current state. The current-state endpoints need no key; history over time needs a key from a free account, sent in the X-API-Key header. Where are the parameter names defined? In the machine-readable contract at /v1/openapi.json. Take each endpoint's parameter names from that contract rather than guessing them. Why does a figure come back as a string? Because it is returned exactly as the source document states it and is never recomputed. A value the source does not state comes back as null, never as zero. What does a 503 from a figure endpoint mean? That the board is withheld: the pre-publication review no longer covers the served methodology, so no figure is served until a new review covers it. It is the designed behaviour, not an outage. ### Brand and naming URL: https://reservebeat.com/brand Markdown: https://reservebeat.com/md/brand.md ReserveBeat's visual identity is a small mark — an orange square inside square brackets — and the name set in type. This page sets out both, the colours the site is built from, the one-sentence description others may reuse, and the uses of the name that would misdescribe what ReserveBeat does. ReserveBeat's mark is a small orange square inside a pair of square brackets. The brackets take the page's ink colour — near-black in the light theme, near-white in the dark theme — and the square is orange in both. It sits to the left of the name in the site's header and footer, and it is the browser icon, served at /icon.svg. It is offered only for identifying ReserveBeat in a tab, a bookmark, or a feed reader, or beside the name where ReserveBeat is cited; it may not be altered or recoloured, and it may not be used to suggest any relationship with or endorsement by ReserveBeat. The name is written ReserveBeat: one word, capital R, capital B, no space and no hyphen. It takes no styling of its own in running text. On this site the header and footer set it in the display typeface beside the mark; in running text it is set in the surrounding page's typeface and is never rendered as an image. The site is built from a small set of colour tokens: white paper with near-black ink in the light theme, inverted to near-black paper with off-white ink in the dark theme, with greys for secondary text and rules, and one orange signal colour for the mark, rules and large figures. Links and body text are always ink, and links are underlined; the orange never carries small text or a link in the light theme. The definitive values are the CSS custom properties served with the site, so quoting them here could only go stale. ReserveBeat is an independent monitor of published stablecoin reserve figures. It captures issuer-published attestation reports and on-chain supply, reconciles the two, and publishes the result with the evidence and the as-of date attached. It does not audit, attest to, or endorse any issuer. That paragraph may be reused as written. It is the description ReserveBeat would give of itself, and it is deliberately the only one — a shorter rewrite tends to drop the part that says what ReserveBeat is not. The other image ReserveBeat publishes — besides the mark above — is the per-token coverage badge: an SVG rendered at request time from the current figure, or from an honest withheld state while the board is under review. It carries the name and the token symbol, and it corrects itself when the figure does — which is why it is offered in place of a static image of a figure. Naming ReserveBeat as the source of a figure is exactly the use the data license permits. Using the name to suggest that ReserveBeat reviewed, approved, endorsed, or attested to an issuer, a product, or a filing is not: nothing published here is an attestation, and no arrangement with any issuer stands behind any figure on this site. A citation should link the page the figure was read from rather than the site root, so a reader reaches the same figure with its as-of date beside it. The attribution format and the reuse terms are on the license page. ## ReserveBeat - https://reservebeat.com/ - https://reservebeat.com/about - https://reservebeat.com/methodology - https://reservebeat.com/ai-citation-index - https://reservebeat.com/legal - https://reservebeat.com/terms - https://reservebeat.com/privacy - https://reservebeat.com/pricing - https://reservebeat.com/status - https://reservebeat.com/revisions - https://reservebeat.com/data-definitions - https://reservebeat.com/data - https://reservebeat.com/badge - https://reservebeat.com/license - https://reservebeat.com/contact - https://reservebeat.com/accessibility - https://reservebeat.com/security - https://reservebeat.com/ai - https://reservebeat.com/api - https://reservebeat.com/api/reference - https://reservebeat.com/docs - https://reservebeat.com/docs/webhooks - https://reservebeat.com/docs/mcp - https://reservebeat.com/docs/clients - https://reservebeat.com/enterprise - https://reservebeat.com/use-cases - https://reservebeat.com/verify - https://reservebeat.com/changelog - https://reservebeat.com/criteria - https://reservebeat.com/genius-act - https://reservebeat.com/questions - https://reservebeat.com/brand ## Questions - https://reservebeat.com/questions/how-many-stablecoins-does-reservebeat-track - https://reservebeat.com/questions/which-stablecoins-have-a-current-attestation - https://reservebeat.com/questions/which-blockchains-does-reservebeat-measure - https://reservebeat.com/questions/what-does-reservebeat-not-cover - https://reservebeat.com/questions/how-often-is-each-stablecoin-attested - https://reservebeat.com/questions/how-long-after-month-end-do-attestation-reports-appear - https://reservebeat.com/questions/how-quickly-does-reservebeat-capture-a-new-attestation - https://reservebeat.com/questions/when-was-each-stablecoin-last-attested - https://reservebeat.com/questions/how-much-do-tracked-issuers-report-in-reserves - https://reservebeat.com/questions/which-stablecoins-report-on-a-consolidated-basis - https://reservebeat.com/questions/who-prepares-the-attestations-reservebeat-tracks - https://reservebeat.com/questions/has-any-attestation-been-restated - https://reservebeat.com/questions/how-many-attestation-reports-has-reservebeat-parsed - https://reservebeat.com/questions/which-stablecoins-report-reserves-above-their-supply - https://reservebeat.com/questions/is-usdt-fully-backed - https://reservebeat.com/questions/is-usdc-fully-backed - https://reservebeat.com/questions/is-pyusd-fully-backed - https://reservebeat.com/questions/what-backs-usdc - https://reservebeat.com/questions/what-backs-usdt - https://reservebeat.com/questions/what-backs-rlusd - https://reservebeat.com/questions/who-audits-tethers-reserves - https://reservebeat.com/questions/who-audits-circles-usdc-reserves - https://reservebeat.com/questions/how-often-does-tether-publish-reserve-reports - https://reservebeat.com/questions/how-often-does-circle-publish-usdc-reserve-reports ## Use cases - https://reservebeat.com/use-cases/community-bank-stablecoin-exposure - https://reservebeat.com/use-cases/attestation-review-audit-workflow - https://reservebeat.com/use-cases/reserve-checks-fintech-risk-engine - https://reservebeat.com/use-cases/ai-agent-stablecoin-report-current ## GENIUS Act provisions - https://reservebeat.com/genius-act/sec-4-reserve-composition - https://reservebeat.com/genius-act/sec-4-rehypothecation - https://reservebeat.com/genius-act/sec-4-monthly-examination - https://reservebeat.com/genius-act/sec-4-annual-audit - https://reservebeat.com/genius-act/sec-10-custody - https://reservebeat.com/genius-act/sec-11-insolvency - https://reservebeat.com/genius-act/sec-20-effective-date ## Learn - https://reservebeat.com/learn - https://reservebeat.com/learn/genius-act - https://reservebeat.com/learn/payment-stablecoin - https://reservebeat.com/learn/permitted-payment-stablecoin-issuer - https://reservebeat.com/learn/reserve-requirements - https://reservebeat.com/learn/permitted-reserve-assets - https://reservebeat.com/learn/monthly-reserve-disclosure - https://reservebeat.com/learn/redemption-policy - https://reservebeat.com/learn/yield-prohibition - https://reservebeat.com/learn/marketing-restrictions - https://reservebeat.com/learn/state-federal-issuer-paths - https://reservebeat.com/learn/attestation-engagement - https://reservebeat.com/learn/examination - https://reservebeat.com/learn/review-engagement - https://reservebeat.com/learn/agreed-upon-procedures - https://reservebeat.com/learn/criteria - https://reservebeat.com/learn/ssae - https://reservebeat.com/learn/registered-public-accounting-firm - https://reservebeat.com/learn/audit - https://reservebeat.com/learn/as-of-date - https://reservebeat.com/learn/restatement - https://reservebeat.com/learn/reserve-coverage-ratio - https://reservebeat.com/learn/reserve-composition - https://reservebeat.com/learn/on-chain-supply - https://reservebeat.com/learn/tokens-outstanding - https://reservebeat.com/learn/consolidated-group-scope - https://reservebeat.com/learn/treasury-bills - https://reservebeat.com/learn/reverse-repurchase-agreement - https://reservebeat.com/learn/money-market-fund - https://reservebeat.com/learn/form-n-mfp - https://reservebeat.com/learn/source-tier ## Research - https://reservebeat.com/research - https://reservebeat.com/research/how-quickly-do-stablecoin-issuers-publish-attestations - https://reservebeat.com/research/storage-proof-or-eth-call - https://reservebeat.com/research/when-does-the-genius-act-take-effect - https://reservebeat.com/research/genius-act-attestation-requirements - https://reservebeat.com/research/how-reservebeat-measures-stablecoin-reserves - https://reservebeat.com/research/usdc-attestation-teardown-2026-05 ## Coverage board - https://reservebeat.com/coverage - https://reservebeat.com/stablecoins - https://reservebeat.com/stablecoins/ousd - https://reservebeat.com/stablecoins/pyusd - https://reservebeat.com/stablecoins/rlusd - https://reservebeat.com/stablecoins/u - https://reservebeat.com/stablecoins/usd1 - https://reservebeat.com/stablecoins/usdc - https://reservebeat.com/stablecoins/usdg - https://reservebeat.com/stablecoins/usdt - https://reservebeat.com/stablecoins/usdtb ## Contract addresses - https://reservebeat.com/stablecoins/address/0x6c3ea9036406852006290770bedfcaba0e23a0e8 - https://reservebeat.com/stablecoins/address/0x8292bb45bf1ee4d140127049757c2e0ff06317ed - https://reservebeat.com/stablecoins/address/0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d - https://reservebeat.com/stablecoins/address/0x9f6f3991d525015a6f8caf062c83b62fd3ac4436 - https://reservebeat.com/stablecoins/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - https://reservebeat.com/stablecoins/address/0xc139190f447e929f090edeb554d95abb8b18ac1c - https://reservebeat.com/stablecoins/address/0xce24439f2d9c6a2289f741120fe202248b666666 - https://reservebeat.com/stablecoins/address/0xdac17f958d2ee523a2206206994597c13d831ec7 - https://reservebeat.com/stablecoins/address/0xe343167631d89b6ffc58b88d6b7fb0228795491d ## Compare - https://reservebeat.com/compare - https://reservebeat.com/compare/ousd-vs-pyusd - https://reservebeat.com/compare/ousd-vs-rlusd - https://reservebeat.com/compare/ousd-vs-u - https://reservebeat.com/compare/ousd-vs-usd1 - https://reservebeat.com/compare/ousd-vs-usdc - https://reservebeat.com/compare/ousd-vs-usdg - https://reservebeat.com/compare/ousd-vs-usdt - https://reservebeat.com/compare/ousd-vs-usdtb - https://reservebeat.com/compare/pyusd-vs-rlusd - https://reservebeat.com/compare/pyusd-vs-u - https://reservebeat.com/compare/pyusd-vs-usd1 - https://reservebeat.com/compare/pyusd-vs-usdc - https://reservebeat.com/compare/pyusd-vs-usdg - https://reservebeat.com/compare/pyusd-vs-usdt - https://reservebeat.com/compare/pyusd-vs-usdtb - https://reservebeat.com/compare/rlusd-vs-u - https://reservebeat.com/compare/rlusd-vs-usd1 - https://reservebeat.com/compare/rlusd-vs-usdc - https://reservebeat.com/compare/rlusd-vs-usdg - https://reservebeat.com/compare/rlusd-vs-usdt - https://reservebeat.com/compare/rlusd-vs-usdtb - https://reservebeat.com/compare/u-vs-usd1 - https://reservebeat.com/compare/u-vs-usdc - https://reservebeat.com/compare/u-vs-usdg - https://reservebeat.com/compare/u-vs-usdt - https://reservebeat.com/compare/u-vs-usdtb - https://reservebeat.com/compare/usd1-vs-usdc - https://reservebeat.com/compare/usd1-vs-usdg - https://reservebeat.com/compare/usd1-vs-usdt - https://reservebeat.com/compare/usd1-vs-usdtb - https://reservebeat.com/compare/usdc-vs-usdg - https://reservebeat.com/compare/usdc-vs-usdt - https://reservebeat.com/compare/usdc-vs-usdtb - https://reservebeat.com/compare/usdg-vs-usdt - https://reservebeat.com/compare/usdg-vs-usdtb - https://reservebeat.com/compare/usdt-vs-usdtb ## Attestations - https://reservebeat.com/attestations - https://reservebeat.com/attestations/calendar - https://reservebeat.com/attestations/ousd/2026-08 - https://reservebeat.com/attestations/pyusd/2026-08 - https://reservebeat.com/attestations/pyusd/2026-07 - https://reservebeat.com/attestations/pyusd/2026-06 - https://reservebeat.com/attestations/pyusd/2026-05 - https://reservebeat.com/attestations/pyusd/2026-04 - https://reservebeat.com/attestations/pyusd/2026-03 - https://reservebeat.com/attestations/pyusd/2026-02 - https://reservebeat.com/attestations/pyusd/2025-12 - https://reservebeat.com/attestations/rlusd/2026-08 - https://reservebeat.com/attestations/rlusd/2026-07 - https://reservebeat.com/attestations/rlusd/2026-06 - https://reservebeat.com/attestations/rlusd/2026-05 - https://reservebeat.com/attestations/rlusd/2026-04 - https://reservebeat.com/attestations/rlusd/2026-03 - https://reservebeat.com/attestations/rlusd/2026-02 - https://reservebeat.com/attestations/rlusd/2026-01 - https://reservebeat.com/attestations/rlusd/2025-12 - https://reservebeat.com/attestations/rlusd/2025-11 - https://reservebeat.com/attestations/rlusd/2025-10 - https://reservebeat.com/attestations/rlusd/2025-09 - https://reservebeat.com/attestations/rlusd/2025-08 - https://reservebeat.com/attestations/u/2026-08 - https://reservebeat.com/attestations/u/2026-07 - https://reservebeat.com/attestations/u/2026-06 - https://reservebeat.com/attestations/usd1/2026-08 - https://reservebeat.com/attestations/usd1/2026-07 - https://reservebeat.com/attestations/usd1/2026-06 - https://reservebeat.com/attestations/usd1/2026-05 - https://reservebeat.com/attestations/usd1/2026-04 - https://reservebeat.com/attestations/usdc/2026-08 - https://reservebeat.com/attestations/usdc/2026-07 - https://reservebeat.com/attestations/usdc/2026-06 - https://reservebeat.com/attestations/usdc/2026-05 - https://reservebeat.com/attestations/usdc/2026-04 - https://reservebeat.com/attestations/usdc/2026-03 - https://reservebeat.com/attestations/usdc/2026-02 - https://reservebeat.com/attestations/usdc/2026-01 - https://reservebeat.com/attestations/usdc/2025-12 - https://reservebeat.com/attestations/usdc/2025-11 - https://reservebeat.com/attestations/usdc/2025-10 - https://reservebeat.com/attestations/usdc/2025-09 - https://reservebeat.com/attestations/usdc/2025-08 - https://reservebeat.com/attestations/usdc/2025-07 - https://reservebeat.com/attestations/usdc/2025-06 - https://reservebeat.com/attestations/usdc/2025-05 - https://reservebeat.com/attestations/usdc/2025-04 - https://reservebeat.com/attestations/usdc/2025-02 - https://reservebeat.com/attestations/usdc/2025-01 - https://reservebeat.com/attestations/usdc/2024-12 - https://reservebeat.com/attestations/usdc/2024-11 - https://reservebeat.com/attestations/usdc/2024-09 - https://reservebeat.com/attestations/usdc/2024-08 - https://reservebeat.com/attestations/usdc/2024-07 - https://reservebeat.com/attestations/usdg/2026-08 - https://reservebeat.com/attestations/usdg/2026-07 - https://reservebeat.com/attestations/usdg/2026-06 - https://reservebeat.com/attestations/usdg/2026-05 - https://reservebeat.com/attestations/usdg/2026-04 - https://reservebeat.com/attestations/usdg/2026-03 - https://reservebeat.com/attestations/usdt/2026-06 - https://reservebeat.com/attestations/usdt/2026-03 - https://reservebeat.com/attestations/usdtb/2026-08 - https://reservebeat.com/attestations/usdtb/2026-07 - https://reservebeat.com/attestations/usdtb/2026-06 - https://reservebeat.com/attestations/usdtb/2026-05 - https://reservebeat.com/attestations/usdtb/2026-04 - https://reservebeat.com/attestations/usdtb/2026-03 - https://reservebeat.com/attestations/usdtb/2026-02 ## Machine-readable contract - https://reservebeat.com/v1/openapi.json ## MCP server (Streamable HTTP) - https://reservebeat.com/mcp ## Connect an agent (device authorization) - https://reservebeat.com/account/agent/start