Trial Links
FansMetric dataList Trial Links
Lists the account's trial links from the FansMetric database, each with revenue, cost, and tags attached. Same resource and same permission as the OnlyFans-relayed list — this one adds FansMetric attribution and filters, at the cost of scraper-bounded freshness (~2 h). Requires permission api_trial_links_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
limitintegerPage size. Default 10, max 25.
offsetintegerRows to skip. Default 0.
fieldstringSort column. One of
create_date(default),expire_date,claims_count,subscribe_counts,subscribe_days,name.sortstringdesc(default) orasc.searchstringMatch trial link name or custom name (case-insensitive).
tag_idsarrayComma-separated tag IDs. Returns trials matching any of them.
visibilitystringWhich trials to return by hide state:
visible(default),hidden(only hidden) orall. Replaces the removedinclude_hiddenboolean — passvisibility=allfor the oldinclude_hidden=truebehaviour.statusstringTrial lifecycle filter:
all(default, no filter),active(isFinishedfalse) orfinished. The trial analogue of tracking links'with_deleted, since OnlyFans finishes trials rather than deleting them. Combines freely withvisibility.start_datestringWindow start for revenue and claim counts. Absent → all-time.
end_datestringWindow end. Absent → all-time.
Response Fields
data.list[].idintegerTrial link ID.
data.list[].trialLinkNamestringTrial link name.
data.list[].urlstringReady-to-share trial link URL.
data.list[].subscribeDaysintegerTrial duration in days.
data.list[].subscribeCountsintegerSubscriber limit (
0= unlimited).data.list[].claimCountsintegerClaims in the window (or all-time when no window is given).
data.list[].allClaimCountsintegerAll-time claim count.
data.list[].isFinishedbooleanWhether the trial has expired or been deleted.
data.list[].createdAtstring | nullCreation timestamp.
data.list[].expiredAtstring | nullExpiration timestamp, or
null.data.list[].customNamestring | nullCustom name for internal labelling.
data.list[].customSourceUrlstring | nullCustom traffic source URL.
data.list[].notestring | nullFree-text note.
data.list[].isHiddenbooleanWhether the trial is hidden in the UI.
data.list[].isRevenueSharedbooleanWhether revenue is shared with another creator.
data.list[].lastScannedAtstring | nullWhen this row was last refreshed.
data.list[].user.usernamestringOwning creator's OnlyFans username.
data.list[].tags[]arrayTags on this trial. Each:
{ id, name, color, created_at }.data.list[].revenue.totalstringNet revenue attributed to this trial.
data.list[].revenue.spendersCountintegerDistinct spenders in the window.
data.list[].revenue.revenuePerSubscriberstringAverage revenue per claimed subscriber.
data.list[].revenue.conversionToSpenderstringFraction of claimers who spent.
data.list[].cost.perPromostring | nullPromo cost you configured.
data.list[].cost.perSubstring | nullCost per claimed subscriber.
data.list[].cost.profitstring | nullRevenue minus promo cost.
data.list[].cost.roistring | nullReturn on investment (percent).
data.list[].links.related.subscribersstringURL to fetch subscribers who claimed this trial.
data.hasMorebooleanWhether more pages remain.
data.totalCountintegerTotal matching rows across all pages.
_pagination.next_pagestringURL for the next page. Omitted on the last page.
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.list[].id | integer | Trial link ID. |
| data.list[].trialLinkName | string | Trial link name. |
| data.list[].url | string | Ready-to-share trial link URL. |
| data.list[].subscribeDays | integer | Trial duration in days. |
| data.list[].subscribeCounts | integer | Subscriber limit (0 = unlimited). |
| data.list[].claimCounts | integer | Claims in the window (or all-time when no window is given). |
| data.list[].allClaimCounts | integer | All-time claim count. |
| data.list[].isFinished | boolean | Whether the trial has expired or been deleted. |
| data.list[].createdAt | string | null | Creation timestamp. |
| data.list[].expiredAt | string | null | Expiration timestamp, or null. |
| data.list[].customName | string | null | Custom name for internal labelling. |
| data.list[].customSourceUrl | string | null | Custom traffic source URL. |
| data.list[].note | string | null | Free-text note. |
| data.list[].isHidden | boolean | Whether the trial is hidden in the UI. |
| data.list[].isRevenueShared | boolean | Whether revenue is shared with another creator. |
| data.list[].lastScannedAt | string | null | When this row was last refreshed. |
| data.list[].user.username | string | Owning creator's OnlyFans username. |
| data.list[].tags[] | array | Tags on this trial. Each: { id, name, color, created_at }. |
| data.list[].revenue.total | string | Net revenue attributed to this trial. |
| data.list[].revenue.spendersCount | integer | Distinct spenders in the window. |
| data.list[].revenue.revenuePerSubscriber | string | Average revenue per claimed subscriber. |
| data.list[].revenue.conversionToSpender | string | Fraction of claimers who spent. |
| data.list[].cost.perPromo | string | null | Promo cost you configured. |
| data.list[].cost.perSub | string | null | Cost per claimed subscriber. |
| data.list[].cost.profit | string | null | Revenue minus promo cost. |
| data.list[].cost.roi | string | null | Return on investment (percent). |
| data.list[].links.related.subscribers | string | URL to fetch subscribers who claimed this trial. |
| data.hasMore | boolean | Whether more pages remain. |
| data.totalCount | integer | Total matching rows across all pages. |
| _pagination.next_page | string | URL for the next page. Omitted on the last page. |
| 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/fm/trial-links?limit=20&offset=0&field=sample_field" \
--header "Authorization: Bearer YOUR_API_KEY"Response
200