There is no public Creator Search Insights API. TikTok ships the tool in the app and at tiktok.com/csi, and has never documented an endpoint for it. The Research API does not return search topics, the Business API does not either, and there is no scope, partner tier or application that unlocks one.

What does exist is a way to call the same topic records from code: an MCP endpoint with a bearer key, one tool call per question. Below is the runnable Python, the JSON it returns, a field reference for every value in a topic record, and the follow-up calls that expand one topic into a cluster.

Why there is no Creator Search Insights API

Creator Search Insights is a creator-facing product, not a developer one. TikTok's developer portal is organised around four surfaces, and none of them touches search demand.

Official APIWhat it returnsSearch topics?
Research APIVideos, comments, user info, playlists, reposts, for approved academic and research accountsNo
Display APIA logged-in user's own public videos and profileNo
Content Posting APIPublishing and draft uploadNo
Business APIAd accounts, campaigns, reporting, Creative Center keyword and trend data for advertisersNo, and its keyword insights are ad-side, not organic search popularity

The Research API comes closest and still cannot answer the question. Its video query specification filters by keyword, hashtag, region and date, and returns videos. It has no concept of a search topic, a 7-day search count or a content gap. You can count how many videos mention sourdough. You cannot learn that 4.7 million people searched for it last week.

The broader map of every TikTok API and what each one is good for is in the TikTok API guide.

The endpoint that does return topics

TokConnect exposes the Creator Search Insights topic records, plus ordinary TikTok search, over the Model Context Protocol. It is one HTTP endpoint speaking Streamable HTTP and JSON-RPC.

SettingValue
Endpointhttps://mcp.tokconnect.com/mcp
AuthAuthorization: Bearer YOUR_TOKCONNECT_KEY
TransportStreamable HTTP (POST, with SSE responses)
Discoverytools/list after initialize

MCP is not REST. There is no /search_topics URL to curl. You open a session, initialize, then call named tools with tools/call. Any MCP client library handles that sequence for you, which is the point of using one. If you want the same thing in a chat window rather than a script, the connect pages cover Claude, Codex, Cursor and Gemini CLI, and the TikTok MCP guide explains the protocol.

A Python example that runs

This uses the official mcp package. Install it with pip install mcp, put your key in TOKCONNECT_KEY, and run it.

import asyncio
import json
import os

from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

URL = "https://mcp.tokconnect.com/mcp"
HEADERS = {"Authorization": f"Bearer {os.environ['TOKCONNECT_KEY']}"}


async def main():
    async with streamablehttp_client(URL, headers=HEADERS) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()

            tools = await session.list_tools()
            print([t.name for t in tools.tools])

            result = await session.call_tool(
                "search_topics",
                {"keyword": "sourdough starter", "limit": 5, "language": "en"},
            )
            data = json.loads(result.content[0].text)

            for topic in data["topics"]:
                print(
                    f"{topic['searchVolume']:>10,}  "
                    f"{topic['videoCount']:>6}  "
                    f"{topic['queryText']}"
                )
            print("next offset:", data["nextOffset"])


asyncio.run(main())
Using mcp 2.x?

The example above uses the Python SDK's 1.x line. In mcp 2.0 and later, which is what pip install mcp gives you today, the helper is streamable_http_client, the headers move onto an httpx2.AsyncClient passed as http_client, and the context manager yields two streams:

import httpx2
from mcp.client.streamable_http import streamable_http_client

async with streamable_http_client(URL, http_client=httpx2.AsyncClient(headers={"Authorization": f"Bearer {KEY}"})) as (read, write):
    async with ClientSession(read, write) as session:
        ...

Both forms return the same 26 tools. We ran both against the server on 19 September 2026.

Two things to note. Tool results arrive as text content, so you parse result.content[0].text as JSON rather than reading a typed object. And list_tools() is worth calling once in development: the tool set grows, and the schemas it returns are the authoritative argument list.

Running it on 19 September 2026 printed this:

 2,923,707       0  dry sourdough starter and dough
 3,721,671       0  sourdough starter making and uses
 4,418,725       0  sourdough eating and starter care
 4,685,193       0  sourdough baking and starter care
 3,205,561     546  sourdough starter making and feeding
next offset: 5

Data: TikTok Creator Search Insights via TokConnect, pulled 19 September 2026. Open the snapshot.

The JSON search_topics returns

Here is one full record from that call plus the envelope around it, trimmed to a single topic:

{
  "topics": [
    {
      "queryId": "7668817079025287188",
      "queryText": "sourdough baking and starter care",
      "popularity": 87,
      "searchVolume": 4685193,
      "videoCount": 0,
      "trend7d": [9597, 106468, 291212, 442767, 1091572, 1611616, 4685193],
      "trendScore7d": [45, 70, 74, 78, 85, 85, 87],
      "categoryL1": "Gourmet",
      "categoryL2": "Food Tutorials",
      "isFavorited": false,
      "channel": "search",
      "tab": "SEARCH"
    }
  ],
  "hasMore": true,
  "nextOffset": 5,
  "count": 5,
  "channel": "search",
  "tab": "SEARCH"
}

That record is a content gap in JSON form: 4.69 million searches in a week against zero matched videos. The content gap guide explains what TikTok counts as a match.

Field reference

FieldTypeMeaning
queryIdstringTopic identifier. Pass it to every follow-up tool. Store it beside the text, because the same phrase can come back with a different id on a later search.
queryTextstringTikTok's label for the topic cluster, not one exact phrase. Capitalisation varies and is TikTok's.
searchVolumeintegerSearches over the last 7 days, global. This is the figure the app prints as "Search popularity". See the search volume guide.
popularityinteger 0–100TikTok's index of how hot the topic is against everything else. Not a percentage and not derived from searchVolume.
videoCountintegerVideos TikTok has matched to the topic. Zero is common and is the signal behind the content-gap badge.
trend7darray of 7 integersDaily search counts behind the chart, oldest first. The last value equals searchVolume.
trendScore7darray of 7 integersThe same seven days as the 0–100 popularity index.
categoryL1categoryL4stringTikTok's category path, L1 broadest. L3 and L4 are present only on topics filed that deeply.
isFavoritedbooleanWhether the topic is saved on the underlying account.
channel, tabstringWhich feed the record came from. search/SEARCH for keyword results, other values for browse and trending feeds.

Keep an absent field absent when you store these. A videoCount of zero and a videoCount that never arrived are different states, and collapsing them ruins any content-gap filter you build on top.

Follow-up tools

Each of these takes the queryId from a topic record and costs one credit.

ToolArgumentsReturns
topic_detailquery_idFull record for one topic: category path, top countries, related-product signals
search_popularityquery_id, days ("7", "30", "60", "180"), countriesThe search series over a longer window, optionally split by country
audience_demographicsquery_id, daysShare of searchers by country, gender and age group
related_topicsquery_id, limit, offsetAdjacent topics with their own volumes, for building a cluster from one proven seed

The useful pattern is one broad search_topics call, then follow-ups on the two or three topics that survive your filter. Calling audience_demographics on all ten results is nine wasted credits, because you will drop most of them on volume alone.

Pagination, credits and rate

search_topics takes limit from 1 to 20 and an offset. The response returns hasMore and nextOffset; pass that nextOffset straight back as offset for the next page. In the example above the response came back with nextOffset: 5, so the next page starts at 5. Do not compute the offset yourself from page numbers, because the server decides the step.

Billing is one credit per tool call, whatever the call returns, including a call that returns an empty list. Every account starts with 100 free credits, which is enough to build and test a real pipeline rather than one demo request.

Two practical notes. Keep the key out of source control and read it from the environment, as the example does. And if a call comes back with an upstream error, wait and retry once before failing the job: these are live TikTok reads, and a transient failure on one topic is not a reason to abandon the batch.

If you would rather ask questions than write a client, the desktop guide shows the same data through Claude or ChatGPT with no code at all.

Frequently asked questions

Is there a TikTok Creator Search Insights API?

No. TikTok documents Creator Search Insights as a creator feature, not a developer one. There is no endpoint for it in the Research API, the Display API, the Content Posting API or the Business API, and no scope you can request for search popularity data.

Can the TikTok Research API return search volume?

No. The Research API queries videos, comments, user info, playlists and reposts for approved academic and research accounts. It has no notion of a search topic, a search popularity figure or a content gap, so it cannot answer "how many people searched for this".

What does search_topics return?

A list of topic records and a pagination cursor. Each record has queryId, queryText, popularity (0 to 100), searchVolume (7-day global searches), videoCount, the trend7d and trendScore7d series, and TikTok's category path. The full shape is on this page.

How much does it cost?

One MCP tool call is one credit, and every account starts with 100 free credits. A ten-topic search plus a follow-up on the best three is four credits, so the free tier covers real evaluation rather than a single hello-world call.

Sources and data