Posts

List Posts

Returns the creator's own post feed — the same list the Posts tab shows inside OnlyFans. Filter by media type, label, caption text and pinned state, and sort by publish date, likes or tips. This feed pages by cursor rather than page number, so walk it by following _pagination.next_page instead of building a numbered pager. Requires permission api_posts_list.

https://public-api.buffmetrics.com
GET/v1/{account_id}/posts
Bearer

Authorization

default
AuthorizationBearer <token>

Send your FansMetric API key as a Bearer token in the Authorization header.

In: header

Path Parameters

  • account_id*integer

    OnlyFans numeric account ID.

Query Parameters

  • limitinteger

    Page size. Default 10. Min 1, max 100 (anything higher is clamped to 100).

  • media_typestring

    Only return posts that carry a media type: photos, videos, audios, or medias (any of the three). Omit to include text-only posts.

  • labelstring

    Only posts carrying this label. Takes a numeric label ID from List Post Labels, or an archive bucket name: archived for the Archive, private_archived for the Private Archive.

  • exclude_labelstring

    The inverse of label — leave out posts carrying it. Accepts the same values.

  • querystring

    Free-text search across post captions.

  • pinnedboolean

    true returns only pinned posts, false returns everything except them. Omit for the whole feed.

  • orderstring

    Sort order. One of publish_date_desc (default), publish_date_asc, favorites_count_desc, tips_summ_desc, tips_summ_asc. Any other value returns 400 rather than quietly falling back.

  • countersstring

    Include the counters block of account totals — useful for tab badges. Default true; send false to skip it.

  • before_publish_timestring

    Cursor for continuing a descending feed. Pass the previous page's tailMarker. _pagination.next_page fills this in for you.

  • after_publish_timestring

    Cursor for continuing an ascending feed. Pass the previous page's tailMarker. _pagination.next_page fills this in for you.

curl --request GET "https://public-api.buffmetrics.com/v1/acct_XXXXX/posts?limit=20&media_type=sample_media_type&label=sample_label" \
  --header "Authorization: Bearer YOUR_API_KEY"

Response

200
{
"data":{
"list":[
0:{
"author":{
"id":12345678
"_view":"a"
}
"responseType":"post"
"id":2678855749
"postedAt":"2026-08-16T16:33:27+00:00"
"postedAtPrecise":"1786898007.000000"
"text":"<p>behind the scenes from today's shoot 💖</p>"
"rawText":"behind the scenes from today's shoot 💖"
"canDelete":true
"canComment":true
"canEdit":true
"mediaCount":1
"isMediaReady":true
"canToggleFavorite":true
"tipsAmount":"$0"
"canViewMedia":true
"media":[
0:{
"id":987654321
"type":"photo"
"canView":true
"isReady":true
"duration":0
"files":{
"full":{
"url":"https://cdn2.onlyfans.com/files/..."
}
"thumb":{
"url":"https://cdn2.onlyfans.com/files/..."
}
"preview":{
"url":"https://cdn2.onlyfans.com/files/..."
}
"squarePreview":{
"url":"https://cdn2.onlyfans.com/files/..."
}
}
}
]
}
]
"hasMore":true
"headMarker":"1786898007.000000"
"tailMarker":"1786872300.000000"
"counters":{
"audiosCount":0
"photosCount":278
"videosCount":18
"mediasCount":296
"postsCount":279
"streamsCount":0
"archivedPostsCount":1
"privateArchivedPostsCount":77
}
}
"_pagination":{
"next_page":"/v1/12345678/posts?limit=10&order=publish_date_desc&before_publish_time=1786872300.000000"
}
"_meta":{
"_credits":{
"used":1
}
"_rate_limits":{
"limit_minute":1000
"remaining_minute":999
"limit_day":50000
"remaining_day":49999
}
}
}