TEASEDocs
ProductsClubHow-to

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" }'
FieldTypeRequiredDescription
armstringyespaid or ftl.
countrystringnoA 2-letter ISO code, exact match only — USA or Germany would be a silently dead destination. Empty = the arm-wide default.
urlstringyesThe 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.
namestringnoA 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.

On this page