curl -X GET "https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365" \
-H "X-API-Key: <YOUR_API_KEY>"fetch("https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365", { headers: { "X-API-Key": "<YOUR_API_KEY>"} })
.then(response => response.json())
.then(data => console.log(data))require('axios')
.get("https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365", { headers: { 'X-API-Key': '<YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365")
req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = "<YOUR_API_KEY>"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.bodyimport requests
headers = {'X-API-Key': '<YOUR_API_KEY>'}
url = "https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://consensus.cryptoquant.com/api/v1/consensus",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://consensus.cryptoquant.com/api/v1/consensus"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://consensus.cryptoquant.com/api/v1/consensus")
.header("X-API-Key", "<api-key>")
.asString();{
"asset": "NVDA",
"asset_name": "NVIDIA",
"asset_class": "equities",
"date": "2026-10-05",
"consensus_index": 71.28,
"consensus_index_30d_ma": 75.85,
"bullish_percent": 86,
"bearish_percent": 14,
"total_analysts": 62,
"bull_case": "Early AI buildout plus cheap valuation fuels growth",
"bear_case": "Limited upside ahead; take profits and rotate",
"window": "30d",
"plan": "public",
"history": "The daily index history needs an API key (X-API-Key) — https://consensus.cryptoquant.com/docs/api",
"page_url": "https://consensus.cryptoquant.com/consensus/nvda?utm_source=api&utm_medium=gpt-action&utm_campaign=consensus",
"top_analysts_url": "https://consensus.cryptoquant.com/analysts?asset=nvda&sort=accuracy&utm_source=api&utm_medium=gpt-action&utm_campaign=consensus",
"methodology_url": "https://consensus.cryptoquant.com/methodology?utm_source=api&utm_medium=gpt-action&utm_campaign=consensus",
"cite_as": "Data by CryptoQuant Consensus — https://consensus.cryptoquant.com/consensus/nvda",
"data_by": "Data by CryptoQuant Consensus",
"as_of": "2026-10-06T07:48:24.833Z"
}Analyst Consensus Index
The daily Analyst Consensus Index — one analyst = one vote, from −100 (all bearish) to +100 (all bullish). Public for the latest point; API key for the daily history.
curl -X GET "https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365" \
-H "X-API-Key: <YOUR_API_KEY>"fetch("https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365", { headers: { "X-API-Key": "<YOUR_API_KEY>"} })
.then(response => response.json())
.then(data => console.log(data))require('axios')
.get("https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365", { headers: { 'X-API-Key': '<YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365")
req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = "<YOUR_API_KEY>"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.bodyimport requests
headers = {'X-API-Key': '<YOUR_API_KEY>'}
url = "https://consensus.cryptoquant.com/api/v1/consensus?asset=BTC&days=365"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://consensus.cryptoquant.com/api/v1/consensus",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://consensus.cryptoquant.com/api/v1/consensus"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://consensus.cryptoquant.com/api/v1/consensus")
.header("X-API-Key", "<api-key>")
.asString();{
"asset": "NVDA",
"asset_name": "NVIDIA",
"asset_class": "equities",
"date": "2026-10-05",
"consensus_index": 71.28,
"consensus_index_30d_ma": 75.85,
"bullish_percent": 86,
"bearish_percent": 14,
"total_analysts": 62,
"bull_case": "Early AI buildout plus cheap valuation fuels growth",
"bear_case": "Limited upside ahead; take profits and rotate",
"window": "30d",
"plan": "public",
"history": "The daily index history needs an API key (X-API-Key) — https://consensus.cryptoquant.com/docs/api",
"page_url": "https://consensus.cryptoquant.com/consensus/nvda?utm_source=api&utm_medium=gpt-action&utm_campaign=consensus",
"top_analysts_url": "https://consensus.cryptoquant.com/analysts?asset=nvda&sort=accuracy&utm_source=api&utm_medium=gpt-action&utm_campaign=consensus",
"methodology_url": "https://consensus.cryptoquant.com/methodology?utm_source=api&utm_medium=gpt-action&utm_campaign=consensus",
"cite_as": "Data by CryptoQuant Consensus — https://consensus.cryptoquant.com/consensus/nvda",
"data_by": "Data by CryptoQuant Consensus",
"as_of": "2026-10-06T07:48:24.833Z"
}What it measures
The Analyst Consensus Index: one analyst = one vote (their latest directional post on the asset, weighted by recency and accuracy), −100 (all bearish) to +100 (all bullish), one daily series per asset.- Without a key it answers the latest point for any asset with the bull / bear case, the 30-day split and the links to cite.
- With a key it answers the daily history (Premium / Enterprise: the whole range; Free: the latest point only).
Response fields (series)
| Field | Description |
|---|---|
consensus_index | Raw daily index (−100 … +100); null on a day without enough calls. |
consensus_index_30d_ma | 30-day moving average of the index. |
z_score | 90-day rolling z-score of the 30-day MA. Colour rule used on the site: z ≥ +0.8 bullish (green), z ≤ −1.5 bearish (red). |
bullish_analysts / bearish_analysts / total_analysts | Voters by side that day. |
bullish_opinions / bearish_opinions / total_opinions | Directional posts counted that day. |
Notes
dayscounts days of history ending yesterday UTC (keyed only). Positive integer, capped at the plan’s limit (36,500 = everything on Premium / Enterprise). The full BTC history is ≈ 1,950 rows.granularity— onlydailyis offered (there is no hourly series).via— public form only: tags the payload’s links withutm_source(chatgpt,claude,mcp,gemini,perplexity,api).- An unregistered
assetanswers400 UNKNOWN_ASSET; the list isGET /assets. - Public payloads carry
page_url,cite_asanddata_by(“Data by CryptoQuant Consensus”) — show the attribution with the numbers.
Authorization: Bearer, from/to/limit/
order) — the index only, without the breakdown, stance or track record.Authorizations
Provisioned with the CryptoQuant Premium plan or an Enterprise agreement (no self-serve). Keys start with unbias_live_.
Query Parameters
Any registered asset, case-insensitive: the symbol (BTC, NVDA, 005930, XAU), the route key (bitcoin, samsung-electronics), the display name (Bitcoin), an alias ticker (GLD → XAU) or a retired ticker (MATIC → POL). The response reports the canonical symbol. The full list: GET /assets. A market aggregate (crypto-market) is not accepted. Unknown → 400 UNKNOWN_ASSET.
Keyed only — days of history ending yesterday UTC. Positive integer (anything else → 400 INVALID_PARAMETER); silently capped at the plan's max_days_history (free 7, premium / enterprise 36500). Ignored without a key and on the free plan's single point.
1 <= x <= 36500Keyed only — daily is the only value (there is no hourly series); anything else → 400 INVALID_PARAMETER.
daily The surface the agent runs on; sets utm_source on every link in the payload. Unknown values fall back to the default.
chatgpt, claude, mcp, gemini, perplexity, api Response
Latest point (no key: ConsensusPublic), series (premium / enterprise: ConsensusSeries) or latest point (free: ConsensusLatest). The three shapes are told apart by plan (public / absent / free).
- Option 1
- Option 2
- Option 3
No key: the latest end-of-day index point for the asset (what the asset page's band shows) with the bull / bear case and the links to quote.
Canonical symbol.
crypto, equities, indices, commodities UTC day of the reading (null = no index yet for this asset).
Analyst Consensus Index: −100 all bearish … +100 all bullish (one analyst = one vote, decay × accuracy weighted; see /methodology).
-100 <= x <= 100public The canonical page on the site for this answer, UTM-tagged for the calling surface (via). Link it in every answer.
Attribution line + the untagged canonical URL, e.g. "Data by CryptoQuant Consensus — https://consensus.cryptoquant.com/consensus/btc".
Show this next to the numbers.
Data by CryptoQuant Consensus Generation time of the payload (UTC).
-100 <= x <= 100round((consensus_index + 100) / 2) — the bullish share the site shows.
0 <= x <= 100100 − bullish_percent.
0 <= x <= 100Analysts voting in that day's index.
x >= 0One-line bull case for the window (null when no bullish consensus formed).
Window of the bull / bear case.
30d How to get the daily history (API key).
The asset's analysts ranked by accuracy (site page).
How the numbers are made.