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.fansmetric.comAuthorization
defaultAuthorizationBearer <token>Send your FansMetric API key as a Bearer token in the Authorization header.
In: header
Path Parameters
account_id*integerOnlyFans numeric account ID.
Query Parameters
limitintegerPage size. Default 10. Min 1, max 100 (anything higher is clamped to 100).
media_typestringOnly return posts that carry a media type:
photos,videos,audios, ormedias(any of the three). Omit to include text-only posts.labelstringOnly posts carrying this label. Takes a numeric label ID from List Post Labels, or an archive bucket name:
archivedfor the Archive,private_archivedfor the Private Archive.exclude_labelstringThe inverse of
label— leave out posts carrying it. Accepts the same values.querystringFree-text search across post captions.
pinnedbooleantruereturns only pinned posts,falsereturns everything except them. Omit for the whole feed.orderstringSort 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.countersbooleanInclude the
countersblock of account totals — useful for tab badges. Defaulttrue; sendfalseto skip it.before_publish_timestringCursor for continuing a descending feed. Pass the previous page's
tailMarker._pagination.next_pagefills this in for you.after_publish_timestringCursor for continuing an ascending feed. Pass the previous page's
tailMarker._pagination.next_pagefills this in for you.
Response Fields
data.list[]arrayThe posts on this page.
data.list[].idintegerOnlyFans post ID. Use it for every other Posts route.
data.list[].postedAtstringISO timestamp the post was published — the one to show in a UI.
data.list[].postedAtPrecisestringThe same publish time as a fractional epoch string. This is what
tailMarkerreports and what the two cursor parameters take.data.list[].textstringCaption as HTML.
data.list[].rawTextstringCaption as plain text — the safer field for list rows and search indexes.
data.list[].authorobjectShort author reference (
id,_view). Always the account you queried; OnlyFans leaves out the full user object here because every row would repeat it.data.list[].mediaCountintegerHow many media items are attached.
data.list[].media[]arrayAttached media. Each item carries a
filesobject withfull,thumb,previewandsquarePreviewURLs.data.list[].tipsAmountstringTip total for the post, pre-formatted for display, e.g.
$0.data.hasMorebooleanWhether another page exists.
data.tailMarkerstringPublish time of the last row on this page — the value that seeds the next page's cursor.
data.headMarkerstringPublish time of the first row on this page.
data.countersobjectAccount totals:
postsCount,photosCount,videosCount,audiosCount,mediasCount,streamsCount,archivedPostsCount,privateArchivedPostsCount. Present only whencountersis true.dataobject | arrayEndpoint-specific payload. See the fields below for this route.
_pagination.next_pagestringRelative URL for the next page, with the cursor or offset already applied. Append it to the API base URL and send it as-is. Omitted entirely on the last page.
_meta._credits.usedintegerCredits consumed by this request (currently always
1)._meta._rate_limits.limit_minuteintegerMaximum requests per minute for the organization.
_meta._rate_limits.remaining_minuteintegerRemaining requests in the current minute window.
_meta._rate_limits.limit_dayintegerMaximum requests per day for the organization.
_meta._rate_limits.remaining_dayintegerRemaining requests in the current day window.
| Field | Type | Description |
|---|---|---|
| data.list[] | array | The posts on this page. |
| data.list[].id | integer | OnlyFans post ID. Use it for every other Posts route. |
| data.list[].postedAt | string | ISO timestamp the post was published — the one to show in a UI. |
| data.list[].postedAtPrecise | string | The same publish time as a fractional epoch string. This is what tailMarker reports and what the two cursor parameters take. |
| data.list[].text | string | Caption as HTML. |
| data.list[].rawText | string | Caption as plain text — the safer field for list rows and search indexes. |
| data.list[].author | object | Short author reference (id, _view). Always the account you queried; OnlyFans leaves out the full user object here because every row would repeat it. |
| data.list[].mediaCount | integer | How many media items are attached. |
| data.list[].media[] | array | Attached media. Each item carries a files object with full, thumb, preview and squarePreview URLs. |
| data.list[].tipsAmount | string | Tip total for the post, pre-formatted for display, e.g. $0. |
| data.hasMore | boolean | Whether another page exists. |
| data.tailMarker | string | Publish time of the last row on this page — the value that seeds the next page's cursor. |
| data.headMarker | string | Publish time of the first row on this page. |
| data.counters | object | Account totals: postsCount, photosCount, videosCount, audiosCount, mediasCount, streamsCount, archivedPostsCount, privateArchivedPostsCount. Present only when counters is true. |
| data | object | array | Endpoint-specific payload. See the fields below for this route. |
| _pagination.next_page | string | Relative URL for the next page, with the cursor or offset already applied. Append it to the API base URL and send it as-is. Omitted entirely on the last page. |
| _meta._credits.used | integer | Credits consumed by this request (currently always 1). |
| _meta._rate_limits.limit_minute | integer | Maximum requests per minute for the organization. |
| _meta._rate_limits.remaining_minute | integer | Remaining requests in the current minute window. |
| _meta._rate_limits.limit_day | integer | Maximum requests per day for the organization. |
| _meta._rate_limits.remaining_day | integer | Remaining requests in the current day window. |
curl --request GET "https://public-api.fansmetric.com/v1/100000001/posts?limit=20&media_type=sample_media_type&label=sample_label" \
--header "Authorization: Bearer YOUR_API_KEY"Response
200