Engagement
List Top Stories by Engagement
Paginated leaderboard of top-performing stories by a single engagement metric. Parallel to List Top Posts — same shape, same pagination, but for stories. Stories aren't purchasable, so by=purchases is not valid here. Requires permission api_engagement_list_stories.
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.
by*stringRanking metric. One of
tips,views,likes,comments.
Query Parameters
start_datestringWindow start. Default 2 years ago, UTC.
end_datestringWindow end. Default end of today, UTC.
offsetintegerRows to skip. Page size is fixed at 10.
Response Fields
data.items[]arrayStory objects, ranked by
{by}descending.data.items[].idintegerOnlyFans story ID.
data.items[].userIdintegerThe creator's user ID (always the queried account).
data.items[].createdAtstringISO 8601 publish time.
data.items[].mediaarrayStory media (typically 1 entry). Same media shape as posts.
data.items[].tipsAmountstringFormatted total tips (e.g.
"$200").data.items[].tipsAmountRawnumberNumeric total tips.
data.items[].tipsCountintegerNumber of distinct tippers.
data.items[].likesCountintegerLikes.
data.items[].commentsCountintegerComments.
data.items[].viewersCountintegerTotal viewers.
data.items[].viewersarrayPreview of viewer user objects (first 4-5). Use List Story Viewers for the full paginated list.
data.items[].isHighlightCoverbooleantrueif this story is the cover of a saved highlight.data.items[].isLastInHighlightbooleantrueif this is the final story in its highlight.data.hasMorebooleanWhether more pages are available.
dataobject | arrayEndpoint-specific payload. See the fields below for this route.
_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.items[] | array | Story objects, ranked by {by} descending. |
| data.items[].id | integer | OnlyFans story ID. |
| data.items[].userId | integer | The creator's user ID (always the queried account). |
| data.items[].createdAt | string | ISO 8601 publish time. |
| data.items[].media | array | Story media (typically 1 entry). Same media shape as posts. |
| data.items[].tipsAmount | string | Formatted total tips (e.g. "$200"). |
| data.items[].tipsAmountRaw | number | Numeric total tips. |
| data.items[].tipsCount | integer | Number of distinct tippers. |
| data.items[].likesCount | integer | Likes. |
| data.items[].commentsCount | integer | Comments. |
| data.items[].viewersCount | integer | Total viewers. |
| data.items[].viewers | array | Preview of viewer user objects (first 4-5). Use List Story Viewers for the full paginated list. |
| data.items[].isHighlightCover | boolean | true if this story is the cover of a saved highlight. |
| data.items[].isLastInHighlight | boolean | true if this is the final story in its highlight. |
| data.hasMore | boolean | Whether more pages are available. |
| data | object | array | Endpoint-specific payload. See the fields below for this route. |
| _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/engagement/stories/sample_by?start_date=2026-01-01%2000%3A00%3A00&end_date=2026-01-31%2023%3A59%3A59&offset=0" \
--header "Authorization: Bearer YOUR_API_KEY"Response
200