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:

FieldMeaning
as_ofWhen the newest reading in the response was published. Not when you asked for it, and not when the file was written.
model_versionEach model's version. A version changes only when what a reading means changes, never on a refresh.
disclaimerEducational 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

StatusWhen
401No valid credential. Call the API through its marketplace listing.
403The plan does not cover this asset or endpoint.
405This API is read-only.
502The data origin could not be read.
503The gateway has no credential source configured.

GET /v1/assets/{symbol}/risk

Current readings for one asset.

ParameterInMeaning
symbolpathrequiredCanonical 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

StatusWhen
400The symbol is not a valid shape.
401No valid credential. Call the API through its marketplace listing.
403The plan does not cover this asset or endpoint.
404No asset by that symbol.
405This API is read-only.
502The data origin could not be read.
503The 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.

ParameterInMeaning
symbolpathrequiredCanonical symbol, case-insensitive. See GET /v1/assets.
limitqueryoptionalRows per page. Free plan caps at 90; paid at 1000.
cursorqueryoptionalReturn rows after this date, exclusive. Use next_cursor from the previous page.
fromqueryoptional
toqueryoptional
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

StatusWhen
400A parameter is malformed.
401No valid credential. Call the API through its marketplace listing.
403The plan does not cover this asset or endpoint.
404No asset by that symbol.
405This API is read-only.
502The data origin could not be read.
503The 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.

ParameterInMeaning
symbolsqueryrequiredComma-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

StatusWhen
400No symbols, or too many.
401No valid credential. Call the API through its marketplace listing.
403The plan does not cover this asset or endpoint.
405This API is read-only.
502The data origin could not be read.
503The gateway has no credential source configured.

Market

GET /v1/market/{universe}/summary

The barometer for one universe.

ParameterInMeaning
universepathrequired
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

StatusWhen
400The universe name is not a valid shape.
401No valid credential. Call the API through its marketplace listing.
403The plan does not cover this asset or endpoint.
404No universe by that name.
405This API is read-only.
502The data origin could not be read.
503The 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.

ParameterInMeaning
symbolpathrequiredCanonical 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

StatusWhen
400The symbol is not a valid shape.
401No valid credential. Call the API through its marketplace listing.
403The plan does not cover this asset or endpoint.
404That asset has no regression model.
405This API is read-only.
502The data origin could not be read.
503The 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.

ModelScaleDefinition
dca_regression@10-1Polynomial 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@10-100alternative.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@10-100Leading 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@10-100Degree-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@10-100Degree-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@10-100Per-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@10-10020-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@10-100Weekly 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@10-100Lifetime 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@10-100Expanding 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@11-10Lifetime 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.

Get it on Google Play — free, no ads