Документация API
REST API для программной работы с короткими ссылками: создание из ваших систем (сайт, CRM, скрипты), управление и выгрузка статистики. Все ответы — в формате JSON, кодировка UTF-8.
Авторизация
Создайте API-токен в кабинете: Настройки → API-токены → Новый токен. Токен показывается один раз — сохраните его сразу. Передавайте токен в заголовке каждого запроса:
Authorization: Bearer trc_sk_ваш_токен
Базовый адрес API: https://lnl.su/api
Создание ссылки
| Поле | Тип | Описание |
|---|---|---|
| url | строка, обязательное | Куда ведёт ссылка. Только http:// или https://. |
| alias | строка | Свой код ссылки (lnl.su/алиас). Пусто — сгенерируется автоматически. Изменить после создания нельзя. |
| title | строка | Заголовок для списка в кабинете, посетителям не виден. |
| tag | строка | Проект/тег для группировки. |
| utm_passthrough | bool, по умолч. true | Переносить query-параметры (UTM-метки) на целевой адрес. |
| expires_at | строка RFC 3339 или null | Момент, после которого ссылка перестаёт работать. Пример: 2026-12-31T23:59:59Z. |
curl -X POST https://lnl.su/api/links \
-H "Authorization: Bearer trc_sk_ваш_токен" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/landing?utm_source=email","alias":"vesna","title":"Весенняя акция","tag":"маркетинг"}'
Ответ 201 Created — объект ссылки (он же возвращается при изменении и в списке):
{
"code": "vesna",
"short_url": "https://lnl.su/vesna",
"target_url": "https://example.com/landing?utm_source=email",
"title": "Весенняя акция",
"tag": "маркетинг",
"active": true,
"utm_passthrough": true,
"clicks": 0,
"expires_at": null,
"created_at": "2026-07-02T12:00:00Z"
}
Список ссылок
Возвращает массив объектов ссылок пространства, новые сверху. limit — до 500, по умолчанию 200.
curl https://lnl.su/api/links -H "Authorization: Bearer trc_sk_ваш_токен"
Изменение ссылки
Частичное обновление: передавайте только те поля, которые меняете. Короткий код при этом не меняется — можно перенаправить старую ссылку на новый адрес.
| Поле | Тип | Описание |
|---|---|---|
| target_url | строка | Новый целевой адрес. |
| title | строка | Заголовок. |
| tag | строка | Проект/тег. |
| active | bool | false — выключить ссылку (посетители увидят страницу «отключена»), true — включить. |
| utm_passthrough | bool | Перенос UTM-меток. |
| expires_at | строка или null | Новый срок. null — убрать ограничение. |
curl -X PATCH https://lnl.su/api/links/vesna \
-H "Authorization: Bearer trc_sk_ваш_токен" \
-H "Content-Type: application/json" \
-d '{"active": false}'
Удаление ссылки
Удаляет ссылку навсегда вместе с её статистикой. Ответ — 204 No Content.
Если нужно просто остановить переходы, лучше выключить ссылку через PATCH — статистика сохранится.
curl -X DELETE https://lnl.su/api/links/vesna -H "Authorization: Bearer trc_sk_ваш_токен"
Статистика
days — период в днях от текущего момента (1–365, по умолчанию 30). Переходы ботов и
превью-краулеров мессенджеров в цифры не входят (кроме поля bot_clicks).
{
"code": "vesna",
"range_days": 30,
"total_clicks": 42, // клики людей за период
"unique_clicks": 30, // уникальные посетители
"bot_clicks": 7, // отсеяно ботов (справочно)
"countries_count": 4,
"prev_total_clicks": 25, // тот же период до этого — для сравнения
"prev_unique_clicks": 18,
"peak_date": "2026-06-24", // самый активный день
"peak_clicks": 9,
"timeseries": [ {"date": "2026-06-03", "clicks": 5}, … ],
"weekday": [ {"name": "Пн", "clicks": 6}, … ],
"devices": [ {"name": "desktop", "clicks": 28}, … ],
"browsers": [ {"name": "Chrome", "clicks": 21}, … ],
"countries": [ {"name": "RU", "clicks": 30}, … ],
"referrers": [ {"name": "t.me", "clicks": 12}, … ]
}
То же самое, но сводно по всем ссылкам пространства токена; дополнительно —
total_links, active_links и top_links (топ-10 ссылок за период).
Экспорт сырых событий (CSV)
Отдаёт CSV-файл (UTF-8 с BOM — открывается в Excel без кракозябр): по строке на каждый переход,
включая ботов. Колонки: timestamp, country, device, browser, referrer. До 50 000 строк за запрос.
curl -o clicks.csv "https://lnl.su/api/links/vesna/export.csv?days=90" \
-H "Authorization: Bearer trc_sk_ваш_токен"
QR-код ссылки
Публичный эндпоинт (без авторизации) — PNG с QR-кодом, ведущим на короткую ссылку.
size — размер в пикселях, 128–1024, по умолчанию 512.
https://lnl.su/vesna/qr.png?size=1024
Ошибки
Ошибки приходят с соответствующим HTTP-кодом и телом вида:
{"error": "такой код уже занят"}
| Код | Когда |
|---|---|
| 400 | Неверные данные: URL не начинается с http(s), битая дата, слишком большой файл и т. п. |
| 401 | Нет токена, токен неверный или отозван. |
| 403 | Операция недоступна по токену (управление аккаунтом, пространствами, токенами). |
| 404 | Ссылка с таким кодом не найдена в вашем пространстве. |
| 409 | Алиас уже занят или зарезервирован системой. |
| 429 | Слишком много неудачных попыток входа (только для /api/auth/login). |