Create a rule that attributes a link to a source
Bind an OnlyFans link to a domain and channel so its traffic resolves to exactly one source.
A source_link rule tells the resolver which domain-source (and optional channel) an OnlyFans
link's traffic belongs to. Every rule picks one match type — how the link's identity is
compared against match_value:
match_type | Matches on |
|---|---|
provider_id | The link's exact OnlyFans-side id. |
exact_name | The link's exact display name. |
name_prefix | The link's name starting with match_value. |
regex | re.search(match_value, name) against the link's name — see the limits below. |
Before you start
domain_source has to be a domain you already own and have connected — the endpoint 404s with
domain_not_found if the hostname doesn't exist yet. It can never be a sentinel value
(__organic__ or __pending__): those are the resolver's own reserved buckets for traffic that
came in with no link at all, or with a link nobody has mapped yet — pointing a rule at either is
rejected with 400 domain_source_sentinel.
Create a rule
curl -X POST https://app.tease.link/api/admin/source-links \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "match_type": "name_prefix", "match_value": "VIP-", "domain_source": "links.creator.com", "channel": "twitter" }'| Field | Type | Required | Description |
|---|---|---|---|
match_type | string | yes | One of provider_id / exact_name / name_prefix / regex. Any other value is a 422. |
match_value | string | yes | 1–512 characters, trimmed; empty after trimming is rejected. |
domain_source | string | yes | 1–255 characters; must resolve to an existing, connected domain. |
channel | string | no | Free-form label (≤32 characters) — a grouping tag, doesn't affect matching. |
notes | string | no | ≤512 characters. |
A successful create returns the row with its id, assigned_by (your actor), and timestamps.
Regex limits
A regex rule is later run as re.search with no timeout, so match_value is checked at write
time for shapes that can hang a worker (catastrophic backtracking):
- Capped at 200 characters, 12 groups, and 24 quantifiers total.
- Any quantified group —
(...)+,(...)*,(...){n,}— is rejected outright if its body contains another quantifier ((a+)+) or an alternation ((a|aa)+), whether or not that specific pattern would actually backtrack badly.
A pattern can be rejected even when it isn't genuinely catastrophic — the guard checks the
shape of a quantified group, not whether it specifically blows up. See
Troubleshooting before assuming your
pattern should have been accepted; the fix is to simplify it or fall back to exact_name /
name_prefix, not to retry.
Update or deactivate a rule
match_type and match_value are fixed at creation — delete and recreate the rule if the link's
identity itself needs to change. Everything else can be patched, and every field is optional
(omitted = unchanged):
curl -X PATCH https://app.tease.link/api/admin/source-links/482 \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "active": false }'domain_source, channel, active, and notes all take the same rules as on create (an
explicit empty notes clears it). Set active: false to stop a rule from being used without
losing its history — deleting is a separate, permanent action.
Remove a rule
curl -X DELETE https://app.tease.link/api/admin/source-links/482 \
-H "Authorization: Bearer $TEASE_API_KEY"Returns 204 with no body.
How to know it worked
curl https://app.tease.link/api/admin/source-links \
-H "Authorization: Bearer $TEASE_API_KEY"Lists every rule, newest first. If your access is limited to a set of source domains, rules on
other domains are silently left out of this list, and update/delete on their id come back as
404 source_link_not_found rather than 403 — a rule outside your scope looks exactly like one
that doesn't exist.
If it didn't work
400 domain_source_sentinel—domain_sourcewas__organic__or__pending__; point the rule at a real domain instead.404 domain_not_found— the hostname indomain_sourceisn't a connected domain on this account yet.404 source_link_not_found(update/delete) — either the id doesn't exist, or it belongs to a domain outside your scope.422—match_typeisn't one of the four allowed values, a required field is empty/too long, or the regex tripped one of the limits above — see Troubleshooting for the regex case.
What's next
- See which links have traffic but no source rule yet —
find the exact
match_valueto use before you create a rule.
Traffic sources
The rule table that tells the resolver which domain and channel an OnlyFans link's traffic belongs to, and the queue of links waiting on one.
See which links have traffic but no source rule yet
Read the queue Link's poller fills for OnlyFans links that already have activity but no source_link rule.