curl --request GET \
--url https://api.video2ctx.dev/v1/providers/{provider}/trends \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.video2ctx.dev/v1/providers/{provider}/trends', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.video2ctx.dev/v1/providers/{provider}/trends"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"provider": "youtube",
"query": "<string>",
"generatedAt": "2023-11-07T05:31:56Z",
"sampleSize": 1,
"methodologyVersion": "3.0",
"methodology": "<string>",
"sample": {
"candidateVideos": 1,
"enrichedVideos": 1,
"channels": 1,
"observedVideos": 1,
"recentCandidates": 1,
"recentVideos": 1
},
"window": {
"days": 2,
"recentCandidatesSampled": 1,
"recentVideosEnriched": 1
},
"confidence": {
"score": 50,
"level": "low",
"reasons": [
"<string>"
]
},
"summary": {
"totalViews": 1,
"medianViewsPerHour": 1,
"publishedLast7Days": 1,
"breakoutCount": 1,
"acceleratingCount": 1,
"medianObservedViewsPerHour": 1,
"medianRecentViewsPerHour": 1,
"recentVelocityLift": 1
},
"videos": [
{
"id": "<string>",
"title": "<string>",
"channel": {
"id": "<string>",
"name": "<string>"
},
"thumbnails": [
{
"url": "<string>",
"width": 1,
"height": 1
}
],
"description": "<string>",
"viewCount": 1,
"signalSource": "observed",
"confidenceScore": 50,
"hashtags": [
"<string>"
],
"keywords": [
"<string>"
],
"effectiveViewsPerHour": 1,
"velocityRank": 2,
"percentiles": {
"velocity": 50,
"freshness": 50,
"channelPerformance": 50,
"engagement": 50,
"acceleration": 50
},
"trendScore": 50,
"trendBand": "Breakout",
"url": "<string>",
"durationSeconds": 1,
"publishedTimeText": "<string>",
"publishDate": "<string>",
"ageHours": 1,
"viewsPerHour": 1,
"observedViewsPerHour": 1,
"previousViewsPerHour": 1,
"accelerationPercent": 123,
"observationHours": 1,
"viewDelta": 1,
"likeDelta": 1,
"commentDelta": 1,
"commentCount": 1,
"likeCount": 1,
"engagementRate": 1,
"channelBaselineViewsPerHour": 1,
"channelLift": 1,
"searchRank": 2
}
],
"hashtags": [
{}
],
"titlePatterns": [
{}
],
"durationMix": [
{}
],
"plan": {},
"warnings": [
"<string>"
],
"insights": {}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}Calculate public trend signals for a topic
Builds a diversified topic sample, persists public metric snapshots, calculates observed acceleration when history exists, and optionally adds GLM-generated evidence-grounded themes and content gaps.
curl --request GET \
--url https://api.video2ctx.dev/v1/providers/{provider}/trends \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.video2ctx.dev/v1/providers/{provider}/trends', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.video2ctx.dev/v1/providers/{provider}/trends"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"provider": "youtube",
"query": "<string>",
"generatedAt": "2023-11-07T05:31:56Z",
"sampleSize": 1,
"methodologyVersion": "3.0",
"methodology": "<string>",
"sample": {
"candidateVideos": 1,
"enrichedVideos": 1,
"channels": 1,
"observedVideos": 1,
"recentCandidates": 1,
"recentVideos": 1
},
"window": {
"days": 2,
"recentCandidatesSampled": 1,
"recentVideosEnriched": 1
},
"confidence": {
"score": 50,
"level": "low",
"reasons": [
"<string>"
]
},
"summary": {
"totalViews": 1,
"medianViewsPerHour": 1,
"publishedLast7Days": 1,
"breakoutCount": 1,
"acceleratingCount": 1,
"medianObservedViewsPerHour": 1,
"medianRecentViewsPerHour": 1,
"recentVelocityLift": 1
},
"videos": [
{
"id": "<string>",
"title": "<string>",
"channel": {
"id": "<string>",
"name": "<string>"
},
"thumbnails": [
{
"url": "<string>",
"width": 1,
"height": 1
}
],
"description": "<string>",
"viewCount": 1,
"signalSource": "observed",
"confidenceScore": 50,
"hashtags": [
"<string>"
],
"keywords": [
"<string>"
],
"effectiveViewsPerHour": 1,
"velocityRank": 2,
"percentiles": {
"velocity": 50,
"freshness": 50,
"channelPerformance": 50,
"engagement": 50,
"acceleration": 50
},
"trendScore": 50,
"trendBand": "Breakout",
"url": "<string>",
"durationSeconds": 1,
"publishedTimeText": "<string>",
"publishDate": "<string>",
"ageHours": 1,
"viewsPerHour": 1,
"observedViewsPerHour": 1,
"previousViewsPerHour": 1,
"accelerationPercent": 123,
"observationHours": 1,
"viewDelta": 1,
"likeDelta": 1,
"commentDelta": 1,
"commentCount": 1,
"likeCount": 1,
"engagementRate": 1,
"channelBaselineViewsPerHour": 1,
"channelLift": 1,
"searchRank": 2
}
],
"hashtags": [
{}
],
"titlePatterns": [
{}
],
"durationMix": [
{}
],
"plan": {},
"warnings": [
"<string>"
],
"insights": {}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}{
"error": {
"code": "QUERY_REQUIRED",
"message": "<string>",
"details": "<unknown>",
"requestId": "<string>"
}
}Authorizations
Permanent personal API key created in the dashboard. Example: curl -H "Authorization: Bearer aty_…" https://your-host/v1/projects
Path Parameters
External video provider.
youtube "youtube"
Query Parameters
Topic to research.
200"AI agents"
Number of diversified videos to enrich; clamped to 8–30.
8 <= x <= 30AI insight mode. Use deterministic to skip GLM analysis.
ai, deterministic Response
Topic trend report.
youtube x >= 0Show child attributes
Show child attributes
The recency window used to reserve sample slots for recent uploads.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Optional GLM-generated analysis. Omitted when deterministic mode is requested or model inference fails.