Get Topic Classes
curl --request GET \
--url https://api.messari.io/topics/v1/classes \
--header 'x-messari-api-key: <api-key>'import requests
url = "https://api.messari.io/topics/v1/classes"
headers = {"x-messari-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-messari-api-key': '<api-key>'}};
fetch('https://api.messari.io/topics/v1/classes', 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.messari.io/topics/v1/classes",
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-messari-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.messari.io/topics/v1/classes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-messari-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.messari.io/topics/v1/classes")
.header("x-messari-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.messari.io/topics/v1/classes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-messari-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"error": null,
"data": [
"Treasury Management",
"Treasury Expense",
"Project Team Funding",
"Incentives Program",
"Discontinued Product",
"Project Strategy",
"Partnership",
"Token Swap or Migration",
"Network Upgrade",
"Governance Update",
"Project Announcements",
"Network Deployment",
"Airdrop",
"Feature Release",
"Network Launch",
"Token Listing",
"Security and Hacks",
"Protocol Exploit",
"Vulnerability Disclosure",
"Centralized Exchange Loss of Funds",
"Funding",
"Legal and Regulatory",
"Network Congestion",
"Blockchain Halt",
"Node Outage",
"Bug Disclosure",
"Chain Split",
"Community Update",
"Macro Commentary",
"Price Analysis",
"Irrelevant Content"
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Topics API
Get Topic Classes
Retrieve a list of all available topic classes. Topic classes categorize topics into themes like ‘Partnership’, ‘Security and Hacks’, ‘Token Listing’, etc.
GET
/
topics
/
v1
/
classes
Get Topic Classes
curl --request GET \
--url https://api.messari.io/topics/v1/classes \
--header 'x-messari-api-key: <api-key>'import requests
url = "https://api.messari.io/topics/v1/classes"
headers = {"x-messari-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-messari-api-key': '<api-key>'}};
fetch('https://api.messari.io/topics/v1/classes', 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.messari.io/topics/v1/classes",
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-messari-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.messari.io/topics/v1/classes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-messari-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.messari.io/topics/v1/classes")
.header("x-messari-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.messari.io/topics/v1/classes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-messari-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"error": null,
"data": [
"Treasury Management",
"Treasury Expense",
"Project Team Funding",
"Incentives Program",
"Discontinued Product",
"Project Strategy",
"Partnership",
"Token Swap or Migration",
"Network Upgrade",
"Governance Update",
"Project Announcements",
"Network Deployment",
"Airdrop",
"Feature Release",
"Network Launch",
"Token Listing",
"Security and Hacks",
"Protocol Exploit",
"Vulnerability Disclosure",
"Centralized Exchange Loss of Funds",
"Funding",
"Legal and Regulatory",
"Network Congestion",
"Blockchain Halt",
"Node Outage",
"Bug Disclosure",
"Chain Split",
"Community Update",
"Macro Commentary",
"Price Analysis",
"Irrelevant Content"
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Overview
This endpoint returns all available topic classification categories. Topic classes help organize and filter topics into meaningful themes like partnerships, security events, token listings, and more.Response Structure
The response includes an array of topic class names as strings. Each class represents a category that topics can be classified into.Topic Class Categories
Topics are classified into the following main categories:Project Development
- Partnership: Collaborations and strategic partnerships
- Feature Release: New feature launches and product updates
- Network Upgrade: Protocol upgrades and improvements
- Network Launch: New blockchain or network launches
- Network Deployment: Deployment to new networks or chains
- Project Announcements: General project updates and announcements
- Project Strategy: Strategic direction and planning announcements
Token & Tokenomics
- Token Listing: New exchange listings
- Airdrop: Token airdrops and distributions
- Token Swap or Migration: Token migrations and swaps
- Treasury Management: Treasury operations and management
- Treasury Expense: Treasury spending and allocations
- Project Team Funding: Team funding rounds and allocations
Security & Operations
- Security and Hacks: General security concerns
- Protocol Exploit: Smart contract exploits and hacks
- Vulnerability Disclosure: Security vulnerability announcements
- Centralized Exchange Loss of Funds: Exchange-related security incidents
- Bug Disclosure: Bug reports and disclosures
- Network Congestion: Network performance issues
- Blockchain Halt: Chain halts and downtime
- Node Outage: Node and infrastructure outages
- Chain Split: Blockchain forks and splits
Business & Governance
- Funding: Fundraising rounds and investments
- Legal and Regulatory: Regulatory news and legal developments
- Governance Update: DAO and governance proposals
- Incentives Program: Reward programs and incentive structures
- Community Update: Community-driven updates and news
Operations & Events
- Discontinued Product: Product sunsets and deprecations
Noise/Informational (typically filtered by default)
- Macro Commentary: General market commentary
- Price Analysis: Price predictions and technical analysis
- Irrelevant Content: Off-topic or non-substantive content
Usage Example
curl -X GET "https://api.messari.io/topics/v1/classes" \
-H "x-messari-api-key: YOUR_API_KEY"
Use Cases
- Build Filter UIs: Create topic class selectors in your application
- Understand Classification: Learn what categories are available for filtering
- Dynamic Query Building: Programmatically construct filtered topic queries
- Documentation: Reference available classes when using other Topics API endpoints
Next Steps
After retrieving the topic classes, use them to filter results in the Get Current Topics endpoint by passing them via theclasses query parameter.Authorizations
API key for authentication. Get your key at https://messari.io/account/api

