Chats
List Chats
Lists chat conversations for an OnlyFans account. Returned in real time from OnlyFans. Requires permission api_chats_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
limitintegerNumber of chats to return. Default 10. Min 1, max 100.
offsetintegerOffset for pagination. Default 0.
skip_usersstringall(default) omits user objects in the response;noneincludes them.orderstringrecent(default) orold.filterstringFilter chats:
priority,pinned,unread, orwho_tipped. Mutually exclusive withlist_id.list_idintegerCustom list ID (from
GET /v1/{account_id}/lists). Mutually exclusive withfilter.querystringSearch query — filters chats by username or display name.
Response Fields
data.list[].withUserobjectFan in the conversation. When
skip_users=all, contains onlyidand_view.data.list[].lastMessageobject | nullMost recent message —
nullif there are no messages.data.list[].lastMessage.idintegerMessage ID of the most recent message.
data.list[].lastMessage.textstringText content.
data.list[].lastMessage.isFreebooleanWhether the message is free.
data.list[].lastMessage.createdAtstringISO 8601 timestamp.
data.list[].lastMessage.mediaCountintegerMedia attachment count.
data.list[].lastMessage.isTipbooleanWhether the message represents a tip.
data.list[].lastMessage.fromUserobjectSender summary
{ id, _view }.data.list[].lastMessage.isOpenedbooleanWhether a paid message has been opened/purchased.
data.list[].lastMessage.giphyIdstring | nullGiphy ID if the message is a GIF.
data.list[].lastMessage.lockedTextbooleanWhether text is locked behind a paywall.
data.list[].canSendMessagebooleanWhether the account can send messages to this user.
data.list[].canGoToProfilebooleanWhether the user's profile is accessible.
data.list[].unreadMessagesCountintegerNumber of unread messages.
data.list[].lastReadMessageIdinteger | nullID of the last message read by the account.
data.list[].hasUnreadTipsbooleanWhether there are unread tips.
data.list[].isMutedNotificationsbooleanWhether notifications are muted for this chat.
data.list[].hasPurchasedFeedbooleanWhether the user has purchased the feed.
data.list[].countPinnedMessagesintegerNumber of pinned messages in this chat.
data.hasMorebooleanWhether more chats are available.
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[].withUser | object | Fan in the conversation. When skip_users=all, contains only id and _view. |
| data.list[].lastMessage | object | null | Most recent message — null if there are no messages. |
| data.list[].lastMessage.id | integer | Message ID of the most recent message. |
| data.list[].lastMessage.text | string | Text content. |
| data.list[].lastMessage.isFree | boolean | Whether the message is free. |
| data.list[].lastMessage.createdAt | string | ISO 8601 timestamp. |
| data.list[].lastMessage.mediaCount | integer | Media attachment count. |
| data.list[].lastMessage.isTip | boolean | Whether the message represents a tip. |
| data.list[].lastMessage.fromUser | object | Sender summary { id, _view }. |
| data.list[].lastMessage.isOpened | boolean | Whether a paid message has been opened/purchased. |
| data.list[].lastMessage.giphyId | string | null | Giphy ID if the message is a GIF. |
| data.list[].lastMessage.lockedText | boolean | Whether text is locked behind a paywall. |
| data.list[].canSendMessage | boolean | Whether the account can send messages to this user. |
| data.list[].canGoToProfile | boolean | Whether the user's profile is accessible. |
| data.list[].unreadMessagesCount | integer | Number of unread messages. |
| data.list[].lastReadMessageId | integer | null | ID of the last message read by the account. |
| data.list[].hasUnreadTips | boolean | Whether there are unread tips. |
| data.list[].isMutedNotifications | boolean | Whether notifications are muted for this chat. |
| data.list[].hasPurchasedFeed | boolean | Whether the user has purchased the feed. |
| data.list[].countPinnedMessages | integer | Number of pinned messages in this chat. |
| data.hasMore | boolean | Whether more chats are available. |
| 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/chats?limit=20&offset=0&skip_users=sample_skip_users" \
--header "Authorization: Bearer YOUR_API_KEY"Response
200