curl -X GET "https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d"fetch("https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d")
.then(response => response.json())
.then(data => console.log(data))require('axios')
.get("https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d")
.then(response => console.log(response))require 'net/http'
uri = URI("https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d")
res = Net::HTTP.get_response(uri)
puts res.bodyimport requests
url = "https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d"
print(requests.get(url).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://consensus.cryptoquant.com/api/v1/analyst-views",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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/analyst-views"
req, _ := http.NewRequest("GET", url, nil)
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/analyst-views")
.asString();{
"asset": "BTC",
"asset_name": "Bitcoin",
"window": "30d",
"bullish_posts": 105,
"bearish_posts": 62,
"bullish_pct": 63,
"bearish_pct": 37,
"bull_case": "Regulatory wins and dovish data fuel breakout",
"bear_case": "Macro pressure and resistance threaten deeper pullback",
"narratives": [
{
"theme": "EXCHANGE HACK",
"headline": "Bitget drained for $387.5M as DPRK hackers spoof backend approvals",
"stance": "bearish",
"analyst_count": 8,
"post_count": 8,
"summary": "Bitget's breach was first reported at $351.6M and later revised up by about $35M to $387.5M. Attackers used spoofed transaction approvals from a compromised backend rather than stolen keys. The $464M User Protection Fund covers the loss but shrinks to about $76.5M."
}
],
"analyst_views": [
{
"handle": "CryptoMichNL",
"name": "Michael van de Poppe",
"stance": "bullish",
"thesis": "BTC run not over; momentum into October targets ~$90,000 resistance, followed by consolidation and a midterm-driven correction that is a buying opportunity before a new all-time high",
"excerpt": "What to expect from #Bitcoin?\n\nHonestly, I don't think we're done with the run. Sure, we can have some red weeks in between, but I'm eyeing the $90,000 area as the coming resistance to be, after…",
"source_url": "https://x.com/CryptoMichNL/status/2103900910501990879",
"source_type": "tweet",
"published_at": "2026-09-26T17:34:00+00:00",
"post_count": 14,
"consistency_pct": 100,
"profile_url": "https://consensus.cryptoquant.com/analyst/CryptoMichNL?utm_source=api&utm_medium=gpt-action&utm_campaign=analyst-views"
}
],
"analyst_views_total": 14,
"note": "analyst_views = analysts with ≥ 3 directional posts on the asset in the window and a ≥ 60 % consistent side; excerpt = the first ≤ 200 characters of one post (original language), quote it with the source_url — the full statement is provided under an Integration agreement only — contact sales@cryptoquant.com. bullish_pct / bearish_pct are post shares (neutral excluded); the Analyst Consensus Index is on /api/v1/consensus.",
"page_url": "https://consensus.cryptoquant.com/consensus/btc?utm_source=api&utm_medium=gpt-action&utm_campaign=analyst-views",
"top_analysts_url": "https://consensus.cryptoquant.com/analysts?asset=btc&sort=accuracy&utm_source=api&utm_medium=gpt-action&utm_campaign=analyst-views",
"methodology_url": "https://consensus.cryptoquant.com/methodology?utm_source=api&utm_medium=gpt-action&utm_campaign=analyst-views",
"cite_as": "Data by CryptoQuant Consensus — https://consensus.cryptoquant.com/consensus/btc",
"data_by": "Data by CryptoQuant Consensus",
"as_of": "2026-10-06T07:48:25.102Z"
}{
"error": "Unknown asset",
"code": "UNKNOWN_ASSET",
"message": "\"DOGE2\" is not a registered asset. Use a ticker, route key or name from https://consensus.cryptoquant.com/api/v1/assets (symbol / key / name / aliases, case-insensitive). Market aggregates are not assets.",
"docs_url": "https://consensus.cryptoquant.com/docs/api#errors",
"param": "asset"
}{
"error": "Rate limit exceeded",
"code": "RATE_LIMIT_EXCEEDED",
"message": "Public endpoint: per-IP limit reached. Wait 37 s (Retry-After), or use an API key for higher limits.",
"docs_url": "https://consensus.cryptoquant.com/docs/api#errors",
"retry_after": 37
}{
"error": "Internal server error",
"code": "INTERNAL_ERROR",
"message": "Something went wrong on our side. Retry once after a few seconds; if it persists, report the URL to support.",
"docs_url": "https://consensus.cryptoquant.com/docs/api#errors"
}Analyst Views
What analysts are saying about an asset — narratives grouped by thesis and one quotable excerpt per analyst, with the bull / bear case and the post split. Public, no API key.
curl -X GET "https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d"fetch("https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d")
.then(response => response.json())
.then(data => console.log(data))require('axios')
.get("https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d")
.then(response => console.log(response))require 'net/http'
uri = URI("https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d")
res = Net::HTTP.get_response(uri)
puts res.bodyimport requests
url = "https://consensus.cryptoquant.com/api/v1/analyst-views?asset=BTC&window=30d"
print(requests.get(url).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://consensus.cryptoquant.com/api/v1/analyst-views",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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/analyst-views"
req, _ := http.NewRequest("GET", url, nil)
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/analyst-views")
.asString();{
"asset": "BTC",
"asset_name": "Bitcoin",
"window": "30d",
"bullish_posts": 105,
"bearish_posts": 62,
"bullish_pct": 63,
"bearish_pct": 37,
"bull_case": "Regulatory wins and dovish data fuel breakout",
"bear_case": "Macro pressure and resistance threaten deeper pullback",
"narratives": [
{
"theme": "EXCHANGE HACK",
"headline": "Bitget drained for $387.5M as DPRK hackers spoof backend approvals",
"stance": "bearish",
"analyst_count": 8,
"post_count": 8,
"summary": "Bitget's breach was first reported at $351.6M and later revised up by about $35M to $387.5M. Attackers used spoofed transaction approvals from a compromised backend rather than stolen keys. The $464M User Protection Fund covers the loss but shrinks to about $76.5M."
}
],
"analyst_views": [
{
"handle": "CryptoMichNL",
"name": "Michael van de Poppe",
"stance": "bullish",
"thesis": "BTC run not over; momentum into October targets ~$90,000 resistance, followed by consolidation and a midterm-driven correction that is a buying opportunity before a new all-time high",
"excerpt": "What to expect from #Bitcoin?\n\nHonestly, I don't think we're done with the run. Sure, we can have some red weeks in between, but I'm eyeing the $90,000 area as the coming resistance to be, after…",
"source_url": "https://x.com/CryptoMichNL/status/2103900910501990879",
"source_type": "tweet",
"published_at": "2026-09-26T17:34:00+00:00",
"post_count": 14,
"consistency_pct": 100,
"profile_url": "https://consensus.cryptoquant.com/analyst/CryptoMichNL?utm_source=api&utm_medium=gpt-action&utm_campaign=analyst-views"
}
],
"analyst_views_total": 14,
"note": "analyst_views = analysts with ≥ 3 directional posts on the asset in the window and a ≥ 60 % consistent side; excerpt = the first ≤ 200 characters of one post (original language), quote it with the source_url — the full statement is provided under an Integration agreement only — contact sales@cryptoquant.com. bullish_pct / bearish_pct are post shares (neutral excluded); the Analyst Consensus Index is on /api/v1/consensus.",
"page_url": "https://consensus.cryptoquant.com/consensus/btc?utm_source=api&utm_medium=gpt-action&utm_campaign=analyst-views",
"top_analysts_url": "https://consensus.cryptoquant.com/analysts?asset=btc&sort=accuracy&utm_source=api&utm_medium=gpt-action&utm_campaign=analyst-views",
"methodology_url": "https://consensus.cryptoquant.com/methodology?utm_source=api&utm_medium=gpt-action&utm_campaign=analyst-views",
"cite_as": "Data by CryptoQuant Consensus — https://consensus.cryptoquant.com/consensus/btc",
"data_by": "Data by CryptoQuant Consensus",
"as_of": "2026-10-06T07:48:25.102Z"
}{
"error": "Unknown asset",
"code": "UNKNOWN_ASSET",
"message": "\"DOGE2\" is not a registered asset. Use a ticker, route key or name from https://consensus.cryptoquant.com/api/v1/assets (symbol / key / name / aliases, case-insensitive). Market aggregates are not assets.",
"docs_url": "https://consensus.cryptoquant.com/docs/api#errors",
"param": "asset"
}{
"error": "Rate limit exceeded",
"code": "RATE_LIMIT_EXCEEDED",
"message": "Public endpoint: per-IP limit reached. Wait 37 s (Retry-After), or use an API key for higher limits.",
"docs_url": "https://consensus.cryptoquant.com/docs/api#errors",
"retry_after": 37
}{
"error": "Internal server error",
"code": "INTERNAL_ERROR",
"message": "Something went wrong on our side. Retry once after a few seconds; if it persists, report the URL to support.",
"docs_url": "https://consensus.cryptoquant.com/docs/api#errors"
}What it returns
/analyst-views?asset=&window=7d|30d — what analysts are saying:
narratives— viewpoints grouped by thesis with analyst counts.analyst_views— one quotable excerpt per analyst (the first ≤ 200 characters of one post, original language) withsource_urlandprofile_url.- The bull / bear case and the post split (
bullish_pct/bearish_pctare post shares, neutral excluded).
analyst_views lists analysts with ≥ 3 directional posts on the asset in the window and a
≥ 60 % consistent side. The Analyst Consensus Index itself is on
/consensus.
Access
Public — no API key. 60 requests / minute per IP, cached 5 minutes.Notes
- Neither this endpoint nor
/callscarries the full post text — the original statement is provided under an Integration agreement only, per API key, on/consensus/breakdown(contact sales@cryptoquant.com). - Both carry
page_url,cite_asanddata_by— show the attribution with the numbers;via=tags the links.
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.
Window of the posts considered.
7d, 30d 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
Narratives and per-analyst views
7d, 30d Show child attributes
Show child attributes
Most active first, at most 12.
Show child attributes
Show child attributes
How many analysts qualified (the page lists them all).
x >= 0The 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).
Directional posts in the window, bullish (post share — the index is on /consensus).
x >= 0x >= 00 <= x <= 1000 <= x <= 100What the fields mean — quote the caveat with the numbers.
The asset's analysts ranked by accuracy (site page).
How the numbers are made.