Fill in a smart link's destinations
Point each (arm, country) pair of a smart link at a concrete OnlyFans link, or set the arm-wide default.
Who this is for: a workspace owner.
A smart link's policy decides which arm a visitor gets; its inventory — one row per
(arm, country) — decides where that arm actually sends them. A new smart link has a policy
but zero inventory rows, so every country resolves to nothing until you add destinations here (or
dress them from the free pool instead of
typing URLs by hand).
List what's applied
curl https://app.tease.link/api/admin/smartlinks/42/inventory \
-H "Authorization: Bearer $TEASE_API_KEY"Returns every real link this smart link routes to — active and switched off — ordered paid
then ftl, country then the link-wide default (country: "").
Add a destination
Leave country empty to set the default — the fallback every unlisted country falls back to:
curl -X POST https://app.tease.link/api/admin/smartlinks/42/inventory \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "arm": "ftl", "country": "DE", "url": "https://onlyfans.com/yourpage/trial",
"name": "German trial" }'| Field | Type | Required | Description |
|---|---|---|---|
arm | string | yes | paid or ftl. |
country | string | no | A 2-letter ISO code, exact match only — USA or Germany would be a silently dead destination. Empty = the arm-wide default. |
url | string | yes | The concrete OnlyFans destination. Validated as a real scheme + host — this is emitted verbatim as a 307 redirect to a fan, so a malformed URL is rejected here, not at click time. |
name | string | no | A label. |
Re-adding an (arm, country) this smart link already owns just updates it in place — the
call is an upsert, so a repeated "set this destination" click can't 500 on the database's
unique constraint.
A slot can only belong to one smart link on a domain
If another smart link on the same domain already has an active row for that exact
(arm, country), the add is rejected with 409 inventory_slot_taken rather than silently
stacking a second row the live redirect would never actually serve (it keeps the
lowest-id active row). Edit the existing occupant instead.
Edit or switch off one destination
curl -X PATCH https://app.tease.link/api/admin/smartlinks/42/inventory/1088 \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "active": false }'Swap the url, relabel with name, or toggle active. Turning off a destination that is
currently the only live link in its (domain, arm, country) place also turns off any
trial-split clone riding on the same
slot — otherwise the clone would keep serving traffic to a country you just meant to pull.
The default row is the one that matters most
A country with no destination of its own quietly falls back to the (paid, country: "")
default row. If that default is missing, unminted, or off, every unrecognized country lands
on nothing — the largest single blast radius in this feature. Check it first when a smart link
isn't converting.
What's next
Verify routing catches dead ends and unminted links before you publish — including gaps that leave inventory looking fine while the live route quietly falls through.