Bitcoin Treasury Company Data Feed
CEBE Tracker publishes one free JSON endpoint with the latest verified balance sheet and CEBE computation for every company on the tracker: BTC holdings, debt, preferred stock, cash, share counts, Senior Claims %, CEBE in satoshis per share, and CEBE mNAV. No API key. CORS is enabled for any origin. Free to use with attribution to cebetracker.io, under the Terms of Use.
Endpoint
GET https://cebetracker.io/api/v1/companies.json
Try it:
curl -s https://cebetracker.io/api/v1/companies.json
# CEBE per share and Senior Claims % for every company
curl -s https://cebetracker.io/api/v1/companies.json \
| jq '.companies[] | {ticker, cebe_sats, senior_claims_pct, cebe_mnav}'
Methods: GET, HEAD, OPTIONS. The response is JSON with Access-Control-Allow-Origin: *, so browser apps can call it directly.
The two price bases
The feed serves the same construction on two explicit bases, and every price is dated.
Snapshot basis (filing-anchored)
Balance sheet figures come from each company's latest verified snapshot, sourced from primary filings (see the per-company source field). btc_price is the BTC/USD price on as_of, and senior_claims_pct, cebe_sats, and cebe_mnav are computed at that price. A dated price is not stale data; it is the price at which the filing-anchored figures were anchored.
Live basis
btc_price_live is the current BTC/USD price (CoinGecko, timestamped by btc_price_live_as_of). The senior_claims_pct_live, cebe_sats_live, and cebe_mnav_live fields recompute the identical formula at that price, so fiat claims re-convert and the whole lens moves together. Live-basis fields are null when no live BTC price is available.
The formula
Senior claims and CEBE are computed the same way on either basis. btc_price_basis is btc_price on the snapshot basis and btc_price_live on the live basis.
claims = max(0, (debt_usd + preferred_usd - cash_usd - strc_holdings_usd)
/ btc_price_basis
+ btc_claim_static) / btc_holdings # capped to [0, 1]
cebe_sats = btc_holdings * (1 - claims) / basic_shares # in satoshis
cebe_mnav = market_cap_usd / (btc_holdings * (1 - claims) * btc_price_basis)
senior_claims_pct is claims expressed as a percent, 0 to 100. The full measurement rules live on the methodology page.
Net Senior Claims carries three fiat terms, Debt plus Preferred less Cash, with strc_holdings_usd netting senior securities the issuer holds against itself. preferred_usd is carried at accrued liquidation preference, which is where declared but unpaid arrears live. dividends_payable_usd is served beside these figures as disclosure and is not summed into them.
Response shape
| Top-level field | Meaning |
|---|---|
| version | Contract version. Currently 1. |
| as_of | ISO timestamp when the response was generated. |
| license | License line: free to use with attribution to cebetracker.io. Full terms under Terms of Use. |
| methodology | URL of the methodology page. |
| btc_price_live | Current BTC/USD price, or null when unavailable. |
| btc_price_live_as_of | Timestamp of the live price. |
| notes | Machine-readable description of the bases, formula, and contract. |
| companies | Array of per-company objects, documented below. |
Per-company field dictionary
| Field | Type | Meaning |
|---|---|---|
| ticker | string | Canonical ticker used across the site. Exchange aliases resolve to this key. |
| name | string | Company display name. |
| as_of | string | Date of the latest verified balance sheet snapshot (YYYY-MM-DD). |
| btc_holdings | number | BTC held as of the snapshot date. |
| debt_usd | number, null | Debt outstanding, USD. |
| preferred_usd | number, null | Preferred stock outstanding at face, USD. |
| cash_usd | number, null | Cash and equivalents, USD. Nets against senior claims. |
| strc_holdings_usd | number, null | STRC preferred held as an asset, USD. Nets against senior claims. |
| dividends_payable_usd | number, null | Declared but unpaid preferred dividends, USD, at face. Non-netting disclosure field: this is not an input to claims. preferred_usd carries accrued liquidation preference, so these arrears already sit inside it and adding this field would double-count them. null means not reported, 0 means none stands declared and unpaid. |
| btc_claim_static | number | BTC-denominated senior claims for BTC-indexed issuers. Price independent. |
| basic_shares | number | Basic common shares outstanding. |
| btc_price | number | BTC/USD price the snapshot figures were anchored at. |
| btc_price_as_of | string | Date of btc_price. Equals as_of. |
| senior_claims_pct | number | Share of BTC holdings consumed by net senior claims at btc_price. Percent, 0 to 100. |
| cebe_sats | integer | Common Equity Bitcoin Exposure per share, in satoshis, snapshot basis. |
| stock_price | number, null | Last available trade or close in USD, from the same quote pipeline the site uses (Finnhub for US and OTC listings, Yahoo Finance for international venues, non-USD prices converted at fetched cross rates). Never a live tick. |
| stock_price_as_of | string, null | Timestamp of the quote. |
| stock_price_source | string, null | Which quote pipeline produced the price. |
| market_cap_usd | number, null | stock_price times basic_shares. |
| cebe_mnav | number, null | Market cap over the USD value of common equity BTC at btc_price. Accretion threshold is 1.0. |
| senior_claims_pct_live | number, null | Senior Claims % recomputed at btc_price_live. |
| cebe_sats_live | integer, null | cebe_sats recomputed at btc_price_live. |
| cebe_mnav_live | number, null | cebe_mnav recomputed at btc_price_live. |
| wrapper_annual_usd | number, null | Annual carry cost of the wrapper (interest plus preferred dividends), USD. |
| wrapper_annual_usd_verified | boolean, null | true when the wrapper figure is filing-verified, false when estimated, null when no flag is recorded. |
| source | string, null | Primary filing reference for the snapshot. |
Stock-derived fields (stock_price, market_cap_usd, cebe_mnav and its live twin) are null when no dated quote is available. The feed withholds a quote rather than serving it on a wrong currency basis.
Caching and limits
Responses are CDN-cached for about five minutes (s-maxage=300, stale-while-revalidate=600). Behind the cache, requests are rate-limited to 100 per minute per IP; over-limit requests receive 429 with Retry-After: 60. Error responses are never cached. If upstream garbage rows were stripped server-side, the response carries an X-CEBE-Integrity header and caches for 60 seconds so a cleanup propagates fast.
Versioning contract
The v1 response shape is a published contract: additive changes only. Fields are never renamed or removed. New fields may appear at any time, so parse tolerantly.
Terms of Use
Dated 3 August 2026. These terms may evolve; see Changes.
The CEBE Tracker service and its content are operated by Tierney Analytics LLC.
The feed and the computed figures it serves are free to use with attribution. There is no key, no registration, and no fee.
Commercial use
Commercial use of the API is permitted under these attribution terms; CEBE Tracker reserves the right to introduce commercial licensing tiers for systematic or revenue-bearing redistribution, with existing implementers grandfathered on notice.
Attribution
Cite the source in this form:
Data via CEBE Tracker, cebetracker.io
Render cebetracker.io as a link to https://cebetracker.io wherever the medium supports links. The citation belongs on any surface that displays the data, in view alongside the figures themselves. A chart, a table, a slide, a post, or a screenshot each carries its own citation. A footnote, an endnote, a credits page, or a source list elsewhere in the document does not satisfy this.
No representation as house data
Do not present these figures as your own original or in-house research, and do not republish the dataset under another name or brand as though it were independently produced. Work derived from the feed is welcome, and the underlying figures stay attributed to CEBE Tracker.
No endorsement in either direction
Use of this data does not mean CEBE Tracker endorses you, your product, or your analysis, and it does not mean you endorse CEBE Tracker. Do not describe the relationship as a partnership, an affiliation, a sponsorship, or a review, and do not use the CEBE Tracker name or wordmark in a way that suggests one.
Publishing the figures accurately
Every figure traces to a primary filing; the per-company source field carries the reference. Every CEBE figure is a function of a dated BTC price, so publish the basis (snapshot or live) and the as_of date alongside any number you take from the feed.
Changes
These terms may evolve as the feed does. Each revision changes the date at the top of this section. Work already published under an earlier version stays governed by the version in force when it was published.