Trial Links

Create Trial Link

Creates a trial link on OnlyFans and stores it in the FansMetric database. Requires permission api_trial_links_create.

https://public-api.fansmetric.com
POST/v1/{account_id}/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.

Request Body

application/json
  • name*string

    Trial link name.

  • subscribe_days*string

    Trial duration in days. Valid: 1, 3, 7, 14, 30, 90, 180, 360.

  • subscribe_countsstring

    Max claims. 0 = unlimited. Default 0.

  • expire_daysstring

    Days until link expires. 0 = no expiry.

  • tag_idsarray

    FansMetric tag IDs.

  • custom_source_urlstring

    Custom source URL.

Response Fields

  • data.idinteger

    Newly created OnlyFans trial link ID.

  • data.trialLinkNamestring

    Trial link name as stored on OnlyFans.

  • data.urlstring

    The OnlyFans trial URL fans claim.

  • data.subscribeDaysinteger

    Length of the free trial granted to a claimer, in days.

  • data.subscribeCountsinteger

    The claim limit — the "y" in "x of y". 0 means unlimited. OnlyFans' naming, kept for parity; it is not a count of subscribers.

  • data.claimCountsinteger

    Always 0 on creation.

  • data.allClaimCountsinteger

    Always 0 on creation. Lifetime claims — the "x" in "x of y".

  • data.isFinishedboolean

    Always false on creation. OnlyFans finishes trials rather than deleting them.

  • data.createdAtstring | null

    Creation timestamp (RFC 3339).

  • data.expiredAtstring | null

    Expiry timestamp, or null when the link does not expire.

  • data.customNamestring | null

    FansMetric display-name override. null on creation — set it via Update Trial Link.

  • data.customSourceUrlstring | null

    Traffic-source URL stored in FansMetric (the value submitted in custom_source_url).

  • data.notestring | null

    Free-text note. null on creation.

  • data.isHiddenboolean

    FansMetric hide flag. false on creation.

  • data.isRevenueSharedboolean

    Whether an enabled share exposes revenue. false on creation.

  • data.lastScannedAtstring | null

    When the scraper last refreshed this link. null until the first pass.

  • data.user.usernamestring

    Creator username. Empty string if it could not be resolved.

  • data.tags[]array

    Full tag objects for the IDs passed in tag_ids. Each element has id, name, color, created_at — same shape as GET /v1/tags. Resolution is best-effort: if the post-write tag-map fetch fails, tags is [] rather than failing the create. Cross-org tag IDs are silently filtered out.

  • data.revenue.totalstring

    "0.00" on creation.

  • data.revenue.spendersCountinteger

    0 on creation.

  • data.revenue.revenuePerSubscriberstring

    "0" on creation.

  • data.revenue.conversionToSpenderstring

    Claim→spend rate. "0" on creation.

  • data.costobject

    perPromo, perSub, profit, roi — all null until a promo cost is set, which is how you tell "not set" from zero.

  • data.links.related.subscribersstring

    Path to this link's claimers.

  • 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 POST "https://public-api.fansmetric.com/v1/100000001/trial-links" \
  --header "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "name": "1 Month Free Trial",
  "subscribe_days": 30,
  "subscribe_counts": 100,
  "expire_days": 7,
  "tag_ids": [1, 2],
  "custom_source_url": "https://reddit.com/r/example"
}'

Response

201
{
"data":{
"id":100000021
"trialLinkName":"1 Month Free Trial"
"url":"https://onlyfans.com/action/trial/XXXXXXXXXXXXXXXXXXXXXXXXX"
"subscribeDays":30
"subscribeCounts":100
"claimCounts":0
"allClaimCounts":0
"isFinished":false
"createdAt":"2026-05-15T10:00:00Z"
"expiredAt":"2026-05-22T10:00:00Z"
"customName":null
"customSourceUrl":"https://reddit.com/r/example"
"note":null
"isHidden":false
"isRevenueShared":false
"lastScannedAt":null
"user":{
"username":"creator_XXXXX"
}
"tags":[
0:{
"id":1
"name":"Reddit"
"color":"#FF5733"
"created_at":"2026-01-12T09:14:22Z"
}
1:{
"id":2
"name":"Twitter"
"color":"#1DA1F2"
"created_at":"2026-01-12T09:15:01Z"
}
]
"revenue":{
"total":"0.00"
"spendersCount":0
"revenuePerSubscriber":"0"
"conversionToSpender":"0"
}
"cost":{
"perPromo":null
"perSub":null
"profit":null
"roi":null
}
"links":{
"related":{
"subscribers":"/v1/100000001/trial-links/100000021/subscribers"
}
}
}
"_meta":{
"_credits":{
"used":1
}
"_rate_limits":{
"limit_minute":1000
"remaining_minute":999
"limit_day":50000
"remaining_day":49999
}
}
}