List an account’s posts
An account’s posts, newest first and every kind, 50 a page, going back through roughly the newest 2,000 posts Weibo lists with nextCursor. With mediaOnly, only its posts that carry photos or video, which reach further back. 1 credit per 50 posts returned, or with mediaOnly 1 per 48.
/user-posts Accounts https://api.fetchlayer.dev/weibo/user-posts Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
user string required An account: its numeric id, its profile link, its custom address (weibo.com/<name>), or its display name with or without @. A display name is the least exact: when you have the id or link, pass that.
mediaOnly boolean optional true lists only the account’s posts that carry photos or video, which reach further back than the full list, about 48 to a page. Without it the list is every kind of post, 50 to a page. (default: false)
limit integer optional Maximum posts returned, up to 500, or -1 for the maximum. (default: 20)
cursor string optional Continue a mediaOnly listing from a previous response’s nextCursor, passed back unchanged with the same request. mediaOnly: true is required alongside it; a cursor without it is a 400, because a plain listing has no further page.
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
user-posts
List an account’s 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.
userId string The account’s numeric id.
mediaOnly boolean Whether this is the photo-and-video listing.
posts object[] The posts, newest first. Long posts are shortened here (textTruncated); post-detail returns the full text.
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/user-posts" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"user":"1642634100","limit":20}'Response
{
"transport": "weibo",
"skippedRecords": [],
"scrapedAt": "2026-10-15T15:24:51.584Z",
"notes": [
"Long posts are shortened in this list (textTruncated); post-detail returns the full text."
],
"pagesFetched": 1,
"userId": "1642634100",
"mediaOnly": false,
"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": "1642634100",
"screenName": "新浪科技",
"url": "https://weibo.com/u/1642634100",
"avatarUrl": "https://wx2.sinaimg.cn/orj480/001Nakaoly8h8vh6pbz8ij60c60c4q3602.jpg",
"verified": true,
"verifiedReason": "新浪科技官方微博",
"followersCount": null,
"followersCountText": "2380万"
},
"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": 10,
"hasMore": false,
"nextCursor": null
}