Tracking Links

FansMetric data

List Tracking Links

Lists the account's tracking campaigns 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 (~30 min). Requires permission api_tracking_links_list.

https://public-api.fansmetric.com
GET/v1/{account_id}/fm/tracking-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 created_date (default), name, subscribers_counts, transitions_counts, clicks_count.

  • sortstring

    desc (default) or asc.

  • with_deletedboolean

    Include deleted campaigns. Default true.

  • searchstring

    Match campaign name or custom name (case-insensitive).

  • tag_idsarray

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

  • visibilitystring

    Which campaigns 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.

  • start_datestring

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

  • end_datestring

    Window end. Absent → all-time.

Response Fields

  • data.list[].idinteger

    Campaign ID.

  • data.list[].campaignNamestring

    Campaign name.

  • data.list[].campaignCodeinteger

    Numeric code embedded in the tracking URL.

  • data.list[].campaignUrlstring | null

    Full tracking URL.

  • data.list[].countSubscribersinteger

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

  • data.list[].allCountSubscribersinteger

    All-time subscribers claimed.

  • data.list[].countTransitionsinteger

    Total click-throughs (all-time).

  • data.list[].createdAtstring | null

    Creation timestamp.

  • data.list[].endDatestring | null

    Expiry 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 campaign 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 campaign. Each: { id, name, color, created_at }.

  • data.list[].revenue.totalstring

    Net revenue attributed to this campaign.

  • data.list[].revenue.spendersCountinteger

    Distinct spenders in the window.

  • data.list[].revenue.revenuePerSubscriberstring

    Average revenue per claimed subscriber.

  • data.list[].revenue.conversionToSpenderstring

    Fraction of claimed subscribers 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 claimed via this campaign.

  • 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/tracking-links?limit=20&offset=0&field=sample_field" \
  --header "Authorization: Bearer YOUR_API_KEY"

Response

200
{
"data":{
"list":[
0:{
"id":100000010
"campaignName":"Reddit — March"
"campaignCode":101
"campaignUrl":"https://onlyfans.com/creator_XXXXX/c101"
"countSubscribers":538
"allCountSubscribers":612
"countTransitions":1389
"createdAt":"2026-04-21T12:28:53Z"
"endDate":null
"customName":"Reddit r/onlyfansadvice"
"customSourceUrl":"https://reddit.com/r/onlyfansadvice"
"note":null
"isHidden":false
"isRevenueShared":false
"lastScannedAt":"2026-08-05T04:12:00Z"
"user":{
"username":"creator_XXXXX"
}
"tags":[
0:{
"id":1
"name":"Reddit"
"color":"#FF5733"
"created_at":"2026-01-12T09:14:22Z"
}
]
"revenue":{
"total":"1400.25"
"spendersCount":29
"revenuePerSubscriber":"2.6026"
"conversionToSpender":"0.05390"
}
"cost":{
"perPromo":"50.00"
"perSub":"0.0929"
"profit":"1350.25"
"roi":"2700.5"
}
"links":{
"related":{
"subscribers":"/v1/100000001/tracking-links/100000010/claimers"
}
}
}
]
"hasMore":true
"totalCount":43
}
"_pagination":{
"next_page":"/v1/100000001/fm/tracking-links?limit=10&offset=10"
}
"_meta":{
"_credits":{
"used":1
}
"_rate_limits":{
"limit_minute":1000
"remaining_minute":999
"limit_day":50000
"remaining_day":49999
}
}
}