SocialToAIStart freeConsole
POST/v1/call/douyin.keyword_historyPreview

Douyin trend-index keyword trends API

Only on Douyin.

The Douyin trend-index keyword trends API returns the day-by-day search index and composite index of a keyword on Douyin over a date range, from 巨量算数 (the Douyin index), with the daily averages of the period, of the one before and of a year earlier. One call costs 4 credits ($0.008 to $0.013 depending on the pack); failed calls are free. Call it over HTTP or from your AI client over MCP. Last tested 2026-10-17.

100 credits on sign-up, no card needed
4 creditsper call
Up to 5 itemsfirst page only
2026-10-17last tested
1.8 KBsample response, 1 item

Last updated:

Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.

Request and response

curl https://api.socialtoai.com/v1/call/douyin.keyword_history \  -H "Authorization: Bearer $SOCIALTOAI_KEY" \  -H "Content-Type: application/json" \  -d '{    "since": "2026-09-01T00:00:00Z",    "until": "2026-09-30T00:00:00Z",    "keyword": "咖啡"  }'
import osimport requestsresponse = requests.post(    "https://api.socialtoai.com/v1/call/douyin.keyword_history",    headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"},    json={        "since": "2026-09-01T00:00:00Z",        "until": "2026-09-30T00:00:00Z",        "keyword": "咖啡",    },)print(response.json())
# Connected over MCP? Ask in plain words.Use the Douyin trend-index keyword trends interface (douyin.keyword_history) with since: 2026-09-01T00:00:00Z, until: 2026-09-30T00:00:00Z, keyword: 咖啡.# Your AI calls the call tool with:{  "since": "2026-09-01T00:00:00Z",  "until": "2026-09-30T00:00:00Z",  "keyword": "咖啡"}
Sign in to run4 creditsOpens in the Playground with these parameters after you sign in. It never runs by itself.
200 OK1.8 KB4 credits
{  "op": "douyin.keyword_history",  "platform": "douyin",  "status": "ok",  "items": [    {      "platform": "douyin",      "id": "咖啡",      "ref": "咖啡",      "approx": [],      "type": "entry",      "entry_type": "keyword_history",      "title": "咖啡",      "url": null,      "rank": null,      "heat": null,      "fields": {        "points": [          {            "date": "2026-09-01T00:00:00Z",            "search_index": 4542097,            "composite_index": 1627826,            "notes": null,            "impressions": null,            "views": null,            "engagements": null          },          {            "date": "2026-09-02T00:00:00Z",            "search_index": 4430237,            "composite_index": 1603543,            "notes": null,            "impressions": null,            "views": null,            "engagements": null          },          {            "date": "2026-09-03T00:00:00Z",            "search_index": 4439049,            "composite_index": 1606224,            "notes": null,            "impressions": null,            "views": null,            "engagements": null          },          {            "date": "2026-09-04T00:00:00Z",            "search_index": 4590172,            "composite_index": 1648872,            "notes": null,            "impressions": null,            "views": null,            "engagements": null          },          {            "date": "2026-09-05T00:00:00Z",            "search_index": 5608382,            "composite_index": 1966637,            "notes": null,            "impressions": null,            "views": null,            "engagements": null          },          {            "date": "2026-09-06T00:00:00Z",            "search_index": 5341970,            "composite_index": 1888380,            "notes": null,            "impressions": null,            "views": null,            "engagements": null          },          {            "date": "2026-09-07T00:00:00Z",            "search_index": 5098808,            "composite_index": 1808789,            "notes": null,            "impressions": null,            "views": null,            "engagements": null          }        ]      }    }  ],  "unavailable": ["fields.points.notes", "fields.points.impressions", "fields.points.views", "fields.points.engagements"],  "page": {    "has_more": false  },  "cost_credits": 4}
entry_type
keyword_history

Names and text were removed from the sample; the numbers are as recorded.

Sample data1 of the 2 items recorded

3 parameters.
All required.

Send them as a JSON body with POST. Your key goes in the Authorization header, never in the URL.

NameTypeRequiredDefaultDescription
keywordstringRequired—One keyword, at most 50 characters and without a comma; letter case does not matter
sincedatetimeRequired—The first day wanted: the China-time (UTC+8) calendar day this moment falls on; 2026-09-01 means 1 September
untildatetimeRequired—The last day wanted, read the same way. The platform publishes a day or two late: a day it has no figure for yet has a null index
First page only: up to 5 items, with no cursor parameter and no next page.

The fields of each item.
What Douyin cannot give is marked.

FieldTypeMeaning
items[].titlestringThe entry's title or name.
items[].urlstringA link that opens it; null where the platform's list has none.
items[].rankintegerPosition on a board, from 1.
items[].heatintegerThe platform's heat score.
items[].fields.pointsarrayOne entry per day, oldest first: date, search_index, composite_index, notes, impressions, views, engagements.notes, impressions, views, engagements: always null here
nullFields Douyin cannot give

Read null as “Douyin did not give this”, not as zero. These are always null on this call:

  • fields.points.notesOne entry per day, oldest first: date, search_index, composite_index, notes, impressions, views, engagements.
  • fields.points.impressionsOne entry per day, oldest first: date, search_index, composite_index, notes, impressions, views, engagements.
  • fields.points.viewsOne entry per day, oldest first: date, search_index, composite_index, notes, impressions, views, engagements.
  • fields.points.engagementsOne entry per day, oldest first: date, search_index, composite_index, notes, impressions, views, engagements.

Every item also has platform, id, ref, approx and type; the response around the items is the same on every call. Response format

What to expect.

One call returns the first page only, up to 5 items, with no cursor, for 4 credits.
A call that runs and finds nothing is a successful call: status is "empty", items is empty, and it costs 4 credits.
On this call Douyin cannot tell a video that does not exist from one with no data: both come back as empty, and both are charged.

1 call per second per key, 5 after a purchase; going over is not charged. Rate limits

A failed call costs 0 credits and is never retried on its own. Error codes

Once connected over MCP, these questions use it.

  1. Get the day-by-day search index and composite index of a keyword on Douyin over a date range, from 巨量算数 (the Douyin index), with the daily averages of the period, of the one before and of a year earlier (since: 2026-09-01T00:00:00Z, until: 2026-09-30T00:00:00Z, keyword: 咖啡).
    call {"op":"douyin.keyword_history","since":"2026-09-01T00:00:00Z","until":"2026-09-30T00:00:00Z","keyword":"咖啡"}
    4 credits

Questions.
Short answers.

Everything on Douyin
Do I need a Douyin account or Douyin's own API access?
No. You only need a SocialToAI key. The call returns content and account information publicly visible on Douyin; you never sign in to Douyin or apply for anything there.
Can I get the next page?
No. On Douyin this interface gives its first page only (up to 5 items): the response carries no cursor, and page.has_more is always false.
What does “Preview” mean here?
Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.

Your AI is one URL away
from all of social media.

100 credits on sign-up, no card needed