Loading intelligence...
Loading intelligence...
Institutional access
Query historical mNAV and the live treasury/credit-stack payload with a hashed API key. Keys are created in Settings and only work on an active Institutional plan.
Send the raw key on every request as X-API-Key or as Authorization: Api-Key <key>. The server stores only a hash. A 401 means the key is wrong, revoked, or the account is not Institutional.
curl -sS -H "X-API-Key: $STRATEGYVIEWER_API_KEY" "https://strategyviewer.com/api/stock/developer/v1/historical-mnav/?ticker=MSTR&period=1y"
| Route | Auth | Notes |
|---|---|---|
| GET /api/stock/developer/v1/historical-mnav/ | API key | Historical mNAV Daily mNAV series for a ticker. MSTR uses the live historical builder; other names reconstruct NAV from holdings, debt, and aligned stock/BTC closes.
|
| GET /api/stock/developer/v1/treasury-metrics/ | API key | Treasury metrics Corporate Bitcoin treasury leaderboard at Institutional limits: holdings, mNAV quartet, credit-stack fields, and preferred notionals. |
| GET /api/stock/treasuries/ | Public | Public treasuries list Same leaderboard without an API key. Company count and history depth follow the caller’s plan (anonymous = free). |
| GET /api/stock/treasuries/{ticker}/ | Public | Treasury detail Single-company payload including convertible notes, preferred securities, BTC Rating, BTC Floor, and treasury_analytics when available. |
| GET /api/stock/mstr/financial-metrics/ | Public | MSTR financial metrics Headline Strategy metrics used by the homepage, including the treasury_analytics object. |
| GET /api/stock/holdings-verification/ | Public | Holdings verification Filing-linked audit trail for disclosed Bitcoin holdings. |
OpenAPI/Swagger for the Django surface lives at /api/docs/. Routes are also mounted under /api/v1/.
Institutional accounts can register HTTPS endpoints in Settings. Deliveries are JSON POSTs with event_id, event_type, timestamp, and data. Each delivery sends header StrategyViewer-Signature: t={timestamp},v1={hex} where v1 is HMAC-SHA256(secret, "{timestamp}.{raw_json_body}").Use the raw request body, not a re-serialized JSON object.
import hmac, hashlib
header = request.headers["StrategyViewer-Signature"] # t=...,v1=...
parts = dict(item.split("=", 1) for item in header.split(","))
timestamp, signature = parts["t"], parts["v1"]
signed = f"{timestamp}.{raw_body}".encode()
expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
assert hmac.compare_digest(expected, signature)