Demand and keywords
What people search for on TikTok, from TikTok's own Creator Search Insights, plus autocomplete and keyword ideas from TikTok and TikTok Shop.
Find TikTok search topics
Finds what people search on TikTok (Creator Search Insights). Each topic has queryId, searchVolume (TikTok's 7-day popularity figure, never a monthly count), videoCount (0 = content gap) and a daily trend. Use for demand, content gaps and trend research. Pass a topic's queryId to demand_topic for charts, audience and related searches. Example: {"keyword":"protein snacks"} or {"method":"feed","channel":"content_gap"}.
/v1/searchesTopics matching keyword
Parameters
- keywordstring
method=search: phrase to match, e.g. 'bicep workouts'. - limitinteger
Results per page. Max 20. Values above a method's maximum are lowered and reported in notes.
3 more optional parameters
- cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - languagestring
method=searchor feed: language code fromreferencemethod=csi_languages, e.g. en.
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_find_topics tool with method: search. Same data, same credit. MCP setup
{
"tool": "demand_find_topics",
"arguments": {
"method": "search",
"keyword": "lip oil",
"limit": 3
}
}Request
curl "https://api.tokconnect.com/v1/searches?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/searches",
params={
"keyword": "lip oil",
"limit": 3,
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
keyword: "lip oil",
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/searches?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"channel": "search",
"hasMore": true,
"next": "eyJvZmZzZXQiOjN9",
"tab": "SEARCH",
"topics": [
{
"category": "Fashion > Fashion Tutorials",
"popularity": 77,
"queryId": "7661799877281595413",
"queryText": "what to look for in a lip oil",
"searchVolume": 384507,
"trend7d": [
286756,
201899,
179210
],
"videoCount": 0
},
{
"category": "Fashion > Fashion Products > Beauty and Skin Care Products > Beauty Products",
"popularity": 72,
"queryId": "41561603",
"queryText": "Best lip oil",
"searchVolume": 189105,
"trend7d": [
185907,
210094,
137831
],
"videoCount": 1113
},
{
"category": "Fashion > Fashion Products > Beauty and Skin Care Products > Beauty Products",
"popularity": 40,
"queryId": "7411340654124498950",
"queryText": "lip oils for lips",
"searchVolume": 3799,
"trend7d": [
4099,
3499,
2999
],
"videoCount": 1168
}
]
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJvZmZzZXQiOjN9"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.channelstringdata.hasMorebooleandata.nextstringdata.tabstringdata.topicsarraydata.topics[].categorystringdata.topics[].popularityintegerdata.topics[].queryIdstringdata.topics[].queryTextstringdata.topics[].searchVolumeintegerdata.topics[].trend7darraydata.topics[].videoCountintegermetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/searches/feedA ready-made list (channel)
Parameters
- limitinteger
Results per page. Max 20. Values above a method's maximum are lowered and reported in notes.
4 more optional parameters
- channelstring
method=feed: which list. suggested,content_gap(high demand, few videos), or a category.One of
suggestedcontent_gaplifestylefashionfoodsportstourismgamingscience - cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - languagestring
method=searchor feed: language code fromreferencemethod=csi_languages, e.g. en.
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_find_topics tool with method: feed. Same data, same credit. MCP setup
{
"tool": "demand_find_topics",
"arguments": {
"method": "feed",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/searches/feed?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/searches/feed",
params={
"limit": "3",
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/searches/feed?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"hasMore": true,
"next": "eyJvZmZzZXQiOjN9",
"tab": "ALL",
"topics": [
{
"category": "TikTok's Featured Content > Others TikTok and Video Contents",
"popularity": 2,
"queryId": "7637721127158022164",
"queryText": "views and likes",
"searchVolume": 99,
"trend7d": [
99,
299,
99
],
"videoCount": 194769
},
{
"category": "Local Life > Leisure and Entertainment > Other Leisure and Entertainment Venues",
"popularity": 93,
"queryId": "7693004027847507989",
"queryText": "lucki complex con",
"searchVolume": 34704706,
"trend7d": [
0,
0,
0
],
"videoCount": 228448
},
{
"category": "TikTok's Featured Content > Stories/Posting Captions",
"popularity": 72,
"queryId": "7478520405142011910",
"queryText": "#relate",
"searchVolume": 180718,
"trend7d": [
3000,
700,
54105
],
"videoCount": 166276
}
]
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJvZmZzZXQiOjN9"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.hasMorebooleandata.nextstringdata.tabstringdata.topicsarraydata.topics[].categorystringdata.topics[].popularityintegerdata.topics[].queryIdstringdata.topics[].queryTextstringdata.topics[].searchVolumeintegerdata.topics[].trend7darraydata.topics[].videoCountintegermetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/searches/trendingTrending searches, optionally by category
Parameters
- limitinteger
Results per page. Max 20. Values above a method's maximum are lowered and reported in notes.
3 more optional parameters
- categorystring
method=trending: category tab (default all).One of
allFashionFoodSportsTourismGamingScience - cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_find_topics tool with method: trending. Same data, same credit. MCP setup
{
"tool": "demand_find_topics",
"arguments": {
"method": "trending",
"limit": 3
}
}Request
curl "https://api.tokconnect.com/v1/searches/trending?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/searches/trending",
params={
"limit": 3,
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/searches/trending?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"channel": "trending",
"hasMore": true,
"next": "eyJvZmZzZXQiOjN9",
"tab": "all",
"topics": [
{
"category": "Sports > Physical Sports > Sports News > Other Sports News",
"popularity": 93,
"queryId": "7701568755255476244",
"queryText": "gabriel penalty miss ballon dor",
"searchVolume": 33137737,
"trend7d": [
0,
0,
0
],
"videoCount": 0
},
{
"category": "Entertainment > Celebrity Entertainment > Celebrity Gossips > Celebrity Gossip News",
"popularity": 92,
"queryId": "7690715705234161684",
"queryText": "taylor swift weddings photos",
"searchVolume": 25630078,
"trend7d": [
1692253,
593303,
222388
],
"videoCount": 100
},
{
"category": "Sports > Physical Sports > Sports Competitions > Ball Games",
"popularity": 92,
"queryId": "7687094461397991444",
"queryText": "arsenal vs fleetwood",
"searchVolume": 23658364,
"trend7d": [
300,
300,
100
],
"videoCount": 0
}
]
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJvZmZzZXQiOjN9"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.channelstringdata.hasMorebooleandata.nextstringdata.tabstringdata.topicsarraydata.topics[].categorystringdata.topics[].popularityintegerdata.topics[].queryIdstringdata.topics[].queryTextstringdata.topics[].searchVolumeintegerdata.topics[].trend7darraydata.topics[].videoCountintegermetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
One TikTok search topic
Everything about one search topic (id = queryId from demand_find_topics): detail, daily popularity chart, searcher demographics, related searches, TikTok's content guidance and matching videos. Popularity values are TikTok's readings: never add days together or call them monthly searches. Example: {"id":"7261...","method":"popularity","days":"180","countries":["US"]}.
/v1/searches/{id}searchVolume, trend, category, top countries
Parameters
- idstringPathRequired
queryId from
demand_find_topics. Not a video id or keyword.
1 more optional parameter
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_topic tool with method: detail. Same data, same credit. MCP setup
{
"tool": "demand_topic",
"arguments": {
"method": "detail",
"id": "7637721127158022164"
}
}Request
curl "https://api.tokconnect.com/v1/searches/7637721127158022164" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/searches/7637721127158022164",
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const res = await fetch("https://api.tokconnect.com/v1/searches/7637721127158022164", {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"topCountries": [
{
"country_code": "PH",
"country_name": "Philippines"
},
{
"country_code": "ID",
"country_name": "Indonesia"
},
{
"country_code": "NG",
"country_name": "Nigeria"
}
],
"topic": {
"category": "TikTok's Featured Content > Others TikTok and Video Contents",
"popularity": 2,
"queryId": "7637721127158022164",
"queryText": "views and likes",
"searchVolume": 99,
"trend7d": [
99,
299,
99
],
"videoCount": 194769
},
"usesInsightsVideoEndpoint": false
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.topCountriesarraydata.topCountries[].country_codestringdata.topCountries[].country_namestringdata.topicobjectdata.topic.categorystringdata.topic.popularityintegerdata.topic.queryIdstringdata.topic.queryTextstringdata.topic.searchVolumeintegerdata.topic.trend7darraydata.topic.videoCountintegerdata.usesInsightsVideoEndpointbooleanmetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/searches/{id}/audienceAge, gender and location of searchers
Parameters
- idstringPathRequired
queryId from
demand_find_topics. Not a video id or keyword.
2 more optional parameters
- daysstring
method=popularityor audience: window in days (default 30).One of
73060180 - detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_topic tool with method: audience. Same data, same credit. MCP setup
{
"tool": "demand_topic",
"arguments": {
"method": "audience",
"id": "7637721127158022164"
}
}Request
curl "https://api.tokconnect.com/v1/searches/7637721127158022164/audience" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/searches/7637721127158022164/audience",
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const res = await fetch("https://api.tokconnect.com/v1/searches/7637721127158022164/audience", {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"age": [
{
"category": "total",
"popularity": 96667
},
{
"category": "25-34",
"popularity": 32190
},
{
"category": "18-24",
"popularity": 26891
}
],
"gender": [
{
"category": "total",
"popularity": 96669
},
{
"category": "unknown",
"popularity": 50284
},
{
"category": "male",
"popularity": 24492
}
],
"location": [
{
"category": "total",
"popularity": 96586
},
{
"category": "Indonesia",
"popularity": 12896
},
{
"category": "Pakistan",
"popularity": 10696
}
],
"summary": {
"age": "25-34",
"gender": "unknown",
"location": "Indonesia"
}
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.agearraydata.age[].categorystringdata.age[].popularityintegerdata.genderarraydata.gender[].categorystringdata.gender[].popularityintegerdata.locationarraydata.location[].categorystringdata.location[].popularityintegerdata.summaryobjectdata.summary.agestringdata.summary.genderstringdata.summary.locationstringmetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/searches/{id}/guidanceTikTok's suggested hooks, hashtags and outlines (often unavailable)
Parameters
- idstringPathRequired
queryId from
demand_find_topics. Not a video id or keyword.
1 more optional parameter
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_topic tool with method: guidance. Same data, same credit. MCP setup
{
"tool": "demand_topic",
"arguments": {
"method": "guidance",
"id": "7637721127158022164"
}
}Request
curl "https://api.tokconnect.com/v1/searches/7637721127158022164/guidance" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/searches/7637721127158022164/guidance",
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const res = await fetch("https://api.tokconnect.com/v1/searches/7637721127158022164/guidance", {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"available": false,
"message": "TikTok reports that content guidance is not generated for this CSI topic yet. No guidance is available in this response."
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.availablebooleandata.messagestringmetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/searches/{id}/popularityDaily popularity chart, worldwide or per country
Parameters
- idstringPathRequired
queryId from
demand_find_topics. Not a video id or keyword.
3 more optional parameters
- countriesarray of string
method=popularity: country codes to break out, e.g. "US","GB". Omit for worldwide. - daysstring
method=popularityor audience: window in days (default 30).One of
73060180 - detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_topic tool with method: popularity. Same data, same credit. MCP setup
{
"tool": "demand_topic",
"arguments": {
"method": "popularity",
"id": "7637721127158022164"
}
}Request
curl "https://api.tokconnect.com/v1/searches/7637721127158022164/popularity" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/searches/7637721127158022164/popularity",
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const res = await fetch("https://api.tokconnect.com/v1/searches/7637721127158022164/popularity", {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"series": [
{
"country": "global",
"points": [
{
"date": "2026-09-30",
"popularity": 1481
},
{
"date": "2026-10-01",
"popularity": 1093
},
{
"date": "2026-10-02",
"popularity": 701
}
]
}
],
"windowDays": 30
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.seriesarraydata.series[].countrystringdata.series[].pointsarraydata.series[].points[].datestringdata.series[].points[].popularityintegerdata.windowDaysintegermetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/searches/{id}/videosVideos TikTok shows for the topic
Parameters
- idstringPathRequired
queryId from
demand_find_topics. Not a video id or keyword. - limitinteger
Results per page.
method=relatedmax 20;method=videosmax 20. Values above a method's maximum are lowered and reported in notes.
2 more optional parameters
- cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_topic tool with method: videos. Same data, same credit. MCP setup
{
"tool": "demand_topic",
"arguments": {
"method": "videos",
"id": "7637721127158022164",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/searches/7637721127158022164/videos?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/searches/7637721127158022164/videos",
params={
"limit": "3",
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/searches/7637721127158022164/videos?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"hasMore": true,
"next": "eyJvZmZzZXQiOjN9",
"topicQueryId": "7637721127158022164",
"topicQueryText": "views and likes",
"videos": [
{
"caption": "going viral does NOT have to be super complicated!! #iwanttogoviral #howtogoviralontiktok #howtogoviraltips #tiktokgrowth",
"comments": 55778,
"creator": {
"followers": 18459,
"handle": "thelifeofjftb",
"id": "6895909988976395270",
"nickname": "jenny",
"secUid": "MS4wLjABAAAAdhjwJHeb-b3JtDSrR-E8hiKgVLnfHukcHXlpylkukO23nDO8Pgib43DTfy9kayiV"
},
"durationSec": 89.634,
"hashtags": [
{
"id": "85581100",
"name": "iwanttogoviral"
},
{
"id": "1645041228246018",
"name": "howtogoviralontiktok"
},
{
"id": "1661640432713733",
"name": "howtogoviraltips"
}
],
"id": "7516402158825196846",
"language": "en",
"likes": 200636,
"posted": "2025-06-16T04:39:53Z",
"saves": 78023,
"shares": 75002,
"sound": {
"author": "jenny",
"id": "7516402224461892395",
"original": true,
"title": "original sound - thelifeofjftb"
},
"url": "https://www.tiktok.com/@thelifeofjftb/video/7516402158825196846",
"views": 2086466
},
{
"caption": "The views may be low but unfortunately I’ve already decided I’m famous 😭😂 #TikTokHumor #SmallCreator #MainCharacterEnergy #ForYou #KeepPosting",
"comments": 8422,
"creator": {
"followers": 2868,
"handle": "thehouseofsamuel",
"id": "7605020458355196941",
"nickname": "The House Of Samuel",
"secUid": "MS4wLjABAAAAoJkre_H8s5vnyPV8BRX1hTk1-vrY-VkKYFvBTKCAh3Q2vlpwN80nZL0hHlhtldNA"
},
"durationSec": 6.547,
"hashtags": [
{
"id": "1589764631152642",
"name": "tiktokhumor"
},
{
"id": "1609436969656325",
"name": "smallcreator"
},
{
"id": "1665817412595717",
"name": "maincharacterenergy"
}
],
"id": "7693916067256749343",
"language": "en",
"likes": 157523,
"posted": "2026-10-07T13:24:33Z",
"saves": 22839,
"shares": 8585,
"sound": {
"author": "AngieBLoveee🇺🇸",
"id": "7414631646038625066",
"original": true,
"title": "Imma keep posting"
},
"url": "https://www.tiktok.com/@thehouseofsamuel/video/7693916067256749343",
"views": 1088039
},
{
"caption": "Here’s how to use the new algorithm to get more likes and views on your posts! #creatorsearchinsights #howtogoviral",
"comments": 283,
"creator": {
"followers": 154056,
"handle": "beckett_cj",
"id": "7471419225988236334",
"nickname": "Beckett CJ",
"secUid": "MS4wLjABAAAAwnFwtUWXMkbHwZB7aKcCFKjdg6eGpv7h3mrjqad3HMrtjm2zXL0DZ4IHUB0cXWLp"
},
"durationSec": 78.668,
"hashtags": [
{
"id": "7340824418278440993",
"name": "creatorsearchinsights"
},
{
"id": "1620762388052997",
"name": "howtogoviral"
}
],
"id": "7623207520521194765",
"language": "en",
"likes": 2068,
"posted": "2026-03-31T00:18:50Z",
"saves": 979,
"shares": 332,
"sound": {
"author": "Beckett CJ",
"id": "7623207565551209229",
"original": true,
"title": "original sound - beckett_cj"
},
…Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.hasMorebooleandata.nextstringdata.topicQueryIdstringdata.topicQueryTextstringdata.videosarraydata.videos[].captionstringdata.videos[].commentsintegerdata.videos[].creatorobjectdata.videos[].creator.followersintegerdata.videos[].creator.handlestringdata.videos[].creator.idstringdata.videos[].creator.nicknamestringdata.videos[].creator.secUidstringdata.videos[].durationSecnumberdata.videos[].hashtagsarraydata.videos[].hashtags[].idstringdata.videos[].hashtags[].namestringdata.videos[].idstringdata.videos[].languagestringdata.videos[].likesintegerdata.videos[].postedstringdata.videos[].savesintegerdata.videos[].sharesintegerdata.videos[].soundobjectdata.videos[].sound.authorstringdata.videos[].sound.idstringdata.videos[].sound.originalbooleandata.videos[].sound.titlestringdata.videos[].urlstringdata.videos[].viewsintegermetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
Keyword suggestions
Autocomplete and keyword ideas from TikTok and TikTok Shop. method=signals adds TikTok's predicted click-through and a shopping-intent flag per phrase. These rank phrases; they are not search volume (use demand_find_topics for volume). Example: {"keyword":"matcha","method":"signals"}.
/v1/keywords/accountsAccount (@handle) suggestions
Parameters
- keywordstring
Seed phrase. Not needed for
method=trending. - limitinteger
Results per page. tiktok/accounts max 50, signals max 20, trending max 30,
ad_librarymax 20. Values above a method's maximum are lowered and reported in notes.
1 more optional parameter
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_keywords tool with method: accounts. Same data, same credit. MCP setup
{
"tool": "demand_keywords",
"arguments": {
"method": "accounts",
"keyword": "lip oil",
"limit": 3
}
}Request
curl "https://api.tokconnect.com/v1/keywords/accounts?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/keywords/accounts",
params={
"keyword": "lip oil",
"limit": 3,
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
keyword: "lip oil",
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/keywords/accounts?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"suggestions": [
"lip oil",
"Lip Oil",
"Lip oil"
]
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.suggestionsarraymetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/keywords/ad-libraryEU/UK Ad Library advertiser and keyword autocomplete
Parameters
- keywordstring
Seed phrase. Not needed for
method=trending. - limitinteger
Results per page. tiktok/accounts max 50, signals max 20, trending max 30,
ad_librarymax 20. Values above a method's maximum are lowered and reported in notes.
3 more optional parameters
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - regionstring
method=ad_library: 2-letter EU/UK country fromreferencemethod=ad_regions. Default DE. - suggest_typestring
method=ad_library: TikTok's suggestion type, default 1 (advertisers and keywords).
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_keywords tool with method: ad_library. Same data, same credit. MCP setup
{
"tool": "demand_keywords",
"arguments": {
"method": "ad_library",
"keyword": "lip oil",
"limit": 3
}
}Request
curl "https://api.tokconnect.com/v1/keywords/ad-library?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/keywords/ad-library",
params={
"keyword": "lip oil",
"limit": 3,
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
keyword: "lip oil",
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/keywords/ad-library?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"advertisers": [],
"code": 0,
"keywords": []
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.advertisersarraydata.codeintegerdata.keywordsarraymetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/keywords/shopTikTok Shop search autocomplete
Parameters
- keywordstring
Seed phrase. Not needed for
method=trending.
1 more optional parameter
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_keywords tool with method: shop. Same data, same credit. MCP setup
{
"tool": "demand_keywords",
"arguments": {
"method": "shop",
"keyword": "lip oil"
}
}Request
curl "https://api.tokconnect.com/v1/keywords/shop?keyword=lip%20oil" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/keywords/shop",
params={
"keyword": "lip oil",
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
keyword: "lip oil",
});
const res = await fetch(`https://api.tokconnect.com/v1/keywords/shop?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"page": "suggest",
"suggestions": [
"lip oil hydration",
"lip oil stain",
"lip oil gloss"
]
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.pagestringdata.suggestionsarraymetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/keywords/signalsAutocomplete with click-through and shopping-intent signals
Parameters
- keywordstring
Seed phrase. Not needed for
method=trending. - limitinteger
Results per page. tiktok/accounts max 50, signals max 20, trending max 30,
ad_librarymax 20. Values above a method's maximum are lowered and reported in notes.
1 more optional parameter
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_keywords tool with method: signals. Same data, same credit. MCP setup
{
"tool": "demand_keywords",
"arguments": {
"method": "signals",
"keyword": "lip oil",
"limit": 3
}
}Request
curl "https://api.tokconnect.com/v1/keywords/signals?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/keywords/signals",
params={
"keyword": "lip oil",
"limit": 3,
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
keyword: "lip oil",
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/keywords/signals?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"keyword": "lip oil",
"suggestions": [
{
"ecomIntent": 2,
"predictedCtr": 0.026337544,
"text": "lip oil"
},
{
"ecomIntent": 1,
"predictedCtr": 0.0067250463,
"text": "lip oil vs lip gloss"
},
{
"ecomIntent": 2,
"predictedCtr": 0.0041258996,
"text": "Lip oil essence"
}
]
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.keywordstringdata.suggestionsarraydata.suggestions[].ecomIntentintegerdata.suggestions[].predictedCtrnumberdata.suggestions[].textstringmetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/keywords/suggestTikTok search autocomplete
Parameters
- keywordstring
Seed phrase. Not needed for
method=trending. - limitinteger
Results per page. tiktok/accounts max 50, signals max 20, trending max 30,
ad_librarymax 20. Values above a method's maximum are lowered and reported in notes.
1 more optional parameter
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_keywords tool with method: tiktok. Same data, same credit. MCP setup
{
"tool": "demand_keywords",
"arguments": {
"method": "tiktok",
"keyword": "lip oil",
"limit": 3
}
}Request
curl "https://api.tokconnect.com/v1/keywords/suggest?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/keywords/suggest",
params={
"keyword": "lip oil",
"limit": 3,
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
keyword: "lip oil",
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/keywords/suggest?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"suggestions": [
"lip oil",
"lip oil vs lip gloss",
"Lip oil essence"
]
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.suggestionsarraymetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503
Try it Live call, 1 credit
/v1/keywords/trendingTrending phrases TikTok's website shows
Parameters
- limitinteger
Results per page. tiktok/accounts max 50, signals max 20, trending max 30,
ad_librarymax 20. Values above a method's maximum are lowered and reported in notes.
1 more optional parameter
- detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the demand_keywords tool with method: trending. Same data, same credit. MCP setup
{
"tool": "demand_keywords",
"arguments": {
"method": "trending",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/keywords/trending?limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/keywords/trending",
params={
"limit": "3",
},
headers={"X-API-Key": os.environ["TOKCONNECT_API_KEY"]},
timeout=100,
)
r.raise_for_status()
body = r.json()
print(body["data"])const params = new URLSearchParams({
limit: "3",
});
const res = await fetch(`https://api.tokconnect.com/v1/keywords/trending?${params}`, {
headers: { "X-API-Key": process.env.TOKCONNECT_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error?.message);
const { data, next_cursor } = await res.json();Response
{
"data": {
"searches": [
"Hyena makeup for Halloween trend",
"Band Aid and 2 Pimple Patches remarks trend",
"Fancy Footwork trend"
]
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
}
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.searchesarraymetaobjectmeta.credits_chargedinteger1 on success.meta.credits_remainingintegerCredits left this period, when known.meta.request_idstringQuote it to support.next_cursorstringPresent when there is another page: pass it back as cursor.
Errors
400401402403404429502503