/v1/call/douyin.keyword_historyPreviewDouyin 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.
Last updated:
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": "咖啡"}{ "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.
3 parameters.
All required.
Send them as a JSON body with POST. Your key goes in the Authorization header, never in the URL.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| keyword | string | Required | — | One keyword, at most 50 characters and without a comma; letter case does not matter |
| since | datetime | Required | — | The first day wanted: the China-time (UTC+8) calendar day this moment falls on; 2026-09-01 means 1 September |
| until | datetime | Required | — | 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 |
The fields of each item.
What Douyin cannot give is marked.
| Field | Type | Meaning |
|---|---|---|
| items[].title | string | The entry's title or name. |
| items[].url | string | A link that opens it; null where the platform's list has none. |
| items[].rank | integer | Position on a board, from 1. |
| items[].heat | integer | The platform's heat score. |
| items[].fields.points | array | One entry per day, oldest first: date, search_index, composite_index, notes, impressions, views, engagements.notes, impressions, views, engagements: always null here |
nullFields Douyin cannot giveRead 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.
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.
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: 咖啡).
4 creditscall {"op":"douyin.keyword_history","since":"2026-09-01T00:00:00Z","until":"2026-09-30T00:00:00Z","keyword":"咖啡"}