Messages
List Chat Messages
Returns messages from a chat conversation. Cursor-based pagination using the last message ID. Requires permission api_messages_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.
user_id*integerFan/user ID of the conversation.
Query Parameters
limitintegerNumber of messages. Default 10. Min 1, max 100.
orderstringdesc(default) orasc.skip_usersstringall(default) ornone.idintegerCursor — pass the last message's
idfrom the previous page.first_idintegerInclude this message ID as the first result. Use with
order=descto jump to a specific message.last_idintegerInclude this message ID as the first result. Use with
order=asc. Note: response list order is also inverted.filterstringCurrently only
pinnedis supported.
Response Fields
data.list[].responseTypestringAlways
"message".data.list[].idintegerMessage ID.
data.list[].textstringMessage text (can contain HTML).
data.list[].giphyIdstring | nullAttached Giphy ID, if any.
data.list[].lockedTextbooleanTrue when text is hidden behind a paywall.
data.list[].isFreebooleanTrue when the message is free (price = 0).
data.list[].priceintegerPPV price.
0if free.data.list[].mediaCountintegerNumber of media attachments.
data.list[].mediaarrayMedia items attached to the message.
data.list[].previewsarrayVault media IDs used as PPV previews.
data.list[].isTipbooleanTrue if the message represents a tip.
data.list[].isLikedbooleanTrue if the recipient has liked the message.
data.list[].isPinnedbooleanTrue if the message is currently pinned.
data.list[].canBePinnedbooleanWhether the message can be pinned.
data.list[].isFromQueuebooleanTrue if the message was sent via the queue (e.g. mass message).
data.list[].fromUserobjectSender summary —
{ id, _view }.data.list[].createdAtstringISO 8601 timestamp of creation.
data.list[].changedAtstringISO 8601 timestamp of last change.
data.list[].cancelSecondsintegerSeconds remaining in which the sender can still unsend.
data.list[].isOpenedbooleanTrue if the recipient has opened the message.
data.list[].isNewbooleanTrue if the message is unread for the recipient.
data.hasMorebooleanWhether more pages exist.
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[].responseType | string | Always "message". |
| data.list[].id | integer | Message ID. |
| data.list[].text | string | Message text (can contain HTML). |
| data.list[].giphyId | string | null | Attached Giphy ID, if any. |
| data.list[].lockedText | boolean | True when text is hidden behind a paywall. |
| data.list[].isFree | boolean | True when the message is free (price = 0). |
| data.list[].price | integer | PPV price. 0 if free. |
| data.list[].mediaCount | integer | Number of media attachments. |
| data.list[].media | array | Media items attached to the message. |
| data.list[].previews | array | Vault media IDs used as PPV previews. |
| data.list[].isTip | boolean | True if the message represents a tip. |
| data.list[].isLiked | boolean | True if the recipient has liked the message. |
| data.list[].isPinned | boolean | True if the message is currently pinned. |
| data.list[].canBePinned | boolean | Whether the message can be pinned. |
| data.list[].isFromQueue | boolean | True if the message was sent via the queue (e.g. mass message). |
| data.list[].fromUser | object | Sender summary — { id, _view }. |
| data.list[].createdAt | string | ISO 8601 timestamp of creation. |
| data.list[].changedAt | string | ISO 8601 timestamp of last change. |
| data.list[].cancelSeconds | integer | Seconds remaining in which the sender can still unsend. |
| data.list[].isOpened | boolean | True if the recipient has opened the message. |
| data.list[].isNew | boolean | True if the message is unread for the recipient. |
| data.hasMore | boolean | Whether more pages exist. |
| 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/sample_user_id/messages?limit=20&order=desc&skip_users=sample_skip_users" \
--header "Authorization: Bearer YOUR_API_KEY"Response
200