Справочник 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 |
сломалось у нас, записано в журнал |