LanaChat

API: трекинг-ссылки, домены, пиксели и статистика

Чтение 9 минОбновлено Markdown

Трекинг-ссылка отправляет посетителя к автору в Telegram и считает, что происходит дальше: клики, диалоги, первые сообщения, покупки и выручку. Ссылки могут работать на вашем собственном домене, запускать рекламные пиксели (Meta, TikTok, Snap) и отправлять серверные события. Эти эндпоинты соответствуют странице Tracking.

Endpoints #

MethodPathDescriptionPermissionStatus
GET/linksСписок ссылок (creator_id=, archived=false) с их счетчикамиcan_tracking или can_sales_readPlanned
POST/linksСоздать ссылкуcan_trackingPlanned
GET/links/{id}Одна ссылкаcan_tracking или can_sales_readPlanned
PUT/links/{id}Заменить ссылку (name, slug, domain, destination, UTM, pixels)can_trackingPlanned
DELETE/links/{id}Архивировать ссылку (permanent=1 удаляет её)can_trackingPlanned
GET/domainsВаши домены (status=active,inactive, q=)can_trackingPlanned
POST/domainsДобавить домен (status pending)can_trackingPlanned
POST/domains/{host}/verifyПроверить DNS-записи сейчасcan_trackingPlanned
PATCH/domains/{host}Сделать проверенный домен основным или изменить его labelcan_trackingPlanned
DELETE/domains/{host}Удалить домен, который не используется активными ссылкамиcan_trackingPlanned
GET/pixelsПодключения Meta, TikTok и Snap и режим согласияcan_trackingPlanned
PUT/pixels/{provider}Подключить или заменить пиксель (meta, tiktok, snap)ownerPlanned
DELETE/pixels/{provider}Отключить пиксельownerPlanned
POST/pixels/{provider}/testОтправить тестовое событие и вернуть ответ платформыcan_trackingPlanned
PUT/pixels/consentРежим согласия: page или implicit_by_countryownerPlanned
GET/eventsВстроенные и кастомные события, с количеством доставок за 7 днейcan_trackingPlanned
POST/eventsСоздать кастомное событиеownerPlanned
PATCH/events/{id}Включить или выключить событие по сетямownerPlanned
DELETE/events/{id}Удалить кастомное событиеownerPlanned
GET/statsСуточные итоги, по ссылкам и источникам (from=, to=, creator_id=)can_sales_readPlanned
GET/stats/export.csvТе же цифры в CSVcan_sales_readPlanned
{
  "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"
}
FieldTypeDescription
idstringНачинается с lnk_
namestringИмя, которое видит ваша команда
slugstringКонец публичного URL
creator_idstringАвтор, на которого ведет ссылка
source, campaignstringОткуда идет трафик и название вашей кампании
domainstringПроверенный домен рабочего пространства или домен LanaChat
public_urlstringhttps://<domain>/r/<slug>: URL для размещения в био или рекламе
destinationstringpool или account
account_idstring или nullФиксированный аккаунт, если destination, account
utmobjectsource, medium, campaign
pixelsobjectКакие подключенные пиксели срабатывают по этой ссылке
countersobjectclicks, conversations, first_messages, buyers, revenue_stars
archivedbooleanАрхивные ссылки не попадают в статистику
created_atstringISO 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
}
FieldTypeDescription
hoststringПоддомен в нижнем регистре (минимум 3 части), уникален в рабочем пространстве
builtinbooleantrue для домена LanaChat, который нельзя удалить
statusstringverified, pending или error
errorstring или nullПростое сообщение, если status, error
sslstringnone, issuing или active
is_defaultbooleanРовно один проверенный домен, основной
labelstring или nullИмя для вашей команды, до 60 символов
tokenstringЗначение TXT-записи для верификации
checksnumberСколько раз проверялись DNS
added_at, verified_at, last_check_atstring или nullISO 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" }
FieldTypeDescription
connectedbooleanПиксель подключен
pixel_idstringMeta: 15 или 16 цифр. TikTok: 20 заглавных букв или цифр. Snap: UUID
token_last4stringПоследние 4 символа access token, сам токен не возвращается
token_statusstringvalid, expired или invalid
token_errorstring или nullПростое сообщение, например "Access token expired on 3 Oct. Replace it to resume delivery."
test_event_codestring или nullТестовый код в менеджере событий платформы
connected_atstringISO 8601, UTC

The event object #

{
  "id": "evt_purchase",
  "name": "Purchase",
  "builtin": true,
  "trigger": { "type": "purchase" },
  "networks": { "meta": true, "tiktok": true, "snap": false }
}
FieldTypeDescription
idstringID события
namestringВстроенное имя или ваше: буква, затем до 39 букв, цифр или подчеркиваний, уникально в рабочем пространстве
builtinbooleantrue для Lead, Contact, Purchase, Subscribe и InitiateCheckout
triggerobjecttype и value для нужных триггеров
networksobjectВключено или выключено для 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 } ]
}
FieldTypeDescription
daysarrayОдна строка на каждый UTC-день периода
linksarrayОдна строка на каждую ссылку за весь период
sourcesarrayОдна строка на каждую группу источников: instagram, tiktok, snapchat, meta, x и other
clicksnumberПеренаправления по ссылке
conversationsnumberДиалоги в Telegram, начатые по ссылке
first_messagesnumberФаны, написавшие хотя бы раз
buyersnumberУникальные фаны с подтвержденной покупкой Stars за период
revenue_starsnumberПодтвержденные покупки Stars этими фанами за период

GET /links · can_tracking или can_sales_read

ParameterTypeRequiredDescription
creator_idstringNoТолько ссылки этого автора
archivedbooleanNofalse (по умолчанию) скрывает архивные ссылки
limit, cursornumber, stringNoПагинация
curl "https://api.lanachat.ai/v1/links?creator_id=cr_lea&archived=false" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Ответ, постраничный список link objects, каждый со своими counters.

POST /links · can_tracking

ParameterTypeRequiredDescription
namestringYesИмя, которое видит ваша команда
slugstringYesСтрочные буквы, цифры и дефисы, от 1 до 48 символов
creator_idstringYesАвтор, на которого ведет ссылка
sourcestringNoinstagram, tiktok, snapchat, meta, x или другой источник
campaignstringNoНазвание вашей кампании
destinationstringNopool или account
account_idstringКогда destination, accountФиксированный Telegram-аккаунт
domainstringNoПроверенный домен; если не указан, домен LanaChat
utmobjectNosource, medium, campaign
pixelsobjectNometa, 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"

Ответ, link object. Неизвестный id, ответ 404.

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}}'

Ответ, обновленная ссылка. Ошибки такие же, как при создании.

DELETE /links/{id} · can_tracking

ParameterTypeRequiredDescription
permanentnumberNo1 удаляет ссылку полностью вместо архивирования
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.app
  • TXT _lanachat.go.mia-links.com = lanachat-verify=8be03d5f19a2

Ожидающие домены также проверяются каждые 10 минут в течение 72 часов, затем раз в день. status становится verified, а ssl переходит в issuing, затем в active.

List domains #

GET /domains · can_tracking

ParameterTypeRequiredDescription
statusstringNoactive (проверен) или inactive (ожидание или ошибка)
qstringNoЧасть 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

ParameterTypeRequiredDescription
hoststringYesПоддомен, например 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

ParameterTypeRequiredDescription
is_defaultbooleanNotrue делает этот домен основным; предыдущий перестает быть основным
labelstring или nullNoИмя для вашей команды, до 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

ParameterTypeRequiredDescription
pixel_idstringYesMeta: 15 или 16 цифр. TikTok: 20 заглавных букв или цифр. Snap: UUID
access_tokenstringYesConversions API token платформы
test_event_codestringNoТестовый код платформы
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.

PUT /pixels/consent · owner

ParameterTypeRequiredDescription
modestringYespage: экран согласия для каждого фана перед открытием 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

ParameterTypeRequiredDescription
namestringYesБуква, затем до 39 букв, цифр или подчеркиваний; уникально в рабочем пространстве
triggerobjectYestype: sale_over, tag_added, nth_message или offer_viewed; value для первых трех
networksobjectNometa, 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

ParameterTypeRequiredDescription
networksobjectYesmeta, 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

ParameterTypeRequiredDescription
fromstringYesПервый UTC-день, YYYY-MM-DD, включительно
tostringYesПоследний UTC-день, YYYY-MM-DD, включительно
creator_idstringNoТолько этот автор; если не указан, все авторы
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

Последние новости о Lana в Telegram

Новые релизы и приглашения в бету, первыми в канале.