Bitcoin Hash Ribbons

30-day and 60-day simple moving averages of Bitcoin's network hashrate.

Charles Edwards' Hash Ribbons: the 30-day SMA crossing below the 60-day SMA has historically signaled miner capitulation; crossing back above has signaled the end of capitulation.

How to call

Request format

GET
curl -X GET "https://newhedge.io/api/v2/metrics/hash-ribbons/METRIC_NAME?api_token=YOUR_TOKEN"
Query params

api_token (required) — 24 character token.

resolution (optional) — 1d (default), 12h, 4h, 1h, 30m, 10m, coarsest to finest. Finer buckets are served to Advanced and Enterprise accounts, and only for the metrics that ingest them (listed per metric below); see Resolutions.

before (optional) — exclusive cursor, returns observations older than this timestamp_ms. Works on every resolution.

limit (optional) — the most recent N observations, maximum 5000. Finer resolutions page by default (2500); a 1d request returns the whole series unless you send limit or before.

before and limit narrow a time series. A response with no single time axis, such as a hash keyed by venue or a labelled snapshot table, has nothing to cut on. It is returned whole, and both parameters are ignored rather than rejected.

A before that is not a positive epoch-millisecond timestamp is a 400. It is the one paging value we reject rather than ignore, because a page size has a sensible default and a cursor does not.

include (optional) — definition wraps the response as {"definition": …, "data": …} and returns the record shown under each metric; see Definitions. Any other value is a 400.

Path params

:metric_name — one of the metric names listed below.

Responses

200 with JSON payload, 400 for an unknown include value, 401 for missing/invalid token, 404 for missing resources. A 404 for a metric withdrawn on purpose adds withdrawn, withdrawn_on and reason, for example {"error":"Metric not found","withdrawn":true,"withdrawn_on":"2026-09-07","reason":"The venue's public feed reports insurance-fund settlements, not liquidation orders."}; a removed chart can add successor.

Plan and quota refusals keep these statuses and error texts and add code, required_plan, current_plan, feature, upgrade_url, limit and resets_at where they apply. A Pro token whose history window removed points also gets the X-Newhedge-History-Truncated headers, and for a Pro token X-Newhedge-Available-From is the start of the window. See Errors and plan limits.

Metrics

Each metric is fetched independently. Responses are trimmed samples to show structure.

3 metrics
Metric

30-Day SMAhashrate_30d_sma

Data used by the Bitcoin Hash Ribbons chart.

Resolutions: 1d, 12h, 4h, 1h, 30m, 10m.

Endpoint
https://newhedge.io/api/v2/metrics/hash-ribbons/hashrate_30d_sma?api_token=YOUR_TOKEN

Replace `YOUR_TOKEN` with your API token.

Sample response
200 Successful response
[
  [
    1792540800000,
    1006.76697838213
  ],
  [
    1792627200000,
    1004.686052471091
  ],
  [
    1792713600000,
    1017.305848189002
  ]
]
Definition (from the chart description)

Units: hashrate_eh_s

Timestamp (1d): Labelled 00:00 UTC of the day it describes.

Timestamp (finer resolutions): A finer resolution is labelled in UTC at the end of the interval it covers, not at its start. Add include=definition to a request and the definition describes the bucket that request was served.

Calendar: calendar_daily

Metric

60-Day SMAhashrate_60d_sma

Data used by the Bitcoin Hash Ribbons chart.

Resolutions: 1d, 12h, 4h, 1h, 30m, 10m.

Endpoint
https://newhedge.io/api/v2/metrics/hash-ribbons/hashrate_60d_sma?api_token=YOUR_TOKEN

Replace `YOUR_TOKEN` with your API token.

Sample response
200 Successful response
[
  [
    1792540800000,
    973.1996574482545
  ],
  [
    1792627200000,
    973.9322050787233
  ],
  [
    1792713600000,
    979.6298858429756
  ]
]
Definition (from the chart description)

Units: hashrate_eh_s

Timestamp (1d): Labelled 00:00 UTC of the day it describes.

Timestamp (finer resolutions): A finer resolution is labelled in UTC at the end of the interval it covers, not at its start. Add include=definition to a request and the definition describes the bucket that request was served.

Calendar: calendar_daily

Metric

Hashratehashrate

Data used by the Bitcoin Hash Ribbons chart.

Resolutions: 1d, 12h, 4h, 1h, 30m, 10m.

Endpoint
https://newhedge.io/api/v2/metrics/hash-ribbons/hashrate?api_token=YOUR_TOKEN

Replace `YOUR_TOKEN` with your API token.

Sample response
200 Successful response
[
  [
    1792540800000,
    1097.140237548331
  ],
  [
    1792627200000,
    894.4837605489577
  ],
  [
    1792713600000,
    1229.915170754817
  ]
]
Definition (from the chart description)

Units: hashrate_eh_s

Timestamp (1d): Labelled 00:00 UTC of the day it describes.

Timestamp (finer resolutions): A finer resolution is labelled in UTC at the end of the interval it covers, not at its start. Add include=definition to a request and the definition describes the bucket that request was served.

Calendar: calendar_daily