TEASEDocs
На русском

Смарт-ссылки

Одна ссылка /r/<slug>, которая держит и платную подписку, и бесплатный триал и сама решает, что показать посетителю — взвешенный сплит с правилами по странам. Плюс чтение эффективности по кликам, подписчикам и выручке.

Смарт-ссылка — это одна отслеживаемая ссылка https://вашдомен.com/r/main, которую вы ставите в био, рекламу или сообщение. Она держит сразу и платную подписку, и бесплатный триал, и сама решает для каждого посетителя, что показать (взвешенный A/B-сплит, переопределяемый по стране). TEASE записывает клик и позже связывает любую подписку, ребилл, чаевые или PPV обратно с этой ссылкой — так что вы видите, сколько зарабатывает каждый источник.

Одна ссылка — вся ротация внутри неё

Не нужно заводить отдельную «платную» и отдельную «триал» ссылку и раздавать две. Вы создаёте один смартлинк с политикой и настраиваете сплит платка/триал внутри него. Отдельные OF-ссылки на плечо — это лишь пул назначений, который наполняется провижинингом; см. «Откуда берутся назначения: пул OF-ссылок» в конце.

Создать смарт-ссылку

Создаётся одна ссылка /r/<slug> (обычно main) с политикой маршрутизации — весами плеч платка/триал. Эндпоинт /api/admin/smartlinks OnlyFans не дёргает.

curl -X POST https://app.tease.link/api/admin/smartlinks \
  -H "Authorization: Bearer $TEASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "domain": "вашдомен.com", "slug": "main",
        "policy": { "arms": { "paid": { "weight": 50 }, "ftl": { "weight": 50 } } } }'
const res = await fetch('https://app.tease.link/api/admin/smartlinks', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.TEASE_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    domain: 'вашдомен.com',
    slug: 'main',
    policy: { arms: { paid: { weight: 50 }, ftl: { weight: 50 } } },
  }),
});
const link = await res.json();
res = requests.post(
    "https://app.tease.link/api/admin/smartlinks",
    headers={"Authorization": f"Bearer {os.environ['TEASE_API_KEY']}"},
    json={
        "domain": "вашдомен.com",
        "slug": "main",
        "policy": {"arms": {"paid": {"weight": 50}, "ftl": {"weight": 50}}},
    },
)
link = res.json()

Параметры

ПолеТипОбязательноОписание
domainstringдаВаш хост (должен быть уже зарегистрирован).
slugstringда1–32 символа [a-z0-9_-]. paid и ftl зарезервированы. Обычно main.
namestringнетМетка для распознавания.
policyobjectнетПолитика маршрутизации (веса плеч + правила по странам). По умолчанию 50/50, триал только там, где у страны есть своя постоянная триал-ссылка.

Публичный адрес — https://вашдомен.com/r/main. Шарьте его как есть — TEASE берёт на себя маршрутизацию фаната к нужному предложению и захват клика на стороне сервера.

Закрепить одно плечо можно адресом https://вашдомен.com/r/main/paid или /r/main/ftl — когда конкретное размещение всегда должно вести на конкретный оффер (сама ссылка /r/main при этом продолжает делить трафик по политике).

Старые адреса /r/paid и /r/ftl больше не настраиваются. Раньше это были две отдельные ссылки: одна всегда платная, другая всегда триал. Теперь оффер выбирает политика смартлинка, а не адрес. Если такая ссылка где-то у вас осталась — она не сломается: её обслуживает смартлинк вашего домена, как обычный /r/main. Но заводить новые на них нельзя, и /r/ftl больше не гарантирует триал.

Как ссылка решает: политика

Политика — это то, что превращает одну ссылку в умную:

  • Взвешенный сплит. Каждому плечу — свой вес (50/50, 30/70). Выбор «липкий»: вернувшийся посетитель всегда получает то же плечо.
  • Правила по странам. Переопределяйте сплит для конкретных стран (DE/AT: чаще триал, RU: только платная). По умолчанию триал получают только страны, под которые создана своя постоянная триал-ссылка — остальные автоматически идут на платную страницу.
  • Форма политики. {"arms": {"paid": {"weight": 50}, "ftl": {"weight": 50}}, "geo": [{"countries": ["DE"], "arms": {"ftl": {"weight": 70}, "paid": {"weight": 30}}}]}. Полная форма — в справочнике API.

Поменять сплит в любой момент — PATCH /api/admin/smartlinks/{id} с новым policy (маршрутизация подхватывает изменение в течение ~минуты).

Назначения — куда ведёт каждое плечо

Смартлинк с политикой ведёт на ссылки-назначения — по одной на пару (плечо, страна). Их можно смотреть и править напрямую.

Список применённых назначений (активные и выключенные):

curl https://app.tease.link/api/admin/smartlinks/42/inventory \
  -H "Authorization: Bearer $TEASE_API_KEY"

Добавить назначение под плечо и страну. Оставьте country пустым, чтобы сделать его назначением по умолчанию для плеча — на него уходят все прочие страны:

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": "Немецкий триал"}'

Отредактировать одно назначение — заменить URL, переименовать или включить/выключить его в маршрутизации:

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}'

Проверка до запуска

Перед публикацией read-only эндпоинты показывают ровно то, что получит ваш трафик:

  • Где используется — кнопки, ведущие на эту ссылку, и аудитории (гео-сегменты), которые направляют сюда каждую страну.
  • Гео-карта — по каждой стране вашей аудитории: плечо и конкретное назначение, куда попадёт посетитель. Передайте ?countries=DE,FR,US, чтобы проверить конкретные.
  • Проверка — health-check: прогоняет продовую маршрутизацию по всем привязанным странам и находит тупиковые маршруты (фан попал бы в пустоту), включённые плечи без назначения или ссылку, которую ещё не использует ни одна кнопка. Любую проблему уровня block нужно исправить до запуска.
curl https://app.tease.link/api/admin/smartlinks/42/validate \
  -H "Authorization: Bearer $TEASE_API_KEY"
{
  "ok": false,
  "blocking": 1,
  "warnings": 0,
  "issues": [
    {
      "severity": "block",
      "code": "dead_route",
      "message": "Аудитория «German» ведёт сюда, но для страны DE нет рабочей ссылки — фан попадёт в пустоту.",
      "fix": { "type": "country", "country": "DE" }
    }
  ]
}

Чтение эффективности

Углубитесь в одну ссылку, чтобы увидеть фанатов, которых она сконвертировала, и выручку в разбивке по типу конверсии. Все суммы — целые чистые центы:

curl https://app.tease.link/api/admin/smart-links/lnk_8fq2 \
  -H "Authorization: Bearer $TEASE_API_KEY"
{
  "provider_id": "lnk_8fq2",
  "name": "instagram-bio",
  "fans": [
    { "fan_id": "f_3081", "total_net_cents": 4200, "purchases": 3, "last_at": "2026-07-01" }
  ],
  "by_type": [
    { "conversion_type": "subscription", "count": 12, "revenue_net_cents": 24000 },
    { "conversion_type": "tip", "count": 5, "revenue_net_cents": 6300 }
  ]
}
ПолеОписание
fansСводка по каждому фанату: заработанные чистые центы, число покупок, последняя активность.
by_typeКоличество и чистая выручка по типу конверсии (подписка, чаевые, PPV, ребилл).

Для сводной воронки клик → подписчик → выручка по всем ссылкам читайте эндпоинт списка — в каждой строке есть снимок вендора и сводка по конверсиям.

Прикрепить конверсионный пиксель

Вы можете пересылать конверсии в Meta или TikTok на стороне сервера, чтобы рекламная платформа оптимизировала на реальную выручку. См. Meta Pixel и Ad Platforms и Атрибуцию.

Откуда берутся назначения: пул OF-ссылок

Смартлинк /r/main сам не хранит OF-ссылки — он берёт их из пула назначений домена. Пул наполняется одним действием — провижинингом (paid + trial, по странам):

curl -X POST "https://app.tease.link/api/admin/domains/вашдомен.com/provision-links" \
  -H "Authorization: Bearer $TEASE_API_KEY"

Дальше смартлинк привязывает эти ссылки к плечам и странам — через dress_country или редактор назначений выше. Отдельные ссылки-плечи вручную заводить не нужно — это и есть весь «пул». Раздавайте фанатам только /r/main. Подробнее: Provision domain links.

Дальнейшие шаги

On this page