API: трекінгові лінки, домени, пікселі та статистика
Трекінговий лінк перенаправляє відвідувача до авторки в Telegram і рахує подальші дії: кліки, розмови, перші повідомлення, покупців і дохід. Лінки можуть працювати на вашому домені, запускати рекламні пікселі (Meta, TikTok, Snap) і надсилати серверні події. Ці endpoint-и відповідають сторінці 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 |
Об'єкт лінка #
{
"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 | Перевірений домен workspace або домен 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має бути перевіреним доменом workspace; без нього використовується домен LanaChat.- Значення
utm: до 80 літер, цифр, крапок, дефісів або підкреслень. Вони додаються до кожного кліку й передаються у події пікселів.
Об'єкт домену #
{
"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 частини), унікальний у workspace |
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 |
Об'єкт підключення пікселя #
{ "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 не повертається |
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 |
Об'єкт події #
{
"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 літер, цифр чи підкреслень, унікальна у workspace |
builtin | boolean | true для Lead, Contact, Purchase, Subscribe і InitiateCheckout |
trigger | object | type і value для тригерів, які це потребують |
networks | object | Увімкнено чи вимкнено для meta, tiktok, snap |
Об'єкт статистики #
{
"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 цими фанами за період |
Лінки #
Список лінків #
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"
Відповідь, це сторінковий список об'єктів лінків, кожен із його counters.
Створити лінк #
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 /links/{id} · can_tracking або can_sales_read
curl https://api.lanachat.ai/v1/links/lnk_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Відповідь, об'єкт лінка. Невідомий id повертає 404.
Замінити лінк #
PUT /links/{id} · can_tracking
Тіло таке саме, як у Створити лінк; 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}}'
Відповідь, оновлений лінк. Помилки такі ж, як при створенні.
Архівувати або видалити лінк #
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"
Архівований лінк не враховується у статистиці.
Домени #
Щоб використовувати власний домен, додайте його, створіть два DNS-записи, потім підтвердьте:
CNAME go.mia-links.com → links.lanachat.appTXT _lanachat.go.mia-links.com = lanachat-verify=8be03d5f19a2
Домени зі статусом pending також перевіряються кожні 10 хвилин протягом 72 годин, потім щодня. status стає verified, а ssl, спочатку issuing, потім active.
Список доменів #
GET /domains · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | active (перевірені) або inactive (pending чи error) |
q | string | No | Частина host або label |
curl "https://api.lanachat.ai/v1/domains?status=active" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Відповідь, список об'єктів доменів, включно з доменом LanaChat (builtin: true).
Додати домен #
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 з поясненням.
Перевірити домен #
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).
Змінити домен #
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).
Видалити домен #
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.
Пікселі #
Події надсилаються сервер-сервер, дублюються з браузерним пікселем через той самий event_id, id Telegram фана хешується (SHA-256), ніколи не передається у відкритому вигляді. Без згоди подія не надсилається взагалі. Піксель спрацьовує лише для лінків, де він увімкнений.
Переглянути підключення пікселів #
GET /pixels · can_tracking
curl https://api.lanachat.ai/v1/pixels \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Відповідь містить по одному об'єкту підключення пікселя для meta, tiktok і snap, а також режим згоди mode.
Підключити піксель #
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.
Відключити піксель #
DELETE /pixels/{provider} · owner
curl -X DELETE https://api.lanachat.ai/v1/pixels/meta \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Надіслати тестову подію #
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.
Встановити режим згоди #
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"}'
Події #
Вбудовані події: Lead (розмова почата з лінка), Contact (перше повідомлення фана), Purchase (підтверджена покупка), Subscribe, InitiateCheckout. Кастомні події мають тригер: sale_over (продаж понад певну суму в доларах США), tag_added (тег), nth_message (N-те повідомлення фана, 2 або більше) чи offer_viewed.
Список подій #
GET /events · can_tracking
curl https://api.lanachat.ai/v1/events \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Відповідь, список об'єктів подій з кількістю доставок і помилок за 7 днів по мережах.
Створити кастомну подію #
POST /events · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Літера, далі до 39 літер, цифр чи підкреслень; унікальна у workspace |
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.
Увімкнути або вимкнути подію #
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 /events/{id} · owner
curl -X DELETE https://api.lanachat.ai/v1/events/evt_bigspender \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Вбудовані події не можна видалити; просто вимкніть їх.
Статистика #
Переглянути статистику #
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"
Відповідь, об'єкт статистики. Дати у UTC; архівовані лінки не враховуються.
Експорт статистики у 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