Справочник API

Все ручки отвечают JSON с обязательным полем success. При ошибке — ещё и error с текстом по-русски.

Два важных правила

Все запросы — GET. Не потому что так красивее, а потому что сервис стоит за CDN Яндекса, а тот не пропускает POST — отдаёт 405. Так что изменяющие действия тоже GET.

Секреты — только в заголовках. Ключ API, код управления ссылкой, пароль — всё заголовками. Строка запроса оседает в логах nginx, в логах edge CDN, в истории браузера и уезжает в Referer. Заголовок — нет. По проводу и то и другое одинаково закрыто TLS.

Что Заголовок
Ключ API Authorization: Bearer vip_…
Почта и пароль при входе в кабинет Authorization: Basic …
Код управления анонимной ссылкой X-Manage-Token: …
Пароль на ссылку — и когда ставите, и когда проверяете X-Link-Password: …

Если секрет прислать в адресе, сервис ответит ошибкой, а не примет молча. Это сделано намеренно: молчаливый приём означал бы, что утечка в логи продолжается, а никто не знает.

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

GET /api/links/new?target_url=https%3A%2F%2Ft.me%2Fbot&mode=bot&counter_id=51902021

Ключ не обязателен: без него ссылка создаётся анонимно, и в ответе приходит manage_token — им потом можно править и удалять ссылку. Сохраните его, второй раз он не показывается.

Параметры:

Имя Значение
target_url куда ведёт. Обязателен. Без схемы — допишем https://
mode redirect, track или bot. По умолчанию redirect
counter_id номер счётчика Метрики, нужен для track и bot
bot_param имя параметра для бота, по умолчанию start
title название для списка в кабинете
ttl_days сколько дней жить, по умолчанию 30, максимум 365
target_mobile отдельная цель для телефонов
target_url_b и split_percent второй адрес и доля переходов на него
max_clicks ограничение по числу переходов

Пароль на ссылку задаётся заголовком, не параметром:

curl -H "X-Link-Password: тайное-слово" \
  "https://2vip.ru/api/links/new?target_url=https%3A%2F%2Fexample.com%2F"

Без ключа действует ограничение: 20 ссылок в час с одного адреса.

Список своих ссылок

GET /api/links
Authorization: Bearer vip_…

Одна ссылка

GET /api/links/{код}
Authorization: Bearer vip_…      — если ссылка ваша
X-Manage-Token: …                — если создавали анонимно

Изменить

GET /api/links/{код}/edit?target_url=https%3A%2F%2Fnew-target.ru%2F

Меняются target_url, title, is_active, ttl_days. Короткий адрес при этом не меняется — в этом весь смысл: раздали ссылку, а цель потом переставили.

Удалить

GET /api/links/{код}/delete

Удаление мягкое: код остаётся занятым навсегда.

Статистика ссылки

GET /api/links/{код}/stats

Возвращает clicks, воронку funnel по событиям, разбивку by_day за 30 дней и variants — распределение по вариантам сплита.

Данные визита

GET /api/visits/{идентификатор визита}
Authorization: Bearer vip_…

Это то, что дёргает бот. Подробно — в статье «Ссылка на бота».

Отметить цель визита

GET /api/visits/{идентификатор}/goal?goal=paid
Authorization: Bearer vip_…

Имя цели: латиница, цифры, _, -, :, до 64 символов. Префикс goal: добавляется сам.

Проверка живости

GET /api/health

Отвечает {"success":true,"db":"ok"}. Ключ не нужен.

Коды ответов

Код Что значит
200 / 201 всё хорошо
401 нет ключа или он не подошёл
403 ключ есть, но к этой ссылке доступа нет
404 нет такой ссылки или визита
405 пришёл POST — см. правило выше
422 данные не прошли проверку, текст в error
500 сломалось у нас, записано в журнал

← ко всем инструкциям