Search
Search TikTok the way the app answers right now: videos, photo posts, accounts, hashtags, LIVE rooms and places.
Search TikTok videos
Searches TikTok posts by keyword, as TikTok's own search returns them now: views, likes, comments, shares, saves, creator, hashtags, sound and linked Shop products. Not a sales ranking (use video_top_selling). Example: {"keyword":"home gym","sort":"most_liked","date":"month"}.
/v1/search/photosPhoto carousel posts
Parameters
- keywordstringRequired
Search phrase, e.g. 'lip oil'.
- limitinteger
Results per page. videos and photos max 20, all max 30. 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 video_search tool with method: photos. Same data, same credit. MCP setup
{
"tool": "video_search",
"arguments": {
"method": "photos",
"keyword": "lip oil",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/search/photos?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/search/photos",
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/search/photos?${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": "eyJvZmZzZXQiOjMsInNlYXJjaF9pZCI6InUudy4yMDI2MTAzMDIzMjYyMkJFMkJDQkVDOTVFRTY4MkVEQzJEIn0",
"search_id": "u.w.20261030232622BE2BCBEC95EE682EDC2D",
"videos": [
{
"caption": "What’s your favorite lip oil? Comment below! 👇 💋 Top 10 Lip Oils 🥇 Clarins Lip Comfort Oil * Nourishes & hydrates * Non-sticky * Glossy finish * Comfortable all-day wear 🥈 Dior Addict Lip Glow Oil * Hydrating * High-shine finish * Color-enhancing * Smooth, non-sticky feel 🥉 NYX Fat …",
"comments": 3,
"creator": {
"followers": 60,
"handle": "glow4girlz",
"id": "7629889741245269006",
"nickname": "glow4girlz",
"secUid": "MS4wLjABAAAA6vRpwfgqZVdysM-l_JvHnpTwd_r-2Rita6Gz8hQTozEs1ApCOCVKi8Cy-O33Q7eF"
},
"hashtags": [
{
"id": "5391",
"name": "makeup"
},
{
"id": "44367",
"name": "top10"
},
{
"id": "19957680",
"name": "lipoil"
}
],
"id": "7670279717978737933",
"imageCount": 1,
"language": "en",
"likes": 314,
"photoPost": true,
"posted": "2026-08-04T20:43:07Z",
"saves": 171,
"shares": 35,
"sound": {
"author": "Doja Cat",
"id": "6976278887063898114",
"title": "Woman"
},
"url": "https://www.tiktok.com/@glow4girlz/photo/7670279717978737933",
"views": 44000
},
{
"caption": "No one talks about these lip oils!! Romand makes such glossy and juicy lippies #romand #kbeauty #lipoil #lipgloss #juicy",
"comments": 18,
"creator": {
"followers": 95300,
"handle": "beansforfun",
"id": "6754991130918142978",
"nickname": "Jeslyn | Beansforfun",
"secUid": "MS4wLjABAAAAr3p5L2z_a84fx3Vs8EDWP8rDO7XsoOuyZrt2nrLKEWePYkRuGsOiH9rEKz-9cY4x"
},
"hashtags": [
{
"id": "16975188",
"name": "romand"
},
{
"id": "1589191",
"name": "kbeauty"
},
{
"id": "19957680",
"name": "lipoil"
}
],
"id": "7670927766337981704",
"imageCount": 6,
"language": "en",
"likes": 2853,
"photoPost": true,
"posted": "2026-08-06T14:37:37Z",
"saves": 712,
"shares": 140,
"sound": {
"author": "m.i.n.d.i07",
"id": "7545216806445763329",
"original": true,
"title": "original sound"
},
"url": "https://www.tiktok.com/@beansforfun/photo/7670927766337981704",
"views": 61600
},
{
"caption": "#creatorsearchinsights #lipglossviral #viral #lipgloss",
"comments": 12,
"creator": {
"followers": 659,
"handle": "pinkparcell",
"id": "7505429985601373190",
"nickname": "Pink parcel 💗",
"secUid": "MS4wLjABAAAAYsd8sRbLqH8blS5ZJ8BX-gb4v3_tjMTnM3mgyqDEVIubIQNl2i_J73PiAcDTBfrg"
},
"hashtags": [
{
"id": "7340824418278440993",
"name": "creatorsearchinsights"
},
{
"id": "1661882308538374",
"name": "lipglossviral"
},
{
"id": "20884",
"name": "viral"
}
],
"id": "7676880875610524948",
"imageCount": 5,
"language": "un",
"likes": 190,
"photoPost": true,
"posted": "2026-08-22T15:38:41Z",
"saves": 47,
"shares": 47,
"sound": {
…Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.hasMorebooleandata.nextstringdata.search_idstringdata.videosarraydata.videos[].captionstringdata.videos[].commentsintegerdata.videos[].creatorobjectdata.videos[].creator.followersintegerdata.videos[].creator.handlestringdata.videos[].creator.idstringdata.videos[].creator.nicknamestringdata.videos[].creator.secUidstringdata.videos[].hashtagsarraydata.videos[].hashtags[].idstringdata.videos[].hashtags[].namestringdata.videos[].idstringdata.videos[].imageCountintegerdata.videos[].languagestringdata.videos[].likesintegerdata.videos[].photoPostbooleandata.videos[].postedstringdata.videos[].savesintegerdata.videos[].sharesintegerdata.videos[].soundobjectdata.videos[].sound.authorstringdata.videos[].sound.idstringdata.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
/v1/search/topMixed results (often empty)
Parameters
- keywordstringRequired
Search phrase, e.g. 'lip oil'.
- limitinteger
Results per page. videos and photos max 20, all max 30. 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 video_search tool with method: all. Same data, same credit. MCP setup
{
"tool": "video_search",
"arguments": {
"method": "all",
"keyword": "lip oil",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/search/top?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/search/top",
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/search/top?${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": {
"ad_info": {},
"components": null,
"cursor": 10,
"data": [
{
"aweme_info": {
"caption": "the shiniest lips on the internet @NOONI #noonipartner #beauty #glitterlips #lipoil #kbeauty",
"comments": 20,
"creator": {
"followers": 2414965,
"handle": "ingaterner",
"id": "6915470077362865158",
"nickname": "Inga Terner",
"secUid": "MS4wLjABAAAAj3-0_ug3CN2zVQW1fOIuVgtFq37iFz2-aQNDN9VLKT0Xa1rcEfAAybaLMhLsXCIu"
},
"durationSec": 18.067,
"hashtags": [
{
"id": "7305074851570516011",
"name": "noonipartner"
},
{
"id": "5393",
"name": "beauty"
},
{
"id": "206503",
"name": "glitterlips"
}
],
"id": "7691522530129022221",
"language": "en",
"likes": 1049,
"posted": "2026-10-01T02:36:03Z",
"saves": 207,
"shares": 39,
"sound": {
"author": "JERI",
"id": "7139362230881094442",
"original": true,
"title": "ariana grande . ill do it"
},
"url": "https://www.tiktok.com/@ingaterner/video/7691522530129022221",
"views": 22632
},
"card_profile": {},
"doc_id": 7691522530129022000,
"doc_type": 183,
"feedback_type": "video",
"preload_img": {
"urls": [
"https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/d175ab4ba1c1fbe4052c7496d8840d43~tplv-tiktokx-cropcenter:100:100.webp?biz_tag=musically_general.video_user_cover&dr=9640&idc=useast8&ps=13740610&refresh_token=9de3c320&shcp=34ff8df6&shp=d05b14bd&t=4d5b0474&x-expires=1793487600&x-signat…",
"https://p19-common-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/oACiExyxEG3CJSXBM9GBfBdIOIAiAAuwAJO1IY~tplv-tiktokx-cropcenter:500:800.jpeg?biz_tag=musically_general.video_cover&dr=9638&idc=useast8&ps=13740610&refresh_token=24cf0b6a&shcp=9b759fb9&shp=c1333099&t=4d5b0474&x-expires=1793422800&x-signatu…"
]
},
"provider_doc_id_str": "7691522530129022221",
"search_aweme_info": {
"has_creation_intention": false
},
"type": 1
},
{
"aweme_info": {
"caption": "Look at that shimmer ✨👀 Trying three of the @NOONI Shimmer Lip Oils! The glossy finish + pearly shimmer when it hits the light is SO pretty! Which shade is your favorite? 💕 Find the product link in my bio! 🛍️💋 #makeup #glitterlips #holidaymakeup #glittermakeup #lipoil",
"comments": 5,
"creator": {
"followers": 76430,
"handle": "idareen_",
"id": "7326533081505268742",
"nickname": "Makeup Tutorials | Reviews",
"secUid": "MS4wLjABAAAA7HdIDExKBSFp2H-MZCodVA6uWfnp8HCQpm8gawqQ9EPAW5X28Q0Zufzrkc01Nzx1"
},
"durationSec": 30.603,
"hashtags": [
{
"id": "5391",
"name": "makeup"
},
{
"id": "206503",
"name": "glitterlips"
},
{
"id": "38970494",
"name": "holidaymakeup"
}
],
"id": "7699530652789656853",
"language": "en",
"likes": 194,
"place": {
"id": "21568298460213102",
"name": "Toronto"
},
"posted": "2026-10-22T16:31:26Z",
"saves": 50,
"shares": 29,
"sound": {
"author": "Makeup Tutorials | Reviews",
"id": "7699530698348710662",
"original": true,
"title": "original sound - idareen_"
},
"url": "https://www.tiktok.com/@idareen_/video/7699530652789656853",
"views": 7573
},
"card_profile": {},
"doc_id": 7699530652789657000,
"doc_type": 183,
"feedback_type": "video",
"preload_img": {
"urls": [
"https://p16-common-sign.tiktokcdn-us.com/tos-alisg-p-0037/oMjDZD3fA4AIgAlVZH4LISJtEEeenAtaTAGOIG~tplv-tiktokx-cropcenter:500:800.jpeg?biz_tag=musically_general.video_cover&dr=9638&idc=useast8&ps=13740610&refresh_token=de71ab19&shcp=9b759fb9&shp=c1333099&t=4d5b0474&x-expires=1793422800&x-signature=Qm…",
"https://p19-common-sign.tiktokcdn-us.com/tos-maliva-avt-0068/c92773dcaa403c655eee2b06a9f91047~tplv-tiktokx-cropcenter:100:100.webp?biz_tag=musically_general.video_user_cover&dr=9640&idc=useast8&ps=13740610&refresh_token=acf1db85&shcp=34ff8df6&shp=d05b14bd&t=4d5b0474&x-expires=1793487600&x-signature=…"
]
},
"provider_doc_id_str": "7699530652789656853",
"search_aweme_info": {
…Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.ad_infoobjectdata.componentsnulldata.cursorintegerdata.dataarraydata.data[].aweme_infoobjectdata.data[].aweme_info.captionstringdata.data[].aweme_info.commentsintegerdata.data[].aweme_info.creatorobjectdata.data[].aweme_info.creator.followersintegerdata.data[].aweme_info.creator.handlestringdata.data[].aweme_info.creator.idstringdata.data[].aweme_info.creator.nicknamestringdata.data[].aweme_info.creator.secUidstringdata.data[].aweme_info.durationSecnumberdata.data[].aweme_info.hashtagsarraydata.data[].aweme_info.idstringdata.data[].aweme_info.languagestringdata.data[].aweme_info.likesintegerdata.data[].aweme_info.postedstringdata.data[].aweme_info.savesintegerdata.data[].aweme_info.sharesintegerdata.data[].aweme_info.soundobjectdata.data[].aweme_info.sound.authorstringdata.data[].aweme_info.sound.idstringdata.data[].aweme_info.sound.originalbooleandata.data[].aweme_info.sound.titlestringdata.data[].aweme_info.urlstringdata.data[].aweme_info.viewsintegerdata.data[].card_profileobjectdata.data[].doc_idintegerdata.data[].doc_typeintegerdata.data[].feedback_typestringdata.data[].preload_imgobjectdata.data[].preload_img.urlsarraydata.data[].provider_doc_id_strstringdata.data[].search_aweme_infoobjectdata.data[].search_aweme_info.has_creation_intentionbooleandata.data[].typeintegerdata.global_doodle_configobjectdata.global_doodle_config.ab_paramsobjectdata.global_doodle_config.ab_params.user_relation_shipstringdata.global_doodle_config.can_pull_refreshbooleandata.global_doodle_config.disable_reorderintegerdata.global_doodle_config.display_filter_barintegerdata.global_doodle_config.ecom_api_versionstringdata.global_doodle_config.ecom_search_infoobjectdata.global_doodle_config.ecom_search_info.query_addr_intentobjectdata.global_doodle_config.ecom_search_info.query_addr_intent.query_addr_intentbooleandata.global_doodle_config.ecom_search_info.query_addr_intent.query_addr_intent_creatorbooleandata.global_doodle_config.ecom_search_info.query_addr_intent.query_addr_intent_shopbooleandata.global_doodle_config.enable_multi_searchbooleandata.global_doodle_config.feedback_surveyarraydata.global_doodle_config.feedback_survey[].feedback_typestringdata.global_doodle_config.feedback_survey[].long_stress_infonulldata.global_doodle_config.feedback_survey[].multiple_choicesarraydata.global_doodle_config.feedback_survey[].send_us_multiple_choicesnulldata.global_doodle_config.has_ecom_intentbooleandata.global_doodle_config.hide_resultsbooleandata.global_doodle_config.hit_dolphinbooleandata.global_doodle_config.hit_sharkbooleandata.global_doodle_config.keywordstringdata.global_doodle_config.new_sourcestringdata.global_doodle_config.original_ecom_intentintegerdata.global_doodle_config.prefetch_degrade_levelintegerdata.global_doodle_config.search_channelstringdata.global_doodle_config.search_intentobjectdata.global_doodle_config.show_video_research_tab_listbooleandata.global_doodle_config.tns_search_resultstringdata.has_morebooleandata.headersarraydata.prefer_layoutstringdata.qcstringdata.result_statusintegerdata.search_idstringdata.versionstringmetaobjectmeta.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/search/videosVideo posts
Parameters
- keywordstringRequired
Search phrase, e.g. 'lip oil'.
- limitinteger
Results per page. videos and photos max 20, all max 30. Values above a method's maximum are lowered and reported in notes.
5 more optional parameters
- cursorstring
Paging: pass the next value from the previous response unchanged. Omit on the first page.
- datestring
method=videos: only posts from this window (default any).One of
anydayweekmonthhalf_year - detailstring
compact (default) returns the useful fields; full adds the raw upstream payload (large).
Default
compactOne ofcompactfull - regionstring
Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See
shop_regions. - sortstring
method=videos: relevance (default),most_likedor newest.One of
relevancemost_likednewest
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the video_search tool with method: videos. Same data, same credit. MCP setup
{
"tool": "video_search",
"arguments": {
"method": "videos",
"keyword": "lip oil",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/search/videos?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/search/videos",
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/search/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": "eyJvZmZzZXQiOjMsInNlYXJjaF9pZCI6InUuMjAyNjEwMzAyMzI2MjBEQTUwODYxOTJERDYwMjNENTg2NSJ9",
"videos": [
{
"caption": "the shiniest lips on the internet @NOONI #noonipartner #beauty #glitterlips #lipoil #kbeauty",
"comments": 20,
"creator": {
"followers": 2415482,
"handle": "ingaterner",
"id": "6915470077362865158",
"nickname": "Inga Terner",
"secUid": "MS4wLjABAAAAj3-0_ug3CN2zVQW1fOIuVgtFq37iFz2-aQNDN9VLKT0Xa1rcEfAAybaLMhLsXCIu"
},
"durationSec": 18.067,
"hashtags": [
{
"id": "7305074851570516011",
"name": "noonipartner"
},
{
"id": "5393",
"name": "beauty"
},
{
"id": "206503",
"name": "glitterlips"
}
],
"id": "7691522530129022221",
"language": "en",
"likes": 1049,
"posted": "2026-10-01T02:36:03Z",
"saves": 207,
"shares": 39,
"sound": {
"author": "JERI",
"id": "7139362230881094442",
"original": true,
"title": "ariana grande . ill do it"
},
"url": "https://www.tiktok.com/@ingaterner/video/7691522530129022221",
"views": 22632
},
{
"caption": "Fall lip oil check! The color, the shine, the vibes. #FallLipOil #FallMakeup #AutumnBeauty #LipOil #GlossyLips",
"comments": 24,
"creator": {
"followers": 1330988,
"handle": "hannah_tyre27",
"id": "6944438159117157381",
"nickname": "🩷Hannah Tyre 🩷",
"secUid": "MS4wLjABAAAAjER9oaswmE4V_19vFf0ZexBBTeyJ9Y7xvNk1Kz8QGq1VWbLuO90e78JG09GnkDty"
},
"durationSec": 51.667,
"hashtags": [
{
"id": "7151573380594925611",
"name": "falllipoil"
},
{
"id": "739483",
"name": "fallmakeup"
},
{
"id": "4933088",
"name": "autumnbeauty"
}
],
"id": "7699874217633828110",
"language": "en",
"likes": 549,
"posted": "2026-10-23T14:45:09Z",
"saves": 30,
"shares": 22,
"sound": {
"author": "🩷Hannah Tyre 🩷",
"id": "7699874343160974094",
"original": true,
"title": "original sound - hannah_tyre27"
},
"url": "https://www.tiktok.com/@hannah_tyre27/video/7699874217633828110",
"views": 5107
},
{
"caption": "💋 Labios hidratados, brillantes y con efecto juicy ✨💖 ¡Un must-have de e.l.f. que necesitas en tu makeup bag! @e.l.f. Cosmetics #elfcosmetics #LipOil #TikTokShopFinds #BeautyFinds",
"comments": 7,
"creator": {
"followers": 1702,
"handle": "ashleysdiary.23",
"id": "6803053233713382406",
"nickname": "ashleysdiary.23",
"secUid": "MS4wLjABAAAAuyCq8DeJjMA6wrlhd2TZ2x3sPlA1W88B0oEG9C4GtKav_zxam7uVz1qlHN-UgJai"
},
"durationSec": 18.167,
"hashtags": [
{
"id": "3745016",
"name": "elfcosmetics"
},
{
"id": "19957680",
"name": "lipoil"
},
{
"id": "7062156700811264026",
"name": "tiktokshopfinds"
}
],
"id": "7701578410455272734",
"language": "es",
"likes": 22,
"posted": "2026-10-28T15:30:00Z",
"products": [
{
"id": "1731834431818338595",
"name": "e.l.f Lip Oil",
"sellerId": "7494913857786775843",
"title": "e.l.f. Glow Reviver Plumping Lip Oil, Ultra-Glossy Nourishing Lipgloss with Cooling Tingle & Fresh Minty Scent for Plumped-Up Pout 7.6mL"
…Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.hasMorebooleandata.nextstringdata.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
Search TikTok accounts
Searches TikTok accounts by keyword (name, handle or niche), as TikTok's account search returns them now, with follower bounds, verified-only and sorting applied to the page. Not a sales ranking (use creator_top_selling). Example: {"keyword":"skincare","min_followers":10000,"sort":"followers"}.
/v1/search/creatorsAccounts matching keyword
Parameters
- keywordstringRequired
Search phrase, e.g. 'lip oil'.
- limitinteger
Results per page. Max 20. Values above a method's maximum are lowered and reported in notes.
6 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 - max_followersinteger
Maximum followers. 0 = none.
- min_followersinteger
Minimum followers. 0 = none.
- sortstring
relevance (default), followers or likes.
One of
relevancefollowerslikes - verified_onlyboolean
Keep only verified accounts.
Default
false
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the creator_search tool. Same data, same credit. MCP setup
{
"tool": "creator_search",
"arguments": {
"keyword": "lip oil",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/search/creators?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/search/creators",
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/search/creators?${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": {
"creators": [
{
"followers": 54911,
"following": 28,
"handle": "lipoil417",
"id": "6865315608574854146",
"likes": 472040,
"nickname": "ลิปออยฮัปเตงงง(55K)🌷",
"secUid": "MS4wLjABAAAAIH8mpvc810ovJRZSVLgv-XFx3QLJW0PL5bj4kc-VwbVFEbrMcwtUsMyIk3B8iT9-",
"url": "https://www.tiktok.com/@lipoil417",
"verified": true,
"videos": 186
},
{
"followers": 499138,
"following": 311,
"handle": "eb.bahboh",
"id": "6825796908113150981",
"likes": 18588205,
"nickname": "เต๋าชอบทาLip Oil Everyskin",
"secUid": "MS4wLjABAAAAnM1MVJtXef0fO5ajr4ujQH6M91KOOd8GMKcaE9ed-N-fN10e40IRkPBrLrqslVPC",
"url": "https://www.tiktok.com/@eb.bahboh",
"verified": true,
"videos": 1654
},
{
"followers": 642,
"following": 591,
"handle": "mylipoil",
"id": "6641452638477697025",
"likes": 22168,
"nickname": "♡Lip oil♡",
"secUid": "MS4wLjABAAAAtxW2_Ld0rDOEv11Rz-tr_iMBm2g2_6U7-OtIKrfd_3mInZcy7SoPoHuDj_OIB2Bu",
"url": "https://www.tiktok.com/@mylipoil",
"verified": true,
"videos": 47
}
],
"hasMore": true,
"next": "eyJjdXJzb3IiOjMsInNlYXJjaF9pZCI6InUuMjAyNjEwMzAyMzI2MzVFNjRGQ0MzRkM5NTc3RkEzOUQyNCJ9",
"retrievedCount": 3
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJjdXJzb3IiOjMsInNlYXJjaF9pZCI6InUuMjAyNjEwMzAyMzI2MzVFNjRGQ0MzRkM5NTc3RkEzOUQyNCJ9"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.creatorsarraydata.creators[].followersintegerdata.creators[].followingintegerdata.creators[].handlestringdata.creators[].idstringdata.creators[].likesintegerdata.creators[].nicknamestringdata.creators[].secUidstringdata.creators[].urlstringdata.creators[].verifiedbooleandata.creators[].videosintegerdata.hasMorebooleandata.nextstringdata.retrievedCountintegermetaobjectmeta.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
Find hashtags
Finds hashtags by keyword, with total views and video counts for each. Pass a hashtag's id to hashtag for its videos and related tags. Example: {"keyword":"fitness"}.
/v1/search/hashtagsHashtags matching keyword
Parameters
- keywordstringRequired
Search phrase, e.g. 'lip oil'.
- limitinteger
Results per page. Max 50. 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 hashtag_search tool. Same data, same credit. MCP setup
{
"tool": "hashtag_search",
"arguments": {
"keyword": "lip oil",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/search/hashtags?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/search/hashtags",
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/search/hashtags?${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,
"hashtags": [
{
"id": "19957680",
"name": "lipoil",
"url": "https://www.tiktok.com/tag/lipoil",
"videos": 788416,
"views": 11473297599
},
{
"id": "1643439800933382",
"name": "lipoils",
"url": "https://www.tiktok.com/tag/lipoils",
"videos": 77196,
"views": 1105123774
},
{
"id": "1676866847720454",
"name": "lipoil💋",
"url": "https://www.tiktok.com/tag/lipoil💋",
"videos": 649,
"views": 4702098
}
],
"next": "eyJjdXJzb3IiOjMsInNlYXJjaF9pZCI6InUuMjAyNjEwMzAyMzI2NTVCMzMwODE0MjE0MDBGOTg2ODY0RSJ9"
},
"meta": {
"credits_charged": 1,
"credits_remaining": 7906,
"request_id": "req_3f9c2a1b7d4e"
},
"next_cursor": "eyJjdXJzb3IiOjMsInNlYXJjaF9pZCI6InUuMjAyNjEwMzAyMzI2NTVCMzMwODE0MjE0MDBGOTg2ODY0RSJ9"
}Response fields
dataobjectThe tool's result. Compact by default; passdetail=fullfor the complete record.data.hasMorebooleandata.hashtagsarraydata.hashtags[].idstringdata.hashtags[].namestringdata.hashtags[].urlstringdata.hashtags[].videosintegerdata.hashtags[].viewsintegerdata.nextstringmetaobjectmeta.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
Search LIVE now
Finds TikTok LIVE broadcasts on now by keyword, with viewers and whether the room sells Shop products. Pass a room id to live. Not a sales ranking (use live_top_selling). Example: {"keyword":"skincare"}.
/v1/search/livesLIVE rooms matching keyword
Parameters
- keywordstringRequired
Search phrase, e.g. 'lip oil'.
- limitinteger
Results per page. Max 30. 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 - regionstring
Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See
shop_regions.
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the live_search tool. Same data, same credit. MCP setup
{
"tool": "live_search",
"arguments": {
"keyword": "lip oil",
"limit": "3"
}
}Request
curl "https://api.tokconnect.com/v1/search/lives?keyword=lip%20oil&limit=3" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/search/lives",
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/search/lives?${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": {
"feedback_type": "live",
"global_doodle_config": {
"disable_inner_flow": true,
"feedback_survey": [
{
"feedback_type": "live",
"long_stress_info": null,
"multiple_choices": [
{
"key": "Dislike",
"value": "Dislike"
},
{
"key": "Unrelated content",
"value": "Unrelated content"
},
{
"key": "Language issues",
"value": "Language issues"
}
],
"send_us_multiple_choices": null
}
],
"hide_results": false,
"hit_dolphin": false,
"hit_shark": false,
"keyword": "lip oil",
"new_source": "switch_tab",
"search_channel": "musically_live",
"tns_search_result": "Pass"
},
"guide_search_words": null,
"hasMore": false,
"rooms": [
{
"creator": {
"handle": "mirthandmayhemapothecary",
"id": "6674289300136510470",
"nickname": "Mae✨Mirth & Mayhem Apothecary✨",
"secUid": "MS4wLjABAAAAYw1mF-k-heabSeLK8lspoY3Xc00YOLHWLFnZHdFqZPA0SBt7eId4jSd3uIwnk9GR"
},
"likes": 1805,
"live": true,
"roomId": "7702602665781005070",
"started": "2026-10-30T23:13:34Z",
"title": "Lip gloss and jewelry!",
"url": "https://www.tiktok.com/@mirthandmayhemapothecary/live",
"viewers": 14
},
{
"creator": {
"handle": "maknzperfumes",
"id": "7281875170079638571",
"nickname": "MAKNZ",
"secUid": "MS4wLjABAAAAVmdAbRxbNMd8OTpVYAzbGO9Lef-ghmqR6GprCVHaKjRfN3MAbRjnu8xFSb4JgEIm"
},
"likes": 5415,
"live": true,
"roomId": "7702558024967899918",
"shopping": true,
"started": "2026-10-30T20:20:38Z",
"title": "OIL BASED BY JASMINE",
"url": "https://www.tiktok.com/@maknzperfumes/live",
"viewers": 5
},
{
"creator": {
"handle": "drixelyyy",
"id": "6780994045612229637",
"nickname": "Dri•xely🌺🫧",
"secUid": "MS4wLjABAAAAcQpHjinDtXzD-DiBVd4vU4uYIUlNk71_TiIWnOeTLksQMxMn3nebNKx5mcrqPuLk"
},
"likes": 7712,
"live": true,
"roomId": "7702596084547259149",
"shopping": true,
"started": "2026-10-30T22:48:00Z",
"title": "🚨DIFFUSER OIL RESTOCK 🥰‼️",
"url": "https://www.tiktok.com/@drixelyyy/live",
"viewers": 6
}
],
"search_id": "u.2026103023270001AF2C7F8351C72F0BE1",
"version": "v2"
},
"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.feedback_typestringdata.global_doodle_configobjectdata.global_doodle_config.disable_inner_flowbooleandata.global_doodle_config.feedback_surveyarraydata.global_doodle_config.feedback_survey[].feedback_typestringdata.global_doodle_config.feedback_survey[].long_stress_infonulldata.global_doodle_config.feedback_survey[].multiple_choicesarraydata.global_doodle_config.feedback_survey[].send_us_multiple_choicesnulldata.global_doodle_config.hide_resultsbooleandata.global_doodle_config.hit_dolphinbooleandata.global_doodle_config.hit_sharkbooleandata.global_doodle_config.keywordstringdata.global_doodle_config.new_sourcestringdata.global_doodle_config.search_channelstringdata.global_doodle_config.tns_search_resultstringdata.guide_search_wordsnulldata.hasMorebooleandata.roomsarraydata.rooms[].creatorobjectdata.rooms[].creator.handlestringdata.rooms[].creator.idstringdata.rooms[].creator.nicknamestringdata.rooms[].creator.secUidstringdata.rooms[].likesintegerdata.rooms[].livebooleandata.rooms[].roomIdstringdata.rooms[].startedstringdata.rooms[].titlestringdata.rooms[].urlstringdata.rooms[].viewersintegerdata.search_idstringdata.versionstringmetaobjectmeta.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
Place / POI search
/v1/search/placesPlace / POI search
Parameters
- keywordstringRequired
Place or business term, e.g. 'coffee shop'.
2 more optional parameters
- countinteger
Places per page.
Default
10 - detailstring
full adds TikTok's raw payload (large).
Default
compactOne ofcompactfull
Use it in Claude or ChatGPT
Connect https://mcp.tokconnect.com/mcp and your AI calls this as the place_search tool. Same data, same credit. MCP setup
{
"tool": "place_search",
"arguments": {
"keyword": "lip oil"
}
}Request
curl "https://api.tokconnect.com/v1/search/places?keyword=lip%20oil" \
-H "X-API-Key: $TOKCONNECT_API_KEY"import os
import requests
r = requests.get(
"https://api.tokconnect.com/v1/search/places",
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/search/places?${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": {
"places": [
{
"address": "3939 S Interstate 35, San Marcos, United States",
"category": "Beauty Salon",
"country": "US",
"id": "20319181072627620",
"lat": 29.831224,
"lng": -97.983594,
"name": "Clarins",
"url": "https://www.tiktok.com/place/-20319181072627620",
"videos": 1
},
{
"address": "4620 71st St #30, Lubbock, TX 79424, USA",
"category": "Hair Salon",
"country": "US",
"hours": "09:00 - 18:00",
"id": "21568226335734203",
"lat": 33.529574,
"lng": -101.911819,
"name": "Glam LAB",
"tags": [
"Boho Braids",
"Braids Specialist",
"Locks Styling"
],
"url": "https://www.tiktok.com/place/-21568226335734203",
"videos": 21
},
{
"address": "Vicinale Saguerra 998, 74020 Taranto, Italy",
"country": "IT",
"id": "21568226329628837",
"lat": 40.36815,
"lng": 17.330194,
"name": "Imoil",
"url": "https://www.tiktok.com/place/-21568226329628837"
}
]
},
"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.placesarraydata.places[].addressstringdata.places[].categorystringdata.places[].countrystringdata.places[].idstringdata.places[].latnumberdata.places[].lngnumberdata.places[].namestringdata.places[].urlstringdata.places[].videosintegermetaobjectmeta.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