API: трекинг-ссылки, домены, пиксели и статистика
Трекинг-ссылка отправляет посетителя к автору в Telegram и считает, что происходит дальше: клики, диалоги, первые сообщения, покупки и выручку. Ссылки могут работать на вашем собственном домене, запускать рекламные пиксели (Meta, TikTok, Snap) и отправлять серверные события. Эти эндпоинты соответствуют странице Tracking.
Endpoints #
| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | /links | Список ссылок (creator_id=, archived=false) с их счетчиками | can_tracking или can_sales_read | Planned |
| POST | /links | Создать ссылку | can_tracking | Planned |
| GET | /links/{id} | Одна ссылка | can_tracking или can_sales_read | Planned |
| PUT | /links/{id} | Заменить ссылку (name, slug, domain, destination, UTM, pixels) | can_tracking | Planned |
| DELETE | /links/{id} | Архивировать ссылку (permanent=1 удаляет её) | can_tracking | Planned |
| GET | /domains | Ваши домены (status=active,inactive, q=) | can_tracking | Planned |
| POST | /domains | Добавить домен (status pending) | can_tracking | Planned |
| POST | /domains/{host}/verify | Проверить DNS-записи сейчас | can_tracking | Planned |
| PATCH | /domains/{host} | Сделать проверенный домен основным или изменить его label | can_tracking | Planned |
| DELETE | /domains/{host} | Удалить домен, который не используется активными ссылками | can_tracking | Planned |
| GET | /pixels | Подключения Meta, TikTok и Snap и режим согласия | can_tracking | Planned |
| PUT | /pixels/{provider} | Подключить или заменить пиксель (meta, tiktok, snap) | owner | Planned |
| DELETE | /pixels/{provider} | Отключить пиксель | owner | Planned |
| POST | /pixels/{provider}/test | Отправить тестовое событие и вернуть ответ платформы | can_tracking | Planned |
| PUT | /pixels/consent | Режим согласия: page или implicit_by_country | owner | Planned |
| GET | /events | Встроенные и кастомные события, с количеством доставок за 7 дней | can_tracking | Planned |
| POST | /events | Создать кастомное событие | owner | Planned |
| PATCH | /events/{id} | Включить или выключить событие по сетям | owner | Planned |
| DELETE | /events/{id} | Удалить кастомное событие | owner | Planned |
| GET | /stats | Суточные итоги, по ссылкам и источникам (from=, to=, creator_id=) | can_sales_read | Planned |
| GET | /stats/export.csv | Те же цифры в CSV | can_sales_read | Planned |
The link object #
{
"id": "lnk_3",
"name": "TikTok · Lea night",
"slug": "lea-tiktok-night",
"creator_id": "cr_lea",
"source": "tiktok",
"campaign": "Autumn",
"domain": "go.mia-links.com",
"public_url": "https://go.mia-links.com/r/lea-tiktok-night",
"destination": "pool",
"account_id": null,
"utm": { "source": "tiktok", "medium": "social", "campaign": "autumn" },
"pixels": { "meta": false, "tiktok": true, "snap": false },
"counters": { "clicks": 640, "conversations": 97, "first_messages": 76, "buyers": 14, "revenue_stars": 6200 },
"archived": false,
"created_at": "2026-09-12T08:00:00Z"
}
| Field | Type | Description |
|---|---|---|
id | string | Начинается с lnk_ |
name | string | Имя, которое видит ваша команда |
slug | string | Конец публичного URL |
creator_id | string | Автор, на которого ведет ссылка |
source, campaign | string | Откуда идет трафик и название вашей кампании |
domain | string | Проверенный домен рабочего пространства или домен LanaChat |
public_url | string | https://<domain>/r/<slug>: URL для размещения в био или рекламе |
destination | string | pool или account |
account_id | string или null | Фиксированный аккаунт, если destination, account |
utm | object | source, medium, campaign |
pixels | object | Какие подключенные пиксели срабатывают по этой ссылке |
counters | object | clicks, conversations, first_messages, buyers, revenue_stars |
archived | boolean | Архивные ссылки не попадают в статистику |
created_at | string | ISO 8601, UTC |
destination, этоpool(аккаунт выбирается при клике из пула автора, см. pools) илиaccount(всегда один и тот жеaccount_id).slug: строчные буквы, цифры и дефисы, от 1 до 48 символов, начинается и заканчивается буквой или цифрой, уникален среди активных ссылок на одном домене.domainдолжен быть проверенным доменом рабочего пространства; если не указан, используется домен LanaChat.- Значения
utm: до 80 букв, цифр, точек, дефисов или подчеркиваний. Они проставляются при каждом клике и передаются в события пикселей.
The domain object #
{
"host": "go.mia-links.com",
"builtin": false,
"status": "pending",
"error": null,
"ssl": "none",
"is_default": false,
"label": "Lea TikTok",
"token": "8be03d5f19a2",
"checks": 0,
"added_at": "2026-10-05T10:00:00Z",
"verified_at": null,
"last_check_at": null
}
| Field | Type | Description |
|---|---|---|
host | string | Поддомен в нижнем регистре (минимум 3 части), уникален в рабочем пространстве |
builtin | boolean | true для домена LanaChat, который нельзя удалить |
status | string | verified, pending или error |
error | string или null | Простое сообщение, если status, error |
ssl | string | none, issuing или active |
is_default | boolean | Ровно один проверенный домен, основной |
label | string или null | Имя для вашей команды, до 60 символов |
token | string | Значение TXT-записи для верификации |
checks | number | Сколько раз проверялись DNS |
added_at, verified_at, last_check_at | string или null | ISO 8601, UTC |
The pixel connection object #
{ "connected": true, "pixel_id": "123456789012345", "token_last4": "x9Qa", "token_status": "valid", "token_error": null, "test_event_code": "TEST4821", "connected_at": "2026-10-06T14:30:00Z" }
| Field | Type | Description |
|---|---|---|
connected | boolean | Пиксель подключен |
pixel_id | string | Meta: 15 или 16 цифр. TikTok: 20 заглавных букв или цифр. Snap: UUID |
token_last4 | string | Последние 4 символа access token, сам токен не возвращается |
token_status | string | valid, expired или invalid |
token_error | string или null | Простое сообщение, например "Access token expired on 3 Oct. Replace it to resume delivery." |
test_event_code | string или null | Тестовый код в менеджере событий платформы |
connected_at | string | ISO 8601, UTC |
The event object #
{
"id": "evt_purchase",
"name": "Purchase",
"builtin": true,
"trigger": { "type": "purchase" },
"networks": { "meta": true, "tiktok": true, "snap": false }
}
| Field | Type | Description |
|---|---|---|
id | string | ID события |
name | string | Встроенное имя или ваше: буква, затем до 39 букв, цифр или подчеркиваний, уникально в рабочем пространстве |
builtin | boolean | true для Lead, Contact, Purchase, Subscribe и InitiateCheckout |
trigger | object | type и value для нужных триггеров |
networks | object | Включено или выключено для meta, tiktok и snap |
The stats object #
{
"days": [ { "date": "2026-10-05", "clicks": 54, "conversations": 9, "first_messages": 7, "buyers": 2, "revenue_stars": 950 } ],
"links": [ { "link_id": "lnk_3", "clicks": 640, "conversations": 97, "first_messages": 76, "buyers": 14, "revenue_stars": 6200 } ],
"sources": [ { "source": "instagram", "clicks": 1210, "conversations": 160, "first_messages": 131, "buyers": 22, "revenue_stars": 9100 } ]
}
| Field | Type | Description |
|---|---|---|
days | array | Одна строка на каждый UTC-день периода |
links | array | Одна строка на каждую ссылку за весь период |
sources | array | Одна строка на каждую группу источников: instagram, tiktok, snapchat, meta, x и other |
clicks | number | Перенаправления по ссылке |
conversations | number | Диалоги в Telegram, начатые по ссылке |
first_messages | number | Фаны, написавшие хотя бы раз |
buyers | number | Уникальные фаны с подтвержденной покупкой Stars за период |
revenue_stars | number | Подтвержденные покупки Stars этими фанами за период |
Links #
List links #
GET /links · can_tracking или can_sales_read
| Parameter | Type | Required | Description |
|---|---|---|---|
creator_id | string | No | Только ссылки этого автора |
archived | boolean | No | false (по умолчанию) скрывает архивные ссылки |
limit, cursor | number, string | No | Пагинация |
curl "https://api.lanachat.ai/v1/links?creator_id=cr_lea&archived=false" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Ответ, постраничный список link objects, каждый со своими counters.
Create a link #
POST /links · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Имя, которое видит ваша команда |
slug | string | Yes | Строчные буквы, цифры и дефисы, от 1 до 48 символов |
creator_id | string | Yes | Автор, на которого ведет ссылка |
source | string | No | instagram, tiktok, snapchat, meta, x или другой источник |
campaign | string | No | Название вашей кампании |
destination | string | No | pool или account |
account_id | string | Когда destination, account | Фиксированный Telegram-аккаунт |
domain | string | No | Проверенный домен; если не указан, домен LanaChat |
utm | object | No | source, medium, campaign |
pixels | object | No | meta, tiktok, snap: true, чтобы сработал этот пиксель |
curl -X POST https://api.lanachat.ai/v1/links \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name": "Insta bio · Lea", "slug": "lea-bio", "creator_id": "cr_lea", "source": "instagram", "destination": "pool", "domain": "go.mia-links.com"}'
{
"id": "lnk_9",
"name": "Insta bio · Lea",
"slug": "lea-bio",
"creator_id": "cr_lea",
"source": "instagram",
"campaign": null,
"domain": "go.mia-links.com",
"public_url": "https://go.mia-links.com/r/lea-bio",
"destination": "pool",
"account_id": null,
"utm": { "source": null, "medium": null, "campaign": null },
"pixels": { "meta": false, "tiktok": false, "snap": false },
"counters": { "clicks": 0, "conversations": 0, "first_messages": 0, "buyers": 0, "revenue_stars": 0 },
"archived": false,
"created_at": "2026-10-06T14:40:00Z"
}
- Если slug уже занят, ответ,
409сThe slug /lea-bio is already used by "Insta bio · Mia". - Если домен не проверен, ответ,
400("Pick a verified domain…").
Get a link #
GET /links/{id} · can_tracking или can_sales_read
curl https://api.lanachat.ai/v1/links/lnk_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Ответ, link object. Неизвестный id, ответ 404.
Replace a link #
PUT /links/{id} · can_tracking
Тело такое же, как у Create a link; PUT заменяет всю ссылку, поэтому передавайте все поля, которые хотите сохранить.
curl -X PUT https://api.lanachat.ai/v1/links/lnk_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "TikTok · Lea night", "slug": "lea-tiktok-night", "creator_id": "cr_lea", "source": "tiktok", "campaign": "Autumn", "destination": "pool", "domain": "go.mia-links.com", "utm": {"source": "tiktok", "medium": "social", "campaign": "autumn"}, "pixels": {"meta": false, "tiktok": true, "snap": false}}'
Ответ, обновленная ссылка. Ошибки такие же, как при создании.
Archive or delete a link #
DELETE /links/{id} · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
permanent | number | No | 1 удаляет ссылку полностью вместо архивирования |
curl -X DELETE https://api.lanachat.ai/v1/links/lnk_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Архивная ссылка не попадает в статистику.
Domains #
Чтобы использовать свой домен, добавьте его, создайте две DNS-записи и затем подтвердите:
CNAME go.mia-links.com → links.lanachat.appTXT _lanachat.go.mia-links.com = lanachat-verify=8be03d5f19a2
Ожидающие домены также проверяются каждые 10 минут в течение 72 часов, затем раз в день. status становится verified, а ssl переходит в issuing, затем в active.
List domains #
GET /domains · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | active (проверен) или inactive (ожидание или ошибка) |
q | string | No | Часть host или label |
curl "https://api.lanachat.ai/v1/domains?status=active" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Ответ, список domain objects, включая домен LanaChat (builtin: true).
Add a domain #
POST /domains · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
host | string | Yes | Поддомен, например go.mia-links.com |
curl -X POST https://api.lanachat.ai/v1/domains \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"host": "go.mia-links.com"}'
Ответ, новый домен со status: "pending" и его token для TXT-записи. Host очищается (нижний регистр, без https://, без пути). Корневые домены, *.lanachat.app и уже добавленный домен, ответ 400 с сообщением.
Verify a domain #
POST /domains/{host}/verify · can_tracking
curl -X POST https://api.lanachat.ai/v1/domains/go.mia-links.com/verify \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"
{ "host": "go.mia-links.com", "builtin": false, "status": "verified", "error": null, "ssl": "issuing", "is_default": false, "label": null, "token": "8be03d5f19a2", "checks": 3, "added_at": "2026-10-05T10:00:00Z", "verified_at": "2026-10-06T14:45:00Z", "last_check_at": "2026-10-06T14:45:00Z" }
Если запись неверна, status, error, а error объясняет причину, например "The CNAME record points to another service." Домен LanaChat нельзя верифицировать (его DNS управляется LanaChat).
Change a domain #
PATCH /domains/{host} · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
is_default | boolean | No | true делает этот домен основным; предыдущий перестает быть основным |
label | string или null | No | Имя для вашей команды, до 60 символов |
curl -X PATCH https://api.lanachat.ai/v1/domains/go.mia-links.com \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"is_default": true}'
Только проверенный домен может быть основным. Домен LanaChat не принимает label (403).
Remove a domain #
DELETE /domains/{host} · can_tracking
curl -X DELETE https://api.lanachat.ai/v1/domains/go.mia-links.com \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Удаление домена LanaChat, основного домена ("Set another default domain first") или домена, используемого активными ссылками ("Used by N active links across all creators"), ответ 409.
Pixels #
События отправляются сервер-сервер, дублируются с браузерным пикселем через тот же event_id, Telegram id фана хэшируется (SHA-256), никогда не передается в открытом виде. Без согласия событие не отправляется вообще. Пиксель срабатывает только для ссылок, где он включен.
Read pixel connections #
GET /pixels · can_tracking
curl https://api.lanachat.ai/v1/pixels \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Ответ содержит по одному pixel connection для каждого из meta, tiktok и snap, а также режим согласия mode.
Connect a pixel #
PUT /pixels/{provider} · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
pixel_id | string | Yes | Meta: 15 или 16 цифр. TikTok: 20 заглавных букв или цифр. Snap: UUID |
access_token | string | Yes | Conversions API token платформы |
test_event_code | string | No | Тестовый код платформы |
curl -X PUT https://api.lanachat.ai/v1/pixels/meta \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"pixel_id": "123456789012345", "access_token": "EAAG…", "test_event_code": "TEST4821"}'
{ "connected": true, "pixel_id": "123456789012345", "token_last4": "x9Qa", "token_status": "valid", "token_error": null, "test_event_code": "TEST4821", "connected_at": "2026-10-06T14:30:00Z" }
Access token хранится зашифрованно и никогда не возвращается: только token_last4. Если pixel id в неверном формате или token пустой, ответ 400.
Disconnect a pixel #
DELETE /pixels/{provider} · owner
curl -X DELETE https://api.lanachat.ai/v1/pixels/meta \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Send a test event #
POST /pixels/{provider}/test · can_tracking
curl -X POST https://api.lanachat.ai/v1/pixels/meta/test \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"
{ "ok": true, "status": 200, "body": "{\"events_received\":1}" }
status и body, это ответ самой платформы, чтобы вы видели, что именно вернули Meta, TikTok или Snap.
Set the consent mode #
PUT /pixels/consent · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | Yes | page: экран согласия для каждого фана перед открытием Telegram. implicit_by_country: экран только для ЕС, ЕЭЗ, Великобритании и Швейцарии |
curl -X PUT https://api.lanachat.ai/v1/pixels/consent \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "implicit_by_country"}'
Events #
Встроенные события: Lead (диалог начат по ссылке), Contact (первое сообщение фана), Purchase (подтвержденная покупка), Subscribe, InitiateCheckout. Кастомные события требуют триггер: sale_over (покупка выше суммы в долларах США), tag_added (тег), nth_message (N-е сообщение фана, 2 и более) или offer_viewed.
List events #
GET /events · can_tracking
curl https://api.lanachat.ai/v1/events \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Ответ, список event objects с количеством доставок (успешных и неудачных) за 7 дней по сетям.
Create a custom event #
POST /events · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Буква, затем до 39 букв, цифр или подчеркиваний; уникально в рабочем пространстве |
trigger | object | Yes | type: sale_over, tag_added, nth_message или offer_viewed; value для первых трех |
networks | object | No | meta, tiktok, snap: true, чтобы отправлять туда |
curl -X POST https://api.lanachat.ai/v1/events \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name": "BigSpender", "trigger": {"type": "sale_over", "value": 50}, "networks": {"meta": true, "tiktok": true, "snap": false}}'
Ответ, новое событие (201). Уже занятое имя, ответ 409.
Turn an event on or off #
PATCH /events/{id} · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
networks | object | Yes | meta, tiktok, snap: true или false |
curl -X PATCH https://api.lanachat.ai/v1/events/evt_purchase \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"networks": {"meta": true, "tiktok": true, "snap": true}}'
Delete a custom event #
DELETE /events/{id} · owner
curl -X DELETE https://api.lanachat.ai/v1/events/evt_bigspender \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Встроенные события нельзя удалить; их можно только выключить.
Stats #
Read stats #
GET /stats · can_sales_read
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | Yes | Первый UTC-день, YYYY-MM-DD, включительно |
to | string | Yes | Последний UTC-день, YYYY-MM-DD, включительно |
creator_id | string | No | Только этот автор; если не указан, все авторы |
curl "https://api.lanachat.ai/v1/stats?from=2026-09-06&to=2026-10-05&creator_id=cr_lea" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Ответ, stats object. Дни, в UTC; архивные ссылки не учитываются.
Export stats as CSV #
GET /stats/export.csv · can_sales_read
Те же параметры, что и у GET /stats.
curl "https://api.lanachat.ai/v1/stats/export.csv?from=2026-09-06&to=2026-10-05" \
-H "Authorization: Bearer $LANACHAT_TOKEN" -o stats.csv
date,link,slug,domain,creator,source,clicks,conversations,first_messages,buyers,revenue_stars
2026-10-05,TikTok · Lea night,lea-tiktok-night,go.mia-links.com,Lea,tiktok,54,9,7,2,950