Token versions
curl --request GET \
--url https://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}', 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.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}",
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://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}"
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://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"metadata": {
"queryDate": "2026-01-08T10:13:58Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
},
"page": 1,
"pageSize": 50,
"totalPages": 10,
"total": 487
},
"status": true,
"data": [
{
"id": "eigenlayer-p-664afd685bc38ff465ce3bf7",
"tokenId": "eigenlayer",
"historyOrder": 1,
"status": "previous",
"validFrom": "2024-04-29T17:24:21Z",
"validFromBasis": "stated_in_document",
"validUntil": "2024-09-04T16:55:06Z",
"disclosedAt": "2024-04-29T17:24:21Z",
"previousVersionId": null,
"change": {
"category": "project_decision",
"title": "Updated TBD Allocation Stakedrops with Stakedrop Season 2 release log",
"description": "Added 1 release. (Stakedrops)",
"basis": "project_disclosure"
},
"changeReferences": [
{
"name": "Introducing EIGEN token",
"url": "https://blog.eigenfoundation.org/announcement/",
"sourceType": "official_blog",
"sourceDate": "2024-04-29T17:24:21Z",
"private": true
}
],
"listedMethod": "INTERNAL",
"dataSource": "Whitepaper"
}
]
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}Point-in-Time History
Token versions
List every project version of a token’s unlock schedule
GET
/
v5
/
point-in-time
/
token-versions
/
{tokenId}
Token versions
curl --request GET \
--url https://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}', 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.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}",
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://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}"
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://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tokenomist.ai/v5/point-in-time/token-versions/{tokenId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"metadata": {
"queryDate": "2026-01-08T10:13:58Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
},
"page": 1,
"pageSize": 50,
"totalPages": 10,
"total": 487
},
"status": true,
"data": [
{
"id": "eigenlayer-p-664afd685bc38ff465ce3bf7",
"tokenId": "eigenlayer",
"historyOrder": 1,
"status": "previous",
"validFrom": "2024-04-29T17:24:21Z",
"validFromBasis": "stated_in_document",
"validUntil": "2024-09-04T16:55:06Z",
"disclosedAt": "2024-04-29T17:24:21Z",
"previousVersionId": null,
"change": {
"category": "project_decision",
"title": "Updated TBD Allocation Stakedrops with Stakedrop Season 2 release log",
"description": "Added 1 release. (Stakedrops)",
"basis": "project_disclosure"
},
"changeReferences": [
{
"name": "Introducing EIGEN token",
"url": "https://blog.eigenfoundation.org/announcement/",
"sourceType": "official_blog",
"sourceDate": "2024-04-29T17:24:21Z",
"private": true
}
],
"listedMethod": "INTERNAL",
"dataSource": "Whitepaper"
}
]
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}{
"metadata": {
"queryDate": "2026-10-29T06:25:07Z",
"credit": {
"used": 213,
"limit": 1000,
"resetAt": "2026-08-01T00:00:00Z"
}
},
"status": false,
"statusCode": 404,
"errorCode": "TOKEN_NOT_FOUND",
"errorMessage": "Token not found",
"earliestValidDate": "2023-10-29T00:00:00Z"
}Returns every project version of a token, oldest first by
Example version:
historyOrder. Use the ids from this endpoint as versionId on the other Point-in-Time History endpoints.
- Each version carries
validFrom,validFromBasis,validUntil,disclosedAtandpreviousVersionId. - Tokenomist’s own corrections are not listed separately. Each one is folded into the project version it follows, which then serves the corrected data.
startandendfilter on the UTC day ofvalidFrom, both days included.change.categoryisbaselineon the first version andproject_decisionon later ones.metadataholds the query date, credit and pagination only. This endpoint takes noasOforversionId.
list_versions.py
import requests
response = requests.get(
"https://api.tokenomist.ai/v5/point-in-time/token-versions/eigenlayer",
headers={"x-api-key": "YOUR_API_KEY"},
timeout=30,
)
body = response.json()
if not body.get("status"):
raise RuntimeError(f"{body.get('errorCode')}: {body.get('errorMessage')}")
for version in body["data"]:
print(version["historyOrder"], version["id"], version["validFrom"], version["change"]["title"])
{
"id": "eigenlayer-p-664afd685bc38ff465ce3bf7",
"tokenId": "eigenlayer",
"historyOrder": 1,
"status": "previous",
"validFrom": "2024-04-29T17:24:21Z",
"validFromBasis": "stated_in_document",
"validUntil": "2024-09-04T16:55:06Z",
"disclosedAt": "2024-04-29T17:24:21Z",
"previousVersionId": null,
"change": {
"category": "baseline",
"title": "Launch tokenomics",
"description": "Baseline: first published schedule.",
"basis": "project_disclosure"
},
"changeReferences": [
{
"name": "Introducing EIGEN token",
"url": "https://blog.eigenfoundation.org/announcement/",
"sourceType": "official_blog"
}
],
"listedMethod": "INTERNAL",
"dataSource": "Whitepaper"
}
Authorizations
Your Tokenomist API key
Path Parameters
Token identifier (slug), as in Token List v5. A token not in that list answers 404 TOKEN_NOT_FOUND.
Query Parameters
Return versions whose validFrom falls on or after this UTC day (YYYY-MM-DD).
Return versions whose validFrom falls on or before this UTC day (YYYY-MM-DD).
Page number (1-indexed). 0 or omitted means 1.
Required range:
x >= 0Number of items per page. 0 or omitted means 20.
Required range:
x >= 0Was this page helpful?
