Trial Links

FansMetric data

List 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.com
GET/v1/{account_id}/fm/trial-links
Bearer

Authorization

default
AuthorizationBearer <token>

Send your FansMetric API key as a Bearer token in the Authorization header.

In: header

Path Parameters

  • account_id*integer

    OnlyFans numeric account ID.

Query Parameters

  • limitinteger

    Page size. Default 10, max 25.

  • offsetinteger

    Rows to skip. Default 0.

  • fieldstring

    Sort column. One of create_date (default), expire_date, claims_count, subscribe_counts, subscribe_days, name.

  • sortstring

    desc (default) or asc.

  • searchstring

    Match trial link name or custom name (case-insensitive).

  • tag_idsarray

    Comma-separated tag IDs. Returns trials matching any of them.

  • visibilitystring

    Which trials to return by hide state: visible (default), hidden (only hidden) or all. Replaces the removed include_hidden boolean — pass visibility=all for the old include_hidden=true behaviour.

  • statusstring

    Trial lifecycle filter: all (default, no filter), active (isFinished false) or finished. The trial analogue of tracking links' with_deleted, since OnlyFans finishes trials rather than deleting them. Combines freely with visibility.

  • start_datestring

    Window start for revenue and claim counts. Absent → all-time.

  • end_datestring

    Window end. Absent → all-time.

Response Fields

  • data.list[].idinteger

    Trial link ID.

  • data.list[].trialLinkNamestring

    Trial link name.

  • data.list[].urlstring

    Ready-to-share trial link URL.

  • data.list[].subscribeDaysinteger

    Trial duration in days.

  • data.list[].subscribeCountsinteger

    Subscriber limit (0 = unlimited).

  • data.list[].claimCountsinteger

    Claims in the window (or all-time when no window is given).

  • data.list[].allClaimCountsinteger

    All-time claim count.

  • data.list[].isFinishedboolean

    Whether the trial has expired or been deleted.

  • data.list[].createdAtstring | null

    Creation timestamp.

  • data.list[].expiredAtstring | null

    Expiration timestamp, or null.

  • data.list[].customNamestring | null

    Custom name for internal labelling.

  • data.list[].customSourceUrlstring | null

    Custom traffic source URL.

  • data.list[].notestring | null

    Free-text note.

  • data.list[].isHiddenboolean

    Whether the trial is hidden in the UI.

  • data.list[].isRevenueSharedboolean

    Whether revenue is shared with another creator.

  • data.list[].lastScannedAtstring | null

    When this row was last refreshed.

  • data.list[].user.usernamestring

    Owning creator's OnlyFans username.

  • data.list[].tags[]array

    Tags on this trial. Each: { id, name, color, created_at }.

  • data.list[].revenue.totalstring

    Net revenue attributed to this trial.

  • data.list[].revenue.spendersCountinteger

    Distinct spenders in the window.

  • data.list[].revenue.revenuePerSubscriberstring

    Average revenue per claimed subscriber.

  • data.list[].revenue.conversionToSpenderstring

    Fraction of claimers who spent.

  • data.list[].cost.perPromostring | null

    Promo cost you configured.

  • data.list[].cost.perSubstring | null

    Cost per claimed subscriber.

  • data.list[].cost.profitstring | null

    Revenue minus promo cost.

  • data.list[].cost.roistring | null

    Return on investment (percent).

  • data.list[].links.related.subscribersstring

    URL to fetch subscribers who claimed this trial.

  • data.hasMoreboolean

    Whether more pages remain.

  • data.totalCountinteger

    Total matching rows across all pages.

  • _pagination.next_pagestring

    URL for the next page. Omitted on the last page.

  • dataobject | array

    Endpoint-specific payload. See the fields below for this route.

  • _meta._credits.usedinteger

    Credits consumed by this request (currently always 1).

  • _meta._rate_limits.limit_minuteinteger

    Maximum requests per minute for the organization.

  • _meta._rate_limits.remaining_minuteinteger

    Remaining requests in the current minute window.

  • _meta._rate_limits.limit_dayinteger

    Maximum requests per day for the organization.

  • _meta._rate_limits.remaining_dayinteger

    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
{
"data":{
"list":[
0:{
"id":100000020
"trialLinkName":"1 MONTH FREE TRIAL"
"url":"https://onlyfans.com/creator_XXXXX/trial/XXXXXXXXXXXXXXXXXXXXXXXXX"
"subscribeDays":30
"subscribeCounts":0
"claimCounts":37
"allClaimCounts":45
"isFinished":false
"createdAt":"2026-04-05T17:02:51Z"
"expiredAt":null
"customName":"Instagram bio"
"customSourceUrl":"https://instagram.com/creator_XXXXX"
"note":null
"isHidden":false
"isRevenueShared":false
"lastScannedAt":"2026-08-05T02:11:30Z"
"user":{
"username":"creator_XXXXX"
}
"tags":[
0:{
"id":2
"name":"Instagram"
"color":"#E4405F"
"created_at":"2026-02-04T16:02:10Z"
}
]
"revenue":{
"total":"245.50"
"spendersCount":6
"revenuePerSubscriber":"6.6351"
"conversionToSpender":"0.16216"
}
"cost":{
"perPromo":"20.00"
"perSub":"0.5405"
"profit":"225.50"
"roi":"1127.5"
}
"links":{
"related":{
"subscribers":"/v1/100000001/trial-links/100000020/subscribers"
}
}
}
]
"hasMore":false
"totalCount":1
}
"_meta":{
"_credits":{
"used":1
}
"_rate_limits":{
"limit_minute":1000
"remaining_minute":999
"limit_day":50000
"remaining_day":49999
}
}
}