TikTok trending API: browse without a query is flag-gated
Sume trending search needs a query on production. Browse with no query, limit up to 100 and relevance floors are dev-only until a flag is set. The differences.

On production, Sume's POST /v1/trending-videos/search requires a query. Calling it with none works only where the rebuilt browse feed is on: the dev API, or an environment where SUME_COM_TRENDING_VIDEOS_REBUILD_ENABLED is exactly 1 or true. So a script that browses with no query on dev and then ships to production will start failing for a missing field.
Trend lists make a good query source. Exploding Topics' September 21 update lists massage comb, egg weights, train case and wireless meat thermometer among the fastest-growing product searches (Exploding Topics, read 2026-10-04); any of those is a valid query on both contracts.
Two contracts side by side
This comes from the trending videos docs as read on 2026-10-04. The page states production stays off until the flag is set; confirm current behaviour in the live OpenAPI before depending on either column.
| Behaviour | Production, flag off | Rebuild on |
|---|---|---|
| query | Required | Optional; omitted means browse |
| limit | 1 to 50, default 10 | 1 to 100; search default 20, browse default 48 |
| Relevance | Legacy generic ranker, no extra floor | Match on caption, hashtag, mention or author, plus an engagement floor |
| Padding | Fills toward the limit | Off-topic and stale hits are not padded back |
| Extra fields | None | params.mode (browse or search) and params.cached |
| Browse region | Not applicable | With no region, fans out across US, GB and KR feeds |
A call that works on both
Send a query and the request is valid under either contract. Each accepted call reserves and captures $0.10 of Sume usage per the docs; summary_mode: "metadata" is included, and repeat browse calls may be served from cache. summary_mode: "transcript" currently returns metadata plus an unsupported warning, and download values above zero return an unsupported warning because nothing is mirrored.
import os, requests
resp = requests.post(
"https://api.sume.com/v1/trending-videos/search",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
json={
"platform": "tiktok",
"query": "massage comb",
"window": "this-month",
"limit": 10,
"region": "US",
},
timeout=60,
)
print(resp.status_code)
for video in resp.json().get("videos", [])[:3]:
print(video.get("url"), video.get("metrics"))
The results are public watch URLs, cover thumbnails, handles and metrics, not video files, so research here feeds a brief rather than a remix source; see what you can remix. Window defaults and region behaviour are in the related posts.
Sources
Related posts
More in Media tools
- Transparent PNG: generate it or cut it out?
Sume lists a background option on ChatGPT Image 2.5: auto, transparent or opaque. Generate a transparent PNG directly, or cut out an existing image.
- Trim the silent lead-in: first spoken word from STT, then video trim
A clip that starts with two seconds of nothing loses viewers. Read the first word's start time from STT, then cut with video trim, exact or keyframe.
- Video analyses: include_transcript false leaves scene audio null
On the legacy Sume video-analyses resource, scene audio is null unless include_transcript was true. Handle both shapes, and know what replaces it for new work.
- Video analyses keyframes: one still per second per scene
A legacy Sume video analysis gives a still for each whole second of a scene plus a keyframe_url near 40%. How stills fail and how to pick your own cover.
Written by Sume