Get TCG Platform Time Series
curl --request GET \
--url https://api.messari.io/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity} \
--header 'X-Messari-API-Key: <api-key>'import requests
url = "https://api.messari.io/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}"
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/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}', 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/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}",
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/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}"
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/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}")
.header("X-Messari-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.messari.io/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}")
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": {
"series": [
{
"id": "courtyard_polygon",
"platform": "courtyard",
"chain": "polygon",
"points": [
[
1785542400,
5019686.24,
1043157.63,
0,
3976528.61,
null,
5206374.79,
9182903.4,
5020356.24,
1616203.1600000001,
7507,
8157,
15664,
186688.55,
186688.55,
0,
3248,
751,
6600,
null,
145724,
8423839.32
],
[
1785628800,
3996765.92,
804410.55,
0,
3192355.37,
null,
4160657.81,
7353013.18,
3996902.92,
1316540.4100000001,
7965,
5942,
13907,
163891.89,
163891.89,
0,
3226,
727,
null,
null,
125453.99999999999,
6677128.43
],
[
1785715200,
4120334.81,
917821.64,
0,
3202513.17,
null,
4324841.69,
7527354.86,
4120384.81,
1217061.35,
9611,
5588,
15199,
204506.88,
204506.88,
0,
2695,
670,
11500,
null,
122811.99999999999,
7023658.27
],
[
1785801600,
3997818.01,
807187.42,
0,
3190630.59,
null,
4190233.36,
7380863.949999999,
3997853.01,
1137967.6399999997,
11246,
5724,
16970,
192415.35,
192415.35,
0,
2726,
619,
21500,
null,
122454,
6857703.38
],
[
1785888000,
4079926.22,
930139.43,
0,
3149786.79,
null,
4287724,
7437510.79,
4080420.22,
1234427.62,
5274,
5329,
10603,
207797.78,
207797.78,
0,
2512,
653,
19000,
null,
108045.99999999999,
6925918.82
]
]
}
]
},
"metadata": {
"pointSchemas": [
{
"name": "Timestamp",
"slug": "time",
"description": "Timestamp of the data point.",
"is_timestamp": true
},
{
"name": "Gross Revenue USD",
"slug": "grossRevenueUsd",
"description": "Gross platform revenue in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Net Revenue USD",
"slug": "netRevenueUsd",
"description": "Net platform revenue in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Misc Revenue USD",
"slug": "miscRevenueUsd",
"description": "Miscellaneous revenue in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Buyback Expense USD",
"slug": "buybackExpenseUsd",
"description": "Card buyback expense in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Referral Expense USD",
"slug": "referralExpenseUsd",
"description": "Referral expense in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "GMV USD",
"slug": "gmvUsd",
"description": "Gross merchandise value in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Volume incl. Buybacks USD",
"slug": "volumeInclBuybackUsd",
"description": "Volume including platform buybacks in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Gacha Spend USD",
"slug": "gachaSpendUsd",
"description": "Net gacha (pack-opening) spend in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Credit Card Spend USD",
"slug": "creditCardSpendUsd",
"description": "Credit-card spend in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "New DAU",
"slug": "dauNew",
"description": "New daily active users. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Recurring DAU",
"slug": "dauRecurring",
"description": "Recurring daily active users. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Total DAU",
"slug": "dauTotal",
"description": "Total daily active users. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Marketplace Volume USD",
"slug": "marketplaceVolumeUsd",
"description": "Secondary-marketplace volume in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Organic Volume USD",
"slug": "organicVolumeUsd",
"description": "Marketplace volume excluding buybacks in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Buyback Volume USD",
"slug": "buybackVolumeUsd",
"description": "Marketplace buyback volume in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Sales Count",
"slug": "salesCount",
"description": "Marketplace sales count. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Unique Buyers",
"slug": "uniqueBuyers",
"description": "Unique marketplace buyers. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Top Sale USD",
"slug": "topSaleUsd",
"description": "Largest single sale of the day in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Marketplace Fees USD",
"slug": "marketplaceFeesUsd",
"description": "Marketplace fees in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Packs Opened",
"slug": "packsOpened",
"description": "Gacha packs opened, summed across tiers. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Gross Gacha Spend USD",
"slug": "grossGachaSpendUsd",
"description": "Gross gacha spend, summed across tiers, in USD. Sourced from Blockworks Research.",
"is_timestamp": false
}
],
"granularity": "1d",
"seriesCount": 1
}
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}TCG
Get TCG Platform Time Series
Returns one TCG platform’s history, one series per chain it runs on. Nothing is aggregated across a platform’s chains: the daily-active-user and unique-buyer counts overlap between chains, so a cross-chain total would overstate them. Every series carries its platform and chain alongside the composite id, so no consumer has to split the id. Only the 1d granularity is available. A platform slug the TCG listing does not serve returns 404.
GET
/
metrics
/
v2
/
protocols
/
tcg
/
{platformIdentifier}
/
metrics
/
overview
/
time-series
/
{granularity}
Get TCG Platform Time Series
curl --request GET \
--url https://api.messari.io/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity} \
--header 'X-Messari-API-Key: <api-key>'import requests
url = "https://api.messari.io/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}"
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/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}', 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/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}",
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/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}"
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/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}")
.header("X-Messari-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.messari.io/metrics/v2/protocols/tcg/{platformIdentifier}/metrics/overview/time-series/{granularity}")
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": {
"series": [
{
"id": "courtyard_polygon",
"platform": "courtyard",
"chain": "polygon",
"points": [
[
1785542400,
5019686.24,
1043157.63,
0,
3976528.61,
null,
5206374.79,
9182903.4,
5020356.24,
1616203.1600000001,
7507,
8157,
15664,
186688.55,
186688.55,
0,
3248,
751,
6600,
null,
145724,
8423839.32
],
[
1785628800,
3996765.92,
804410.55,
0,
3192355.37,
null,
4160657.81,
7353013.18,
3996902.92,
1316540.4100000001,
7965,
5942,
13907,
163891.89,
163891.89,
0,
3226,
727,
null,
null,
125453.99999999999,
6677128.43
],
[
1785715200,
4120334.81,
917821.64,
0,
3202513.17,
null,
4324841.69,
7527354.86,
4120384.81,
1217061.35,
9611,
5588,
15199,
204506.88,
204506.88,
0,
2695,
670,
11500,
null,
122811.99999999999,
7023658.27
],
[
1785801600,
3997818.01,
807187.42,
0,
3190630.59,
null,
4190233.36,
7380863.949999999,
3997853.01,
1137967.6399999997,
11246,
5724,
16970,
192415.35,
192415.35,
0,
2726,
619,
21500,
null,
122454,
6857703.38
],
[
1785888000,
4079926.22,
930139.43,
0,
3149786.79,
null,
4287724,
7437510.79,
4080420.22,
1234427.62,
5274,
5329,
10603,
207797.78,
207797.78,
0,
2512,
653,
19000,
null,
108045.99999999999,
6925918.82
]
]
}
]
},
"metadata": {
"pointSchemas": [
{
"name": "Timestamp",
"slug": "time",
"description": "Timestamp of the data point.",
"is_timestamp": true
},
{
"name": "Gross Revenue USD",
"slug": "grossRevenueUsd",
"description": "Gross platform revenue in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Net Revenue USD",
"slug": "netRevenueUsd",
"description": "Net platform revenue in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Misc Revenue USD",
"slug": "miscRevenueUsd",
"description": "Miscellaneous revenue in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Buyback Expense USD",
"slug": "buybackExpenseUsd",
"description": "Card buyback expense in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Referral Expense USD",
"slug": "referralExpenseUsd",
"description": "Referral expense in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "GMV USD",
"slug": "gmvUsd",
"description": "Gross merchandise value in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Volume incl. Buybacks USD",
"slug": "volumeInclBuybackUsd",
"description": "Volume including platform buybacks in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Gacha Spend USD",
"slug": "gachaSpendUsd",
"description": "Net gacha (pack-opening) spend in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Credit Card Spend USD",
"slug": "creditCardSpendUsd",
"description": "Credit-card spend in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "New DAU",
"slug": "dauNew",
"description": "New daily active users. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Recurring DAU",
"slug": "dauRecurring",
"description": "Recurring daily active users. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Total DAU",
"slug": "dauTotal",
"description": "Total daily active users. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Marketplace Volume USD",
"slug": "marketplaceVolumeUsd",
"description": "Secondary-marketplace volume in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Organic Volume USD",
"slug": "organicVolumeUsd",
"description": "Marketplace volume excluding buybacks in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Buyback Volume USD",
"slug": "buybackVolumeUsd",
"description": "Marketplace buyback volume in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Sales Count",
"slug": "salesCount",
"description": "Marketplace sales count. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Unique Buyers",
"slug": "uniqueBuyers",
"description": "Unique marketplace buyers. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Top Sale USD",
"slug": "topSaleUsd",
"description": "Largest single sale of the day in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Marketplace Fees USD",
"slug": "marketplaceFeesUsd",
"description": "Marketplace fees in USD. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Packs Opened",
"slug": "packsOpened",
"description": "Gacha packs opened, summed across tiers. Sourced from Blockworks Research.",
"is_timestamp": false
},
{
"name": "Gross Gacha Spend USD",
"slug": "grossGachaSpendUsd",
"description": "Gross gacha spend, summed across tiers, in USD. Sourced from Blockworks Research.",
"is_timestamp": false
}
],
"granularity": "1d",
"seriesCount": 1
}
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}Authorizations
Path Parameters
Blockworks Research platform slug, as returned in the id field of the TCG platform listing.
Example:
"courtyard"
Granularity
Available options:
1d Example:
"1d"
Query Parameters
Time range start
Example:
"2026-08-01T00:00:00Z"
Time range end
Example:
"2026-08-21T00:00:00Z"

