curl --request GET \
--url https://api.blockworks.com/query/tabular/tokens \
--header 'X-Blockworks-API-Key: <api-key>'import requests
url = "https://api.blockworks.com/query/tabular/tokens"
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/tokens', 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/tokens",
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/tokens"
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/tokens")
.header("X-Blockworks-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blockworks.com/query/tabular/tokens")
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": [
{
"bridgeID": "<bridgeID>",
"category": "<category>",
"chain": "<chain>",
"id": "<id>",
"issuerID": "<issuerID>",
"launchpadID": "<launchpadID>",
"name": "<name>",
"networkID": "<networkID>",
"networkSlug": "<networkSlug>",
"sector": "<sector>",
"slug": "<slug>",
"subsector": "<subsector>",
"symbol": "<symbol>",
"tokenAddress": "<tokenAddress>",
"tokenVersion": "<tokenVersion>",
"underlyingAssetID": "<underlyingAssetID>",
"underlyingTokenSlug": "<underlyingTokenSlug>"
}
],
"error": null,
"metadata": {
"totalPages": 1,
"totalRows": 1
}
}{
"data": null,
"error": "unknown query parameter \"id\""
}{
"data": null,
"error": "this model requires authentication"
}{
"data": null,
"error": "this model requires the \"assets-dataset\" permission; see https://app.blockworks.com/account/api for the public API permissions you hold"
}{
"data": null,
"error": "tabular model \"unknown-model\" not found"
}List Tokens
One row per token contract per chain from the Blockworks Research token classification: chain and contract address, symbol, category, sector and subsector, the issuer, and for bridged or wrapped tokens the token and asset they represent. Deployments of one token on several chains share a slug.
curl --request GET \
--url https://api.blockworks.com/query/tabular/tokens \
--header 'X-Blockworks-API-Key: <api-key>'import requests
url = "https://api.blockworks.com/query/tabular/tokens"
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/tokens', 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/tokens",
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/tokens"
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/tokens")
.header("X-Blockworks-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blockworks.com/query/tabular/tokens")
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": [
{
"bridgeID": "<bridgeID>",
"category": "<category>",
"chain": "<chain>",
"id": "<id>",
"issuerID": "<issuerID>",
"launchpadID": "<launchpadID>",
"name": "<name>",
"networkID": "<networkID>",
"networkSlug": "<networkSlug>",
"sector": "<sector>",
"slug": "<slug>",
"subsector": "<subsector>",
"symbol": "<symbol>",
"tokenAddress": "<tokenAddress>",
"tokenVersion": "<tokenVersion>",
"underlyingAssetID": "<underlyingAssetID>",
"underlyingTokenSlug": "<underlyingTokenSlug>"
}
],
"error": null,
"metadata": {
"totalPages": 1,
"totalRows": 1
}
}{
"data": null,
"error": "unknown query parameter \"id\""
}{
"data": null,
"error": "this model requires authentication"
}{
"data": null,
"error": "this model requires the \"assets-dataset\" permission; see https://app.blockworks.com/account/api for the public API permissions you hold"
}{
"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 open to everyone need no key.
Query Parameters
Token ID equals.
Token ID is one of (comma-separated).
Name equals.
Name is one of (comma-separated).
Name contains (case-insensitive substring).
Slug equals.
Slug is one of (comma-separated).
Chain equals.
Chain is one of (comma-separated).
Token Address equals.
Token Address is one of (comma-separated).
Symbol equals.
Symbol is one of (comma-separated).
Symbol contains (case-insensitive substring).
Category equals.
Category is one of (comma-separated).
Sector equals.
Sector is one of (comma-separated).
Subsector equals.
Subsector is one of (comma-separated).
Issuer ID equals.
Issuer ID is one of (comma-separated).
Underlying Token Slug equals.
Underlying Token Slug is one of (comma-separated).
Underlying Asset ID equals.
Underlying Asset ID is one of (comma-separated).
Bridge ID equals.
Bridge ID is one of (comma-separated).
Token Version equals.
Token Version is one of (comma-separated).
Launchpad ID equals.
Launchpad ID is one of (comma-separated).
Network ID equals.
Network ID is one of (comma-separated).
Network Slug equals.
Network Slug is one of (comma-separated).
Field to sort by; defaults to the model's default sort column.
name, slug, chain, symbol Sort direction.
asc, desc 1-based page number.
Rows per page (max 1000, default 100).
Comma-separated fields to return; defaults to all fields.
id, name, slug, chain, tokenAddress, symbol, category, sector, subsector, issuerID, underlyingTokenSlug, underlyingAssetID, bridgeID, tokenVersion, launchpadID, networkID, networkSlug 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