Direct Messages
Direct Message Statistics
Returns per-direct-message (1:1) delivery and engagement stats — same per-message shape as the mass-message stats endpoint, but scoped to direct messages instead of mass blasts. Requires permission api_direct_messages_stats.
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 messages to return. Default 10. Min 1, max 100.
start_datestringEarliest message date (UTC). Default 2 years ago. Format
YYYY-MM-DD HH:MM:SS; a bare ISO 8601 timestamp is also accepted, but a trailing UTC offset such as+00:00is not — strip it. Hold this value fixed while paginating.end_datestringLatest message date (UTC), exclusive. Default end of today. Doubles as the cursor for default (non-search) pagination — prefer following
_pagination.next_pageover setting it by hand. FormatYYYY-MM-DD HH:MM:SS.querystringText search across message bodies. When set, switches pagination to offset-based.
offsetintegerPagination offset. Only used when
queryis set; ignored otherwise.
Response Fields
data.items[]arrayPer-DM stat rows (
id,date,text,mediaCount,media,sentCount,viewedCount,isFree,isTip,template, ...). Shape is determined by upstream OnlyFans and proxied as-is.data.hasMorebooleanWhether more pages 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.items[] | array | Per-DM stat rows (id, date, text, mediaCount, media, sentCount, viewedCount, isFree, isTip, template, ...). Shape is determined by upstream OnlyFans and proxied as-is. |
| data.hasMore | boolean | Whether more pages 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/direct-messages?limit=20&start_date=2026-01-01%2000%3A00%3A00&end_date=2026-01-31%2023%3A59%3A59" \
--header "Authorization: Bearer YOUR_API_KEY"Response
200