curl -X GET "https://consensus.cryptoquant.com/api/v1/consensus/breakdown?asset=BTC&window=3d" \
-H "X-API-Key: <YOUR_API_KEY>"fetch("https://consensus.cryptoquant.com/api/v1/consensus/breakdown?asset=BTC&window=3d", { 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/breakdown?asset=BTC&window=3d", { headers: { 'X-API-Key': '<YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://consensus.cryptoquant.com/api/v1/consensus/breakdown?asset=BTC&window=3d")
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/breakdown?asset=BTC&window=3d"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://consensus.cryptoquant.com/api/v1/consensus/breakdown",
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/breakdown"
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/breakdown")
.header("X-API-Key", "<api-key>")
.asString();{
"asset": {
"symbol": "BTC",
"name": "Bitcoin"
},
"updated_at": "2026-10-06T03:34:55+00:00",
"window": "3d",
"lang": "en",
"source_text": "statement",
"note": "sources[].statement = the original post title / text (this key holds Integration raw-text access). Viewpoint title / thesis, bull / bear case, index and labels are the same on every plan.",
"summary": {
"total_opinions": 56,
"bullish_opinions": 46,
"bearish_opinions": 10,
"bullish_pct": 82,
"bearish_pct": 18,
"consensus_index": 49.54,
"z_score": 1.12
},
"overall": {
"bull_case": {
"title": "Regulatory wins and dovish data fuel breakout"
},
"bear_case": {
"title": "Macro pressure and resistance threaten deeper pullback"
}
},
"analyst_consensus": {
"bullish": [
{
"id": "a3f1c2d4-7b8e-4a90-9c1d-2e3f4a5b6c7d",
"stance": "bullish",
"analyst_count": 2,
"title": "BTC's first weekly close above the 50WMA in 45 weeks: bear market lows look in",
"thesis": "50WMA reclaim",
"analysts": [
{
"handle": "CryptoMichNL",
"display_name": "Michael van de Poppe",
"avatar_url": "https://pbs.twimg.com/profile_images/1890745133325676544/kcXk6nZx_400x400.jpg",
"x_url": "https://x.com/CryptoMichNL",
"profile_url": null
},
{
"handle": "the_daily_digits",
"display_name": "The Daily Digits",
"avatar_url": null,
"x_url": null,
"profile_url": "https://cryptoquant.com/profile/u/QKJizHT"
}
],
"sources": [
{
"analyst_handle": "CryptoMichNL",
"statement": "What to expect from #Bitcoin? Honestly, I don't think we're done with the run.",
"url": "https://x.com/CryptoMichNL/status/2103900910501990879",
"source_type": "tweet",
"published_at": "2026-09-26T17:34:00+00:00"
},
{
"analyst_handle": "the_daily_digits",
"statement": "$2.1B sits on $95K BTC calls for Oct 30, Deribit's biggest strike.",
"url": "https://cryptoquant.com/insights/quicktake/6ac453b68fa8e62507c0bf1b",
"source_type": "quicktake",
"published_at": "2026-10-06T01:49:42+00:00"
}
]
}
],
"bearish": []
}
}Consensus Breakdown
Structured per-asset analyst-consensus breakdown for a time window — summary stats, bull / bear case, viewpoints grouped by thesis with their analysts and source posts.
curl -X GET "https://consensus.cryptoquant.com/api/v1/consensus/breakdown?asset=BTC&window=3d" \
-H "X-API-Key: <YOUR_API_KEY>"fetch("https://consensus.cryptoquant.com/api/v1/consensus/breakdown?asset=BTC&window=3d", { 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/breakdown?asset=BTC&window=3d", { headers: { 'X-API-Key': '<YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://consensus.cryptoquant.com/api/v1/consensus/breakdown?asset=BTC&window=3d")
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/breakdown?asset=BTC&window=3d"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://consensus.cryptoquant.com/api/v1/consensus/breakdown",
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/breakdown"
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/breakdown")
.header("X-API-Key", "<api-key>")
.asString();{
"asset": {
"symbol": "BTC",
"name": "Bitcoin"
},
"updated_at": "2026-10-06T03:34:55+00:00",
"window": "3d",
"lang": "en",
"source_text": "statement",
"note": "sources[].statement = the original post title / text (this key holds Integration raw-text access). Viewpoint title / thesis, bull / bear case, index and labels are the same on every plan.",
"summary": {
"total_opinions": 56,
"bullish_opinions": 46,
"bearish_opinions": 10,
"bullish_pct": 82,
"bearish_pct": 18,
"consensus_index": 49.54,
"z_score": 1.12
},
"overall": {
"bull_case": {
"title": "Regulatory wins and dovish data fuel breakout"
},
"bear_case": {
"title": "Macro pressure and resistance threaten deeper pullback"
}
},
"analyst_consensus": {
"bullish": [
{
"id": "a3f1c2d4-7b8e-4a90-9c1d-2e3f4a5b6c7d",
"stance": "bullish",
"analyst_count": 2,
"title": "BTC's first weekly close above the 50WMA in 45 weeks: bear market lows look in",
"thesis": "50WMA reclaim",
"analysts": [
{
"handle": "CryptoMichNL",
"display_name": "Michael van de Poppe",
"avatar_url": "https://pbs.twimg.com/profile_images/1890745133325676544/kcXk6nZx_400x400.jpg",
"x_url": "https://x.com/CryptoMichNL",
"profile_url": null
},
{
"handle": "the_daily_digits",
"display_name": "The Daily Digits",
"avatar_url": null,
"x_url": null,
"profile_url": "https://cryptoquant.com/profile/u/QKJizHT"
}
],
"sources": [
{
"analyst_handle": "CryptoMichNL",
"statement": "What to expect from #Bitcoin? Honestly, I don't think we're done with the run.",
"url": "https://x.com/CryptoMichNL/status/2103900910501990879",
"source_type": "tweet",
"published_at": "2026-09-26T17:34:00+00:00"
},
{
"analyst_handle": "the_daily_digits",
"statement": "$2.1B sits on $95K BTC calls for Oct 30, Deribit's biggest strike.",
"url": "https://cryptoquant.com/insights/quicktake/6ac453b68fa8e62507c0bf1b",
"source_type": "quicktake",
"published_at": "2026-10-06T01:49:42+00:00"
}
]
}
],
"bearish": []
}
}What it returns
Structured per-asset analyst-consensus breakdown for a time window. A single call returns everything needed to render a consensus view:- Aggregated stats →
summary(opinion counts, bullish / bearish %,consensus_index,z_score) - Bull / bear case summaries →
overall.bull_case/overall.bear_case - Viewpoints grouped by thesis →
analyst_consensus.bullish[]/bearish[], each with its analysts and the underlying source posts - Source text per key →
source_text+note: a key cleared under an Integration agreement (per-key clearance, not a plan) receivessources[].statement(the original post); every other key — Free, Premium, Enterprise, admin — receivessources[].excerpt(first ≤ 200 characters)url. Viewpoint titles, theses, the bull / bear case, the index and the labels are identical on every plan. See Raw source text.
Access
API key, any plan. Raw source text on Integration keys only.Parameters
| Name | Default | Description |
|---|---|---|
asset | BTC | Any registered asset (see /assets). |
window | 3d | One of 1d, 3d, 7d, 30d. |
lang | en | Output language of the generated text (summaries, viewpoint titles): en, ko, zh, ja, es, pt, ru, hi, de, fr, tr, vi, id, it, th, pl, nl, uk. Source posts stay in their original language; a missing translation falls back to English. |
source_text | what the key may receive | statement or excerpt. statement on a key without Integration raw access → 403 RAW_ACCESS_REQUIRED (contact sales@cryptoquant.com); excerpt is always allowed. |
Field notes
sources[].statement(original post title / text) is provided under an Integration agreement only — a per-key clearance, never a plan: Premium, Enterprise and admin-owned keys without it getsources[].excerpt— the first ≤ 200 characters of the original, cut on a sentence / word boundary with an ellipsis, original language (never a translation).source_textnames the field you received;notesays the same in a sentence. Integration use that needs the original source text: contact sales@cryptoquant.com.sources[].urlalways links the underlying post;source_typeis one of thesource_typevalues (tweet= X,quicktake= CryptoQuant, …).- An analyst’s
x_urlandprofile_urlare each nullable — CryptoQuant-native authors have no X link, and some have no public profile page;avatar_urlmay benullor a generated placeholder. consensus_indexandz_scoreare the latest daily index of the asset (they do not vary bywindow);nullfor an asset that has no index series yet.updated_atis the timestamp of the most recent source post in the response — use it to detect freshness for the selected window.
Response on a key with Integration raw access
source_text: "statement" — everything else identical to the excerpt form; only the sources[]
items change shape:
[
{
"analyst_handle": "CryptoMichNL",
"statement": "What to expect from #Bitcoin? Honestly, I don't think we're done with the run.",
"url": "https://x.com/CryptoMichNL/status/2103900910501990879",
"source_type": "tweet",
"published_at": "2026-09-26T17:34:00+00:00"
},
{
"analyst_handle": "the_daily_digits",
"statement": "$2.1B sits on $95K BTC calls for Oct 30, Deribit's biggest strike.",
"url": "https://cryptoquant.com/insights/quicktake/6ac453b68fa8e62507c0bf1b",
"source_type": "quicktake",
"published_at": "2026-10-06T01:49:42+00:00"
}
]
Authorizations
Provisioned with the CryptoQuant Premium plan or an Enterprise agreement (no self-serve). Keys start with unbias_live_.
Query Parameters
Asset SYMBOL, upper-cased by the server (btc → BTC); NOT resolved through the registry — route keys / names are not accepted here, and an unknown symbol comes back as an empty breakdown (no viewpoints, null index), not a 400. Use the symbol from GET /assets.
Window of the opinion counts and viewpoints.
1d, 3d, 7d, 30d Output language of the generated text (bull / bear case, viewpoint titles); a missing translation falls back to English.
en, ko, zh, ja, es, pt, ru, hi, de, fr, tr, vi, id, it, th, pl, nl, uk Which source-text field to receive. Omitted = what the key may receive (statement on a key with Integration raw access, excerpt otherwise). statement on a key without the clearance → 403 RAW_ACCESS_REQUIRED (contact sales@cryptoquant.com); excerpt is always allowed.
statement, excerpt Response
Breakdown snapshot — source_text says which source field the key received
Show child attributes
Show child attributes
Most recent source post in the response (now when none).
1d, 3d, 7d, 30d en, ko, zh, ja, es, pt, ru, hi, de, fr, tr, vi, id, it, th, pl, nl, uk Which source-text field this key received: statement (original statement (full post title / text) — Integration agreement keys only (per-key raw_access clearance, not a plan); contact sales@cryptoquant.com) or excerpt (excerpt only: the first ≤ 200 characters of the original post (sentence / word boundary, original language) + the source url).
statement, excerpt One sentence saying what sources[] carries on this plan — show it with the sources.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes