Reference
Get a Topic measurement series
The same measurement-series contract used by Projects, for one known
Topic id. trend keeps the newest real completed score boundary in
each hourly bucket. rank is the committed Trend-boundary series reduced to change points;
value is null when a complete leaderboard publishes the Topic as
unranked. Point timestamps preserve the actual completed measurement
boundary. Topic history requires an API key.
Authorization
ApiKeyAuth x-api-key<token>
API key. The Authorization header is accepted as an equivalent
carrier. Responses echo the credential class in X-API-Key-Type.
In: header
Path Parameters
topicId*string
Match
^topic_[a-f0-9]{20}$measure*string
Value in
"trend" | "rank"Query Parameters
from?string
Format
date-timeto?string
Format
date-timeResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v3/topics/string/series/trend"{
"data": {
"topic": {
"id": "topic_a1b2c3d4e5f601234567",
"name": "Restaking yield compression"
},
"points": [
{
"at": "2026-08-05T03:45:00Z",
"value": 91.8
},
{
"at": "2026-08-05T04:45:00Z",
"value": 93.2
}
]
},
"meta": {
"measure": "trend",
"basis": "hourly",
"window": {
"from": "2026-08-04T05:00:00Z",
"to": "2026-08-05T05:00:00Z"
},
"versions": {
"trendModel": "trend-nb-predictive-v2",
"topicAlgorithm": "trend-nb-predictive-v2.topic-relevance-v3"
},
"history": {
"lookbackDays": 90,
"earliestAvailableAt": "2026-05-07T00:00:00Z"
}
}
}{
"code": "invalid_request",
"message": "minTrend must be numeric",
"details": {
"fields": [
"minTrend"
]
}
}{
"code": "credential_required",
"message": "Provide an API key via the x-api-key header."
}{
"code": "entitlement_required",
"message": "This resource requires the topic-reports entitlement.",
"details": {
"entitlement": "topic-reports"
}
}{
"code": "not_found",
"message": "No Project matches that locator.",
"details": {
"subject": {
"type": "project",
"locator": "examplechain"
}
}
}{
"code": "rate_limited",
"message": "Minute limit reached.",
"details": {
"limit": 100,
"window": "minute"
}
}{
"code": "internal_error",
"message": "Unexpected error."
}{
"code": "service_unavailable",
"message": "Measurement history is temporarily unavailable."
}