CryptoWeeklies · API · Reference
API reference
Quantitative risk readings for crypto and equity assets, as published on cryptoweeklies.com.
Version 1.0.0. The machine-readable contract is
OpenAPI 3.1, also served by the gateway at
/v1/openapi.json.
Getting started
Requests go to https://api.cryptoweeklies.com. Every request needs a key,
which comes from the marketplace listing; the two headers below are what its own code
snippets send.
curl "https://api.cryptoweeklies.com/v1/assets/BTC/risk" \\
-H "x-rapidapi-key: YOUR_KEY" \\
-H "x-rapidapi-host: YOUR_HOST"
GET /v1/health answers without a key, so you can check the service before
you have one.
How every response is shaped
The payload is under data. Three fields sit outside it on every response,
including every error:
| Field | Meaning |
|---|---|
as_of | When the newest reading in the response was published. Not when you asked for it, and not when the file was written. |
model_version | Each model's version. A version changes only when what a reading means changes, never on a refresh. |
disclaimer | Educational use only. Present on every response. |
A model an asset does not have is an explicit null, never an
omitted key. An equity with no regression page returns "dca": null, so a
consumer can tell "no model" from "not sent".
Freshness
The pipeline regenerates the underlying model pages three times a day and the API is
rebuilt from them in the same run. Poll harder than that and you will read the same numbers.
Every reading carries its own as_of, and stale_models names any
model whose page is more than three days behind the asset's newest one.
Assets
GET /v1/assets
Every asset the API covers.
The roster, with each asset's universes, the models it has and the source page behind each one. A free-plan caller receives the assets it may read plus total_asset_count, so the rest of the catalogue is visible without being fetchable.
Example response
{
"as_of": "2026-09-05T15:57:00Z",
"model_version": {
"twap_gravity_crypto": "1",
"dca_regression": "1",
"sma_20w_crypto": "1"
},
"disclaimer": "Descriptive statistics on past price, for educational use only. Not financial, investment, legal or professional advice. Past performance does not guarantee future results. Every value here is published free at cryptoweeklies.com.",
"data": {
"assets": [
{
"symbol": "BTC",
"name": "Bitcoin",
"asset_class": "CRYPTO",
"universes": [
"crypto"
],
"free_tier": true,
"as_of": "2026-09-05T15:57:00Z",
"models": [
"dca",
"gravity",
"phase",
"sma_composite",
"twap"
],
"pages": {
"Price_TWAP_Gravity_Analysis": "BTC_Price_TWAP_Gravity_Analysis.html"
}
}
],
"universes": {
"crypto": [
"BTC"
]
},
"free_tier": {
"rule": "crypto galaxy Market_Cap_Rank <= 10, recomputed each refresh",
"symbols": [
"BTC"
]
},
"asset_count": 1,
"total_asset_count": 161,
"tier": "pro"
}
}Errors
| Status | When |
|---|---|
401 | No valid credential. Call the API through its marketplace listing. |
403 | The plan does not cover this asset or endpoint. |
405 | This API is read-only. |
502 | The data origin could not be read. |
503 | The gateway has no credential source configured. |
GET /v1/assets/{symbol}/risk
Current readings for one asset.
| Parameter | In | Meaning | |
|---|---|---|---|
symbol | path | required | Canonical symbol, case-insensitive. See GET /v1/assets. |
Example response
{
"as_of": "2026-09-05T15:57:00Z",
"model_version": {
"twap_gravity_crypto": "1",
"dca_regression": "1",
"sma_20w_crypto": "1"
},
"disclaimer": "Descriptive statistics on past price, for educational use only. Not financial, investment, legal or professional advice. Past performance does not guarantee future results. Every value here is published free at cryptoweeklies.com.",
"data": {
"symbol": "BTC",
"name": "Bitcoin",
"asset_class": "CRYPTO",
"universes": [
"crypto"
],
"free_tier": true,
"market_cap_rank": 1,
"as_of": "2026-09-05T15:57:00Z",
"price": {
"value": 79798.52,
"currency": "USD",
"source_page": "BTC_Price_TWAP_Gravity_Analysis.html"
},
"gravity": {
"score": 22.6,
"risk_level": 3,
"verdict": "historically an accumulation zone, well below past tops",
"model": "twap_gravity_crypto@1",
"as_of": "2026-09-05T15:57:00Z",
"as_of_basis": "page_stamp",
"source_page": "BTC_Price_TWAP_Gravity_Analysis.html"
},
"twap": {
"baseline": 29427.42,
"premium_pct": 171.17,
"risk_level": 7,
"risk_level_model": "twap_risk_level_crypto@1",
"model": "twap_gravity_crypto@1",
"as_of": "2026-09-05T15:57:00Z",
"as_of_basis": "page_stamp",
"source_page": "BTC_Price_TWAP_Gravity_Analysis.html"
},
"sma_composite": {
"score": 51.0,
"page_value": 0.51,
"band": "0.5-0.6",
"model": "sma_20w_crypto@1",
"as_of": "2026-09-05T15:54:00Z",
"as_of_basis": "page_stamp",
"source_page": "btc-usd_price_with_risk.html"
},
"phase": {
"label": "Bull Phase Expansion",
"completion_pct": 51.9,
"fair_value": null,
"max_euphoria_target": 172747.36,
"model": "polynomial_phase_crypto@1",
"as_of": "2026-09-07",
"as_of_basis": "trace_end",
"source_page": "BTC_Polynomial_Phase_Detector.html"
},
"dca": {
"band": "0.3-0.4",
"risk": 0.35,
"price": 79798.52,
"fair_value": 76564.3,
"floor": 43056.64,
"ceiling": 188256.47,
"premium_pct": 4.22,
"premium_source": "printed",
"reading_date": "2026-09-05",
"model": "dca_regression@1",
"as_of": "2026-09-05",
"as_of_basis": "trace_end",
"source_page": "BTC_lin_reg_price_with_risk.html"
},
"market_context": {
"universe": "crypto",
"peak_valley": {
"score": 40.1,
"zone": "Moderate Zone",
"series": "leading_btc_eth",
"scope": "market",
"model": "peak_valley_crypto@1",
"as_of": "2026-09-05T15:53:00Z",
"as_of_basis": "page_stamp"
},
"fear_greed": {
"value": 73,
"label": "greed",
"label_source": "site_band_table",
"sma_30": 53,
"provider": "alternative.me",
"scope": "market",
"model": "fear_greed_crypto@1",
"as_of": "2026-09-05",
"as_of_basis": "trace_end"
}
},
"stale_models": []
}
}Errors
| Status | When |
|---|---|
400 | The symbol is not a valid shape. |
401 | No valid credential. Call the API through its marketplace listing. |
403 | The plan does not cover this asset or endpoint. |
404 | No asset by that symbol. |
405 | This API is read-only. |
502 | The data origin could not be read. |
503 | The gateway has no credential source configured. |
GET /v1/assets/{symbol}/history
Dated readings for one asset.
Oldest first. Page with limit and cursor; narrow with from and to. Each row states the basis it was recorded on: as_published for a daily row taken from that day's page, weekly_archive for a row mined from the weekly record that predates the daily one.
| Parameter | In | Meaning | |
|---|---|---|---|
symbol | path | required | Canonical symbol, case-insensitive. See GET /v1/assets. |
limit | query | optional | Rows per page. Free plan caps at 90; paid at 1000. |
cursor | query | optional | Return rows after this date, exclusive. Use next_cursor from the previous page. |
from | query | optional | |
to | query | optional |
Example response
{
"as_of": "2026-09-05T15:57:00Z",
"model_version": {
"twap_gravity_crypto": "1",
"dca_regression": "1",
"sma_20w_crypto": "1"
},
"disclaimer": "Descriptive statistics on past price, for educational use only. Not financial, investment, legal or professional advice. Past performance does not guarantee future results. Every value here is published free at cryptoweeklies.com.",
"data": {
"symbol": "BTC",
"cadence": "daily from launch; weekly_archive rows before it",
"from": "2024-06-18",
"through": "2026-09-05",
"row_count": 2,
"total_row_count": 125,
"limit": 2,
"max_limit": 1000,
"next_cursor": "2024-06-25",
"rows": [
{
"date": "2024-06-18",
"basis": "weekly_archive",
"price": 65376.93,
"gravity": null,
"twap_premium_pct": 253.0,
"twap_risk_level": 6,
"sma_composite": null,
"phase_completion_pct": null,
"dca_band": "0.5-0.6",
"dca_risk": 0.55,
"dca_premium_pct": null
},
{
"date": "2024-06-25",
"basis": "weekly_archive",
"price": 61184.07,
"gravity": null,
"twap_premium_pct": 241.4,
"twap_risk_level": 6,
"sma_composite": null,
"phase_completion_pct": null,
"dca_band": "0.4-0.5",
"dca_risk": 0.45,
"dca_premium_pct": null
}
]
}
}Errors
| Status | When |
|---|---|
400 | A parameter is malformed. |
401 | No valid credential. Call the API through its marketplace listing. |
403 | The plan does not cover this asset or endpoint. |
404 | No asset by that symbol. |
405 | This API is read-only. |
502 | The data origin could not be read. |
503 | The gateway has no credential source configured. |
GET /v1/bulk/risk
Current readings for many assets.
Paid plans only. Up to 25 symbols per request. Symbols the API does not cover are named in missing rather than dropped.
| Parameter | In | Meaning | |
|---|---|---|---|
symbols | query | required | Comma-separated, up to 25. |
Example response
{
"as_of": "2026-09-05T15:57:00Z",
"model_version": {
"twap_gravity_crypto": "1",
"dca_regression": "1",
"sma_20w_crypto": "1"
},
"disclaimer": "Descriptive statistics on past price, for educational use only. Not financial, investment, legal or professional advice. Past performance does not guarantee future results. Every value here is published free at cryptoweeklies.com.",
"data": {
"assets": {
"BTC": {
"symbol": "BTC",
"name": "Bitcoin",
"asset_class": "CRYPTO",
"universes": [
"crypto"
],
"free_tier": true,
"market_cap_rank": 1,
"as_of": "2026-09-05T15:57:00Z",
"price": {
"value": 79798.52,
"currency": "USD",
"source_page": "BTC_Price_TWAP_Gravity_Analysis.html"
},
"gravity": {
"score": 22.6,
"risk_level": 3,
"verdict": "historically an accumulation zone, well below past tops",
"model": "twap_gravity_crypto@1",
"as_of": "2026-09-05T15:57:00Z",
"as_of_basis": "page_stamp",
"source_page": "BTC_Price_TWAP_Gravity_Analysis.html"
},
"twap": {
"baseline": 29427.42,
"premium_pct": 171.17,
"risk_level": 7,
"risk_level_model": "twap_risk_level_crypto@1",
"model": "twap_gravity_crypto@1",
"as_of": "2026-09-05T15:57:00Z",
"as_of_basis": "page_stamp",
"source_page": "BTC_Price_TWAP_Gravity_Analysis.html"
},
"sma_composite": {
"score": 51.0,
"page_value": 0.51,
"band": "0.5-0.6",
"model": "sma_20w_crypto@1",
"as_of": "2026-09-05T15:54:00Z",
"as_of_basis": "page_stamp",
"source_page": "btc-usd_price_with_risk.html"
},
"phase": {
"label": "Bull Phase Expansion",
"completion_pct": 51.9,
"fair_value": null,
"max_euphoria_target": 172747.36,
"model": "polynomial_phase_crypto@1",
"as_of": "2026-09-07",
"as_of_basis": "trace_end",
"source_page": "BTC_Polynomial_Phase_Detector.html"
},
"dca": {
"band": "0.3-0.4",
"risk": 0.35,
"price": 79798.52,
"fair_value": 76564.3,
"floor": 43056.64,
"ceiling": 188256.47,
"premium_pct": 4.22,
"premium_source": "printed",
"reading_date": "2026-09-05",
"model": "dca_regression@1",
"as_of": "2026-09-05",
"as_of_basis": "trace_end",
"source_page": "BTC_lin_reg_price_with_risk.html"
},
"market_context": {
"universe": "crypto",
"peak_valley": {
"score": 40.1,
"zone": "Moderate Zone",
"series": "leading_btc_eth",
"scope": "market",
"model": "peak_valley_crypto@1",
"as_of": "2026-09-05T15:53:00Z",
"as_of_basis": "page_stamp"
},
"fear_greed": {
"value": 73,
"label": "greed",
"label_source": "site_band_table",
"sma_30": 53,
"provider": "alternative.me",
"scope": "market",
"model": "fear_greed_crypto@1",
"as_of": "2026-09-05",
"as_of_basis": "trace_end"
}
},
"stale_models": []
}
},
"requested": [
"BTC",
"NOSUCH"
],
"missing": [
"NOSUCH"
],
"count": 1
}
}Errors
| Status | When |
|---|---|
400 | No symbols, or too many. |
401 | No valid credential. Call the API through its marketplace listing. |
403 | The plan does not cover this asset or endpoint. |
405 | This API is read-only. |
502 | The data origin could not be read. |
503 | The gateway has no credential source configured. |
Market
GET /v1/market/{universe}/summary
The barometer for one universe.
| Parameter | In | Meaning | |
|---|---|---|---|
universe | path | required |
Example response
{
"as_of": "2026-09-05T15:57:00Z",
"model_version": {
"twap_gravity_crypto": "1",
"dca_regression": "1",
"sma_20w_crypto": "1"
},
"disclaimer": "Descriptive statistics on past price, for educational use only. Not financial, investment, legal or professional advice. Past performance does not guarantee future results. Every value here is published free at cryptoweeklies.com.",
"data": {
"universe": "crypto",
"asset_count": 85,
"gravity": {
"median": 2.5,
"mean": 6.1,
"bands": {
"accumulation": 80,
"mid_cycle": 2,
"late_cycle": 1,
"cycle_top": 0
},
"lowest": [
{
"symbol": "FIL",
"score": 0.0
}
],
"highest": [
{
"symbol": "TRX",
"score": 63.3
}
]
},
"twap_premium_pct": {
"median": -72.34,
"share_above_twap": 0.133
},
"sma_composite": {
"median": 43.0
},
"barometer": {
"peak_valley": {
"score": 40.1,
"zone": "Moderate Zone",
"scope": "market"
},
"fear_greed": {
"value": 73,
"label": "greed",
"provider": "alternative.me"
}
}
}
}Errors
| Status | When |
|---|---|
400 | The universe name is not a valid shape. |
401 | No valid credential. Call the API through its marketplace listing. |
403 | The plan does not cover this asset or endpoint. |
404 | No universe by that name. |
405 | This API is read-only. |
502 | The data origin could not be read. |
503 | The gateway has no credential source configured. |
Signals
GET /v1/signals/dca/{symbol}
DCA regression state for one asset.
Returns multiplier: null by design. This model publishes a risk band; it has no position-sizing rule, and inventing one would be advice.
| Parameter | In | Meaning | |
|---|---|---|---|
symbol | path | required | Canonical symbol, case-insensitive. See GET /v1/assets. |
Example response
{
"as_of": "2026-09-05T15:57:00Z",
"model_version": {
"twap_gravity_crypto": "1",
"dca_regression": "1",
"sma_20w_crypto": "1"
},
"disclaimer": "Descriptive statistics on past price, for educational use only. Not financial, investment, legal or professional advice. Past performance does not guarantee future results. Every value here is published free at cryptoweeklies.com.",
"data": {
"symbol": "BTC",
"free_tier": true,
"as_of": "2026-09-05",
"reading_date": "2026-09-05",
"state": {
"band": "0.3-0.4",
"risk": 0.35,
"band_label": "Risk Level 0.3-0.4",
"price": 79798.52,
"fair_value": 76564.3,
"floor": 43056.64,
"ceiling": 188256.47,
"premium_pct": 4.22,
"premium_source": "printed"
},
"multiplier": null,
"multiplier_note": "This model publishes a risk band and no position-sizing rule; sizing is the reader's decision.",
"model": "dca_regression@1",
"source_page": "BTC_lin_reg_price_with_risk.html"
}
}Errors
| Status | When |
|---|---|
400 | The symbol is not a valid shape. |
401 | No valid credential. Call the API through its marketplace listing. |
403 | The plan does not cover this asset or endpoint. |
404 | That asset has no regression model. |
405 | This API is read-only. |
502 | The data origin could not be read. |
503 | The gateway has no credential source configured. |
Service
GET /v1/health
Liveness, without a key.
GET /v1/openapi.json
This document.
The models
Each reading names the model that produced it. This is what those names mean.
| Model | Scale | Definition |
|---|---|---|
dca_regression@1 | 0-1 | Polynomial regression of log daily close (degree 2; degree 1 for SPY/QQQ); z = rolling z-score of proportional distance to the fit (730 days; 504 for SPY/QQQ); risk = sigmoid(z), reported as the chart's tenth band and its midpoint; floor/ceiling are the page's own regression bands; premium = price / fair - 1, printed on the page where a card exists and derived from the same two traces otherwise. No position-sizing rule exists in this model. |
fear_greed_crypto@1 | 0-100 | alternative.me Fear & Greed index (0-100) as the site reprints it, with the site's 30-day SMA. Market-wide. The label is the site's own band table, not the provider's classification. |
peak_valley_crypto@1 | 0-100 | Leading Risk Score (BTC + ETH): mean of 730-day min-max normalised inverse drawdown and price/200-day-SMA extension, EWM span 14, x100. Market-wide, not per asset. Zone label quoted from the page. |
polynomial_phase_crypto@1 | 0-100 | Degree-2 OLS on log weekly-mean price; bands at +/-1/2/3 decayed sigma; completion = (clamped z + 3) / 6 x 100, a position between -3 sigma (0) and +3 sigma (100), not elapsed time. |
polynomial_phase_equity@1 | 0-100 | Degree-2 OLS on log weekly-mean price since 2020; bands at +/-1/2/3 decayed sigma; completion = log-space position between the -3 and +3 sigma bands x 100. |
sector_indicators_equity@1 | 0-100 | Per-sector breadth Fear & Greed, Peak/Valley leading oscillator and weekly 20/100/200-week macro risk from the stock indicator engine, as published on the website's sector strips. Sector-wide. |
sma_20w_crypto@1 | 0-100 | 20-week (140 daily closes) SMA; risk = mean of the winsorised (2nd-98th pct) min-max linear and proportional distances to the SMA, 0-1 on the page, x100 here. |
sma_composite_equity@1 | 0-100 | Weekly mean prices; 20/100/200-week SMAs; per-horizon rolling z-score (window = horizon, clipped +/-4) through a sigmoid; composite = mean of the three, 0-1 on the page, x100 here. The date is the weekly bar's label. |
twap_gravity_crypto@1 | 0-100 | Lifetime expanding TWAP of daily closes since first listing; premium = (price - TWAP) / TWAP; Gravity = premium clipped to the asset's own 1st-99th percentile, min-max scaled, x100. Risk level is the chart's own bin, read from the card. |
twap_gravity_equity@1 | 0-100 | Expanding TWAP of daily closes since 2020-01-01 (the 2020 epoch, not lifetime); premium = (price - TWAP) / TWAP; Gravity = premium clipped to the 1st-99th percentile, min-max scaled, x100; level = int(g/10)+1. |
twap_risk_level_crypto@1 | 1-10 | Lifetime expanding TWAP; TWAP risk = ((price - TWAP) / price) floored at 0 and divided by its lifetime maximum; level = int(x * 9.99) + 1. A different normalisation from Gravity, never interchangeable. |
Several of these share a word without sharing a model. The crypto Gravity page measures premium against a lifetime baseline; the equity one against a 2020 epoch; the galaxy against a rolling window. That is why every reading carries its model name, and why two Gravity scores should never be compared without checking it.
Errors
Errors carry a stable error.code. Match on that, not on the message, which
may be reworded.
{
"error": {
"code": "plan_required",
"message": "IONQ is available on the Pro plan. The free plan covers the top 10 crypto assets by market cap."
},
"disclaimer": "Descriptive statistics on past price, for educational use only. Not financial, investment, legal or professional advice. Past performance does not guarantee future results. Every value here is published free at cryptoweeklies.com."
}
Versioning
v1 is additive-only. New fields may appear; existing fields will not change
meaning or disappear. A breaking change becomes /v2, and v1 keeps
answering.
What this API will not do
No order execution, no portfolio management, no personalised advice, no position sizing.
The DCA endpoint returns "multiplier": null deliberately: the model publishes a
risk band, and inventing a size from it would be advice rather than description.