Search posts
Posts matching a keyword or a #topic#, read through time. latest (default), all, original (no reposts) and verified (from verified accounts) return every matching post, newest first, up to 50 a page, and continue with nextCursor back years. top (Weibo’s relevance picks), hot (its popular picks) and videos are ranked and give one page per time range: move since and until to read other periods. media (posts from news and media accounts) and images give one page and take no time range. combined gives the first page of every filter together, and costs 9 credits. since and until limit the period. These are the posts Weibo’s public search shows, which can leave out posts Weibo filters from search, so a result is what search shows rather than every post ever made. Search has no region filter. 1 credit per 50 posts returned, minimum 1.
/search-posts Search & trending https://api.fetchlayer.dev/weibo/search-posts Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
query string required The search term, up to 100 characters. Wrap a topic in # to search the topic, e.g. #华为#. Chinese terms match far more posts than English ones.
tab string optional Which posts: latest, all, original, verified, top, hot, videos, media, images, combined. latest (default), all, original (no reposts) and verified (from verified accounts) return every matching post, newest first, up to 50 a page, and continue with nextCursor back years. top (Weibo’s relevance picks), hot (its popular picks) and videos are ranked and give one page per time range: move since and until to read other periods. media (posts from news and media accounts) and images give one page and take no time range. combined gives the first page of every filter together, and costs 9 credits. Case-insensitive. (default: latest)
since string optional Only posts from this time on: a date (2026-10-01, read as the start of that day in China time) or an ISO 8601 date-time (2026-10-01T08:00:00Z). A 400 with tab images or media.
until string optional Only posts up to this time: a date (which includes the whole day, China time) or an ISO 8601 date-time. A 400 with tab images or media.
limit integer optional Maximum posts returned, up to 1000, or -1 for the maximum. Each 50 posts returned is 1 credit, minimum 1. (default: 50)
cursor string optional Continue from a previous response’s nextCursor, passed back unchanged with the same query, tab, since and until. Works on tabs latest, all, original and verified.
format string optional json or markdown, lowercase; any other value is a 400. Over MCP, markdown returns the result rendered as text; the REST API accepts it and returns JSON. (default: json)
timeoutMs integer optional Time limit for the whole request, in milliseconds (1000–120000); a value outside that range is a 400. When it runs out, a paged request returns what it has with nextCursor, billed for the pages it read; a request with nothing to return yet fails with a 503 you can retry, marked with the response header X-Timeout-Source: caller.
Response Fields
search-posts
Search posts
transport string The data source: always the platform id, "weibo".
scrapedAt string When the result was produced (ISO 8601).
notes string[] Caveats you can act on: a list that ends where Weibo stops showing more, long posts shortened in a list, paid placements left out. Empty when there are none. An empty result always comes with a note explaining it.
skippedRecords object[] Records Weibo sent that could not be read, each as { id, reason, fieldsPresent }; id may be null. Normally empty. One unreadable record never costs the rest of the response or the cursor.
pagesFetched number Full pages of results returned, minimum 1 — 20 comments or replies, 50 search posts, 48 media posts — which is what the request costs: one credit each.
query string The search term.
tab string The tab searched.
since string | null The start of the period searched, or null.
until string | null The end of the period searched, or null.
newestFirst boolean True on latest, all, original and verified, where posts come newest first; false where Weibo ranks them.
posts object[] The matching posts. Long posts are shortened here (textTruncated); post-detail returns the full text. The author’s follower count is Weibo’s rounded display (followersCountText); user-profile has the exact figure.
posts[].id string The post’s numeric id, which post-detail and post-comments accept.
posts[].shortId string The id in post links (RmPD8ERtm). post-detail and post-comments accept it too.
posts[].url string Link to the post.
posts[].text string The post’s text, with #topics# and @mentions as written.
posts[].textTruncated boolean True when a list shortened a long post. post-detail always returns the full text.
posts[].createdAt string When it was posted (ISO 8601, UTC).
posts[].postedFrom string | null The province or country Weibo says it was posted from, such as 广东, or null.
posts[].source string | null The app or label Weibo shows under the post.
posts[].author.id string The account’s numeric id, which user-profile and user-posts accept.
posts[].author.screenName string The display name.
posts[].author.url string Link to the profile.
posts[].author.avatarUrl string | null Avatar image.
posts[].author.verified boolean Whether Weibo shows a verification badge.
posts[].author.verifiedReason string | null Weibo’s verification text, such as 新浪科技官方微博, or null.
posts[].author.followersCount number | null Followers as an exact figure where Weibo publishes one here, else null. user-profile always has the exact figure.
posts[].author.followersCountText string | null Followers as Weibo displays them, rounded (2380万 is 23.8 million).
posts[].stats object reposts, comments, likes and reads. Exact figures, not the rounded ones on the page. A null counter means Weibo did not publish that value, never zero; reads is often null.
posts[].roundedStats string[] Which counters in stats came back rounded. Empty means every counter is exact, which is the normal case.
posts[].topics string[] The #topics# the post carries, without the #.
posts[].media object[] Photos and video, in order. Each has kind (image, gif, video or live-photo), url, downloadUrl, width, height, durationSeconds and coverUrl.
posts[].media[].url string Weibo’s own link to the file. It opens only from Weibo’s pages; use downloadUrl.
posts[].media[].downloadUrl string A https://api.fetchlayer.dev/weibo/media link that opens anywhere and delivers the photo or video. Each request to it costs 1 credit.
posts[].editCount number | null How many times the post was edited, or null.
posts[].isPinned boolean Whether the author pinned it to their profile.
posts[].mediaTruncated boolean True when a list showed fewer photos than the post has. post-detail returns every one.
posts[].repostOf object | null The post this one reposts, in the same shape, or null for an original post.
postCount number How many posts are in this response.
hasMore boolean Whether more posts exist beyond what was returned.
nextCursor string | null An opaque token to pass back unchanged as cursor, with the same request, to continue where this response stopped. null when there is nothing further.
Request
curl -X POST "https://api.fetchlayer.dev/weibo/search-posts" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"query":"华为","tab":"latest","since":"2026-10-01","limit":50}'Response
{
"transport": "weibo",
"skippedRecords": [],
"scrapedAt": "2026-10-15T15:24:51.572Z",
"notes": [
"Long posts are shortened in search results (textTruncated); post-detail returns the full text."
],
"pagesFetched": 1,
"query": "华为",
"tab": "latest",
"since": "2026-10-01",
"until": null,
"newestFirst": true,
"posts": [
{
"id": "5354374692867529",
"shortId": "RmOx7c1Yt",
"url": "https://weibo.com/6420207784/RmOx7c1Yt",
"text": "深圳11月1日起,每天0时至24时,全市禁止机动车鸣喇叭,有效期5年 … #深圳11月1日起全域全天禁鸣喇叭#",
"textTruncated": false,
"createdAt": "2026-10-15T12:04:29.000Z",
"postedFrom": "广东",
"source": "搞笑幽默视频博主",
"author": {
"id": "6420207784",
"screenName": "1024专员",
"url": "https://weibo.com/u/6420207784",
"verified": true,
"verifiedReason": "搞笑幽默视频博主",
"followersCount": null,
"followersCountText": "172.8万"
},
"stats": {
"reposts": 33,
"comments": 234,
"likes": 400,
"reads": null
},
"roundedStats": [],
"topics": [
"深圳11月1日起全域全天禁鸣喇叭"
],
"media": [
{
"kind": "image",
"url": "https://wx1.sinaimg.cn/mw2000/0070uxksgy1ii3aj0oaluj30wr1ii104.jpg",
"downloadUrl": "https://api.fetchlayer.dev/weibo/media?url=https%3A%2F%2Fwx1.sinaimg.cn%2Fmw2000%2F0070uxksgy1ii3aj0oaluj30wr1ii104.jpg",
"width": 1179,
"height": 1962,
"durationSeconds": null,
"coverUrl": null
}
],
"editCount": null,
"isPinned": false,
"mediaTruncated": false,
"repostOf": null
}
],
"postCount": 50,
"hasMore": true,
"nextCursor": "eyJ2IjoxLCJyIjoic2VhcmNoLXBvc3RzIiwi…"
}