curl --request GET \
--url https://api.blockworks.com/query/tabular/research-reports \
--header 'X-Blockworks-API-Key: <api-key>'import requests
url = "https://api.blockworks.com/query/tabular/research-reports"
headers = {"X-Blockworks-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Blockworks-API-Key': '<api-key>'}};
fetch('https://api.blockworks.com/query/tabular/research-reports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.blockworks.com/query/tabular/research-reports",
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-Blockworks-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://api.blockworks.com/query/tabular/research-reports"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Blockworks-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://api.blockworks.com/query/tabular/research-reports")
.header("X-Blockworks-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blockworks.com/query/tabular/research-reports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Blockworks-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"assetIDs": [
"<string>"
],
"assets": [
{}
],
"authorNames": [
"<string>"
],
"authors": [
{}
],
"category": "<string>",
"content": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"hook": "<string>",
"previewImageURL": "<string>",
"publishDate": "2023-11-07T05:31:56Z",
"readingTimeInMinutes": 123,
"reportID": "<string>",
"reportType": "<string>",
"slug": "<string>",
"subscriptionTier": "<string>",
"summary": "<string>",
"tagNames": [
"<string>"
],
"tags": [
{}
],
"title": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"metadata": {
"totalPages": 123,
"totalRows": 123
},
"error": "<string>"
}{
"data": null,
"error": "unknown query parameter \"reportID\""
}{
"data": null,
"error": "this model requires authentication"
}{
"data": null,
"error": "this model requires the \"news_research_unified\" permission"
}{
"data": null,
"error": "tabular model \"unknown-model\" not found"
}List Research Reports
One row per published research report, keyed by reportID: title, slug, hook, summary, the full markdown body, publish and update times, reading time, subscription tier, and the authors, tags and assets it covers. Covers every kind of published content, so filter on reportType or category to narrow.
curl --request GET \
--url https://api.blockworks.com/query/tabular/research-reports \
--header 'X-Blockworks-API-Key: <api-key>'import requests
url = "https://api.blockworks.com/query/tabular/research-reports"
headers = {"X-Blockworks-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Blockworks-API-Key': '<api-key>'}};
fetch('https://api.blockworks.com/query/tabular/research-reports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.blockworks.com/query/tabular/research-reports",
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-Blockworks-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://api.blockworks.com/query/tabular/research-reports"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Blockworks-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://api.blockworks.com/query/tabular/research-reports")
.header("X-Blockworks-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blockworks.com/query/tabular/research-reports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Blockworks-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"assetIDs": [
"<string>"
],
"assets": [
{}
],
"authorNames": [
"<string>"
],
"authors": [
{}
],
"category": "<string>",
"content": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"hook": "<string>",
"previewImageURL": "<string>",
"publishDate": "2023-11-07T05:31:56Z",
"readingTimeInMinutes": 123,
"reportID": "<string>",
"reportType": "<string>",
"slug": "<string>",
"subscriptionTier": "<string>",
"summary": "<string>",
"tagNames": [
"<string>"
],
"tags": [
{}
],
"title": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"metadata": {
"totalPages": 123,
"totalRows": 123
},
"error": "<string>"
}{
"data": null,
"error": "unknown query parameter \"reportID\""
}{
"data": null,
"error": "this model requires authentication"
}{
"data": null,
"error": "this model requires the \"news_research_unified\" permission"
}{
"data": null,
"error": "tabular model \"unknown-model\" not found"
}Authorizations
API key sent in the X-Blockworks-API-Key header; x-messari-api-key is accepted for existing integrations. The catalog endpoints and models on the public access tier need no key.
Query Parameters
Report ID equals.
Report ID is one of (comma-separated).
Title equals.
Title is one of (comma-separated).
Title contains (case-insensitive substring).
Slug equals.
Slug is one of (comma-separated).
Slug contains (case-insensitive substring).
Publish Date equals.
Publish Date is greater than.
Publish Date is greater than or equal to.
Publish Date is less than.
Publish Date is less than or equal to.
Created At is greater than.
Created At is greater than or equal to.
Created At is less than.
Created At is less than or equal to.
Updated At is greater than.
Updated At is greater than or equal to.
Updated At is less than.
Updated At is less than or equal to.
Reading Time In Minutes is greater than.
Reading Time In Minutes is greater than or equal to.
Reading Time In Minutes is less than.
Reading Time In Minutes is less than or equal to.
Subscription Tier equals.
Subscription Tier is one of (comma-separated).
Subscription Tier is not one of (comma-separated).
Report Type equals.
Report Type is one of (comma-separated).
Report Type is not one of (comma-separated).
Category equals.
Category is one of (comma-separated).
Category is not one of (comma-separated).
Asset IDs array includes.
Asset IDs array does not include.
Asset IDs array includes any of (comma-separated).
Asset IDs array includes none of (comma-separated).
Author Names array includes.
Author Names array does not include.
Author Names array includes any of (comma-separated).
Author Names array includes none of (comma-separated).
Tag Names array includes.
Tag Names array does not include.
Tag Names array includes any of (comma-separated).
Tag Names array includes none of (comma-separated).
Field to sort by; defaults to the model's default sort column.
title, publishDate, createdAt, updatedAt, readingTimeInMinutes Sort direction.
asc, desc 1-based page number.
Rows per page (max 1000, default 100).
Comma-separated fields to return; defaults to all fields.
reportID, title, slug, hook, summary, content, publishDate, createdAt, updatedAt, readingTimeInMinutes, subscriptionTier, reportType, category, previewImageURL, assetIDs, assets, authorNames, authors, tagNames, tags Response format, overriding the Accept header: json (default), csv, or jsonl (NDJSON). csv and jsonl return the rows as a downloadable file.
json, csv, jsonl