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.
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.
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. |
| 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. |
| 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.
License and attribution
The feed is free to use with attribution to cebetracker.io. Every figure traces to a primary filing; the per-company source field carries the reference. If you publish numbers from this feed, link back to cebetracker.io and note the basis (snapshot or live) and the as_of date alongside them, since every CEBE figure is a function of a dated BTC price.