Public API v1

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 fieldMeaning
versionContract version. Currently 1.
as_ofISO timestamp when the response was generated.
licenseLicense line: free to use with attribution to cebetracker.io. Full terms under Terms of Use.
methodologyURL of the methodology page.
btc_price_liveCurrent BTC/USD price, or null when unavailable.
btc_price_live_as_ofTimestamp of the live price.
notesMachine-readable description of the bases, formula, and contract.
companiesArray of per-company objects, documented below.

Per-company field dictionary

FieldTypeMeaning
tickerstringCanonical ticker used across the site. Exchange aliases resolve to this key.
namestringCompany display name.
as_ofstringDate of the latest verified balance sheet snapshot (YYYY-MM-DD).
btc_holdingsnumberBTC held as of the snapshot date.
debt_usdnumber, nullDebt outstanding, USD.
preferred_usdnumber, nullPreferred stock outstanding at face, USD.
cash_usdnumber, nullCash and equivalents, USD. Nets against senior claims.
strc_holdings_usdnumber, nullSTRC preferred held as an asset, USD. Nets against senior claims.
dividends_payable_usdnumber, nullDeclared 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_staticnumberBTC-denominated senior claims for BTC-indexed issuers. Price independent.
basic_sharesnumberBasic common shares outstanding.
btc_pricenumberBTC/USD price the snapshot figures were anchored at.
btc_price_as_ofstringDate of btc_price. Equals as_of.
senior_claims_pctnumberShare of BTC holdings consumed by net senior claims at btc_price. Percent, 0 to 100.
cebe_satsintegerCommon Equity Bitcoin Exposure per share, in satoshis, snapshot basis.
stock_pricenumber, nullLast 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_ofstring, nullTimestamp of the quote.
stock_price_sourcestring, nullWhich quote pipeline produced the price.
market_cap_usdnumber, nullstock_price times basic_shares.
cebe_mnavnumber, nullMarket cap over the USD value of common equity BTC at btc_price. Accretion threshold is 1.0.
senior_claims_pct_livenumber, nullSenior Claims % recomputed at btc_price_live.
cebe_sats_liveinteger, nullcebe_sats recomputed at btc_price_live.
cebe_mnav_livenumber, nullcebe_mnav recomputed at btc_price_live.
wrapper_annual_usdnumber, nullAnnual carry cost of the wrapper (interest plus preferred dividends), USD.
wrapper_annual_usd_verifiedboolean, nulltrue when the wrapper figure is filing-verified, false when estimated, null when no flag is recorded.
sourcestring, nullPrimary 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.