Mass Messages
Send Mass Message
Sends a mass message to selected fan lists and/or individual users. Supports text, media, PPV, GIFs, scheduling, and audience filters. Requires permission api_mass_messages_send.
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.
Request Body
application/jsontextstringMessage text (HTML supported). Sent on every call — defaults to empty string when omitted. Required unless
mediaFilesorgiphyIdis set.lockedTextbooleanBoolean. Hide text behind paywall. Sent on every call — defaults to
falsewhen omitted.mediaFilesarrayArray of integers (vault media IDs). Sent on every call — defaults to
[]when omitted.pricestringNumber. PPV price in USD (0 = free, 3-200 = paid). Sent on every call — defaults to
0when omitted.previewsarrayArray of integers (preview media IDs for PPV, must be a subset of
mediaFiles). Sent on every call — defaults to[]when omitted.rfTagstringArray of integers (release-form creator IDs). Sent on every call — defaults to
[]when omitted.rfGueststringArray of integers (release-form guest IDs). Always sent — currently forced to
[]server-side.rfPartnerstringArray of integers (release-form partner IDs). Always sent — currently forced to
[]server-side.filtersstringAudience filters object. Sent on every call — defaults to
{}when omitted. Supported keys:totalSpent,tips,duration,inactive,online,signedUpAfter,signedUpBefore.userListsstringArray of list IDs (
stringfor system slugs,integerfor custom lists). Only forwarded when non-empty. Required unlessuserIdsis provided. Example:["fans"],[47382],["fans", 47382].userIdsstringArray of integers (individual user IDs). Only forwarded when non-empty. Required unless
userListsis provided.excludedListsstringArray of list IDs (
stringsystem slug orintegercustom ID). Only forwarded when non-empty.recommendersstringInteger. Set to
1to send only to recommended users. Only forwarded when set.giphyIdstringString. Giphy GIF ID — get from
/v1/gifs/trendingor/v1/gifs/search. Only forwarded when set.isScheduledstringInteger. Set to
1to schedule. Only forwarded when set; pairs withscheduledDate.scheduledDatestringISO 8601 timestamp for the scheduled send. Only forwarded when scheduling. Required when
isScheduled=1.
Response Fields
data.idintegerQueue ID. Use this to cancel / look up the mass message.
data.datestringISO 8601 timestamp of creation.
data.isReadybooleanTrue when the queue item is ready to send / currently sending.
data.isDonebooleanTrue when sending is complete.
data.totalintegerTotal recipients.
-1or0while the count is still being resolved.data.pendingintegerRecipients still pending.
data.canUnsendbooleanWhether the mass message can still be cancelled.
data.unsendSecondsintegerSeconds remaining to unsend.
data.hasErrorbooleanTrue if sending hit an error.
data.isCanceledbooleanTrue if the mass message was cancelled.
data.isCouplePeopleMediabooleanTrue when the media contains multiple people (release-form trigger).
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.id | integer | Queue ID. Use this to cancel / look up the mass message. |
| data.date | string | ISO 8601 timestamp of creation. |
| data.isReady | boolean | True when the queue item is ready to send / currently sending. |
| data.isDone | boolean | True when sending is complete. |
| data.total | integer | Total recipients. -1 or 0 while the count is still being resolved. |
| data.pending | integer | Recipients still pending. |
| data.canUnsend | boolean | Whether the mass message can still be cancelled. |
| data.unsendSeconds | integer | Seconds remaining to unsend. |
| data.hasError | boolean | True if sending hit an error. |
| data.isCanceled | boolean | True if the mass message was cancelled. |
| data.isCouplePeopleMedia | boolean | True when the media contains multiple people (release-form trigger). |
| 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 POST "https://public-api.fansmetric.com/v1/100000001/mass-messages" \
--header "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"text": "Hello everyone!",
"userLists": ["fans"],
"mediaFiles": [],
"price": 0,
"filters": {}
}'Response
200