API: linkuri de tracking, domenii, pixeli și statistici
Un link de tracking trimite un vizitator către o creatoare pe Telegram și numără ce urmează: clickuri, conversații, prime mesaje, cumpărători și venituri. Linkurile pot exista pe propriul tău domeniu, pot declanșa pixeli de reclamă (Meta, TikTok, Snap) și pot trimite evenimente server-to-server. Aceste endpointuri corespund paginii Tracking.
Endpointuri #
| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | /links | Listează linkuri (creator_id=, archived=false) cu contorii lor | can_tracking sau can_sales_read | Planned |
| POST | /links | Creează un link | can_tracking | Planned |
| GET | /links/{id} | Un link | can_tracking sau can_sales_read | Planned |
| PUT | /links/{id} | Înlocuiește un link (nume, slug, domeniu, destinație, UTM, pixeli) | can_tracking | Planned |
| DELETE | /links/{id} | Arhivează un link (permanent=1 îl șterge) | can_tracking | Planned |
| GET | /domains | Domeniile tale (status=active,inactive, q=) | can_tracking | Planned |
| POST | /domains | Adaugă un domeniu (status pending) | can_tracking | Planned |
| POST | /domains/{host}/verify | Verifică acum înregistrările DNS | can_tracking | Planned |
| PATCH | /domains/{host} | Setează un domeniu verificat ca implicit sau schimbă eticheta | can_tracking | Planned |
| DELETE | /domains/{host} | Șterge un domeniu nefolosit de linkuri active | can_tracking | Planned |
| GET | /pixels | Conexiunile Meta, TikTok și Snap și modul de consimțământ | can_tracking | Planned |
| PUT | /pixels/{provider} | Conectează sau înlocuiește un pixel (meta, tiktok, snap) | owner | Planned |
| DELETE | /pixels/{provider} | Deconectează un pixel | owner | Planned |
| POST | /pixels/{provider}/test | Trimite un eveniment de test și returnează răspunsul platformei | can_tracking | Planned |
| PUT | /pixels/consent | Modul de consimțământ: page sau implicit_by_country | owner | Planned |
| GET | /events | Evenimente încorporate și personalizate, cu număr livrări pe 7 zile | can_tracking | Planned |
| POST | /events | Creează un eveniment personalizat | owner | Planned |
| PATCH | /events/{id} | Activează sau dezactivează un eveniment pe rețele | owner | Planned |
| DELETE | /events/{id} | Șterge un eveniment personalizat | owner | Planned |
| GET | /stats | Totaluri zilnice, pe link și sursă (from=, to=, creator_id=) | can_sales_read | Planned |
| GET | /stats/export.csv | Aceleași cifre în CSV | can_sales_read | Planned |
Obiectul linkului #
{
"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 | Începe cu lnk_ |
name | string | Numele vizibil echipei tale |
slug | string | Finalul URL-ului public |
creator_id | string | Creatoarea către care trimite linkul |
source, campaign | string | De unde vine traficul și numele campaniei tale |
domain | string | Un domeniu verificat al workspace-ului sau domeniul LanaChat |
public_url | string | https://<domain>/r/<slug>: URL-ul pentru bio sau reclamă |
destination | string | pool sau account |
account_id | string sau null | Contul fix când destination este account |
utm | object | source, medium, campaign |
pixels | object | Ce pixeli conectați se declanșează pe acest link |
counters | object | clicks, conversations, first_messages, buyers, revenue_stars |
archived | boolean | Linkurile arhivate sunt excluse din statistici |
created_at | string | ISO 8601, UTC |
destinationestepool(contul se alege la click din pool-ul creatoarei, vezi pools) sauaccount(acelașiaccount_idmereu).slug: litere mici, cifre și cratime, 1-48 caractere, începe și se termină cu literă sau cifră, unic printre linkurile active ale aceluiași domeniu.domaintrebuie să fie un domeniu verificat al workspace-ului; altfel se folosește domeniul LanaChat.- Valorile
utm: până la 80 caractere (litere, cifre, puncte, cratime sau underscore). Se aplică la fiecare click și se trimit la evenimentele pixel.
Obiectul domeniului #
{
"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 | Un subdomeniu cu litere mici (cel puțin 3 etichete), unic în workspace |
builtin | boolean | true pentru domeniul LanaChat, care nu poate fi șters |
status | string | verified, pending sau error |
error | string sau null | O propoziție simplă când status este error |
ssl | string | none, issuing sau active |
is_default | boolean | Exact un domeniu verificat este implicit |
label | string sau null | Un nume pentru echipa ta, până la 60 caractere |
token | string | Valoarea înregistrării TXT de verificare |
checks | number | Număr de verificări DNS făcute până acum |
added_at, verified_at, last_check_at | string sau null | ISO 8601, UTC |
Obiectul conexiunii pixelului #
{ "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 | Pixelul este conectat |
pixel_id | string | Meta: 15 sau 16 cifre. TikTok: 20 litere mari sau cifre. Snap: un UUID |
token_last4 | string | Ultimele 4 caractere ale tokenului de acces, niciodată tokenul complet |
token_status | string | valid, expired sau invalid |
token_error | string sau null | O propoziție simplă, ex. „Access token expired on 3 Oct. Replace it to resume delivery.” |
test_event_code | string sau null | Codul de test al managerului de evenimente al platformei |
connected_at | string | ISO 8601, UTC |
Obiectul evenimentului #
{
"id": "evt_purchase",
"name": "Purchase",
"builtin": true,
"trigger": { "type": "purchase" },
"networks": { "meta": true, "tiktok": true, "snap": false }
}
| Field | Type | Description |
|---|---|---|
id | string | ID-ul evenimentului |
name | string | Numele încorporat sau numele tău personalizat: o literă, apoi până la 39 litere, cifre sau underscore, unic în workspace |
builtin | boolean | true pentru Lead, Contact, Purchase, Subscribe și InitiateCheckout |
trigger | object | type și un value pentru trigger-ele care au nevoie |
networks | object | Activat sau dezactivat pentru meta, tiktok și snap |
Obiectul statisticilor #
{
"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 | O intrare per zi UTC din interval |
links | array | O intrare per link, pe tot intervalul |
sources | array | O intrare per grup sursă: instagram, tiktok, snapchat, meta, x și other |
clicks | number | Redirecționări servite |
conversations | number | Conversații Telegram începute prin link |
first_messages | number | Fani care au scris cel puțin o dată |
buyers | number | Fani distincti cu o achiziție verificată Stars în interval |
revenue_stars | number | Achiziții Stars verificate ale acelor fani în interval |
Linkuri #
Listează linkuri #
GET /links · can_tracking sau can_sales_read
| Parameter | Type | Required | Description |
|---|---|---|---|
creator_id | string | Nu | Doar linkurile acestei creatoare |
archived | boolean | Nu | false (vizualizare implicită) ascunde linkurile arhivate |
limit, cursor | number, string | Nu | Paginare |
curl "https://api.lanachat.ai/v1/links?creator_id=cr_lea&archived=false" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Răspunsul este o listă paginată de obiecte link, fiecare cu counters.
Creează un link #
POST /links · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Da | Numele vizibil echipei tale |
slug | string | Da | Litere mici, cifre și cratime, 1-48 caractere |
creator_id | string | Da | Creatoarea către care trimite linkul |
source | string | Nu | instagram, tiktok, snapchat, meta, x sau altă sursă |
campaign | string | Nu | Numele campaniei tale |
destination | string | Nu | pool sau account |
account_id | string | Când destination este account | Contul Telegram fix |
domain | string | Nu | Un domeniu verificat; altfel domeniul LanaChat |
utm | object | Nu | source, medium, campaign |
pixels | object | Nu | meta, tiktok, snap: true pentru a declanșa pixelul respectiv |
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"
}
- Un slug deja folosit răspunde cu
409și mesajulThe slug /lea-bio is already used by "Insta bio · Mia". - Un domeniu neverificat răspunde cu
400(„Pick a verified domain…”).
Obține un link #
GET /links/{id} · can_tracking sau can_sales_read
curl https://api.lanachat.ai/v1/links/lnk_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Răspunsul este obiectul link. Un id necunoscut răspunde cu 404.
Înlocuiește un link #
PUT /links/{id} · can_tracking
Același corp ca la Creează un link; PUT înlocuiește întreg linkul, deci trimite toate câmpurile pe care vrei să le păstrezi.
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}}'
Răspunsul este linkul actualizat. Aceleași erori ca la creare.
Arhivează sau șterge un link #
DELETE /links/{id} · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
permanent | number | Nu | 1 șterge linkul definitiv în loc să-l arhiveze |
curl -X DELETE https://api.lanachat.ai/v1/links/lnk_3 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Un link arhivat este exclus din statistici.
Domenii #
Pentru a folosi propriul domeniu, adaugă-l, creează două înregistrări DNS, apoi verifică-l:
CNAME go.mia-links.com → links.lanachat.appTXT _lanachat.go.mia-links.com = lanachat-verify=8be03d5f19a2
Domeniile în așteptare sunt verificate la fiecare 10 minute timp de 72 ore, apoi zilnic. status devine verified iar ssl trece prin issuing apoi active.
Listează domenii #
GET /domains · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | Nu | active (verificat) sau inactive (în așteptare sau eroare) |
q | string | Nu | Parte din host sau etichetă |
curl "https://api.lanachat.ai/v1/domains?status=active" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Răspunsul listează obiecte domeniu, inclusiv domeniul LanaChat (builtin: true).
Adaugă un domeniu #
POST /domains · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
host | string | Da | Un subdomeniu, ex. 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"}'
Răspunsul este domeniul nou cu status: "pending" și token pentru înregistrarea TXT. Hostul este curățat (litere mici, fără https://, fără cale). Domeniile root, *.lanachat.app și un domeniu deja adăugat răspund cu 400 și mesaj.
Verifică un domeniu #
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" }
Când o înregistrare este greșită, status este error iar error spune care, ex. „The CNAME record points to another service.” Domeniul LanaChat nu poate fi verificat (DNS-ul este gestionat de LanaChat).
Schimbă un domeniu #
PATCH /domains/{host} · can_tracking
| Parameter | Type | Required | Description |
|---|---|---|---|
is_default | boolean | Nu | true îl face domeniul implicit; cel implicit anterior nu mai este |
label | string sau null | Nu | Un nume pentru echipa ta, până la 60 caractere |
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}'
Doar un domeniu verificat poate fi implicit. Domeniul LanaChat refuză o etichetă (403).
Șterge un domeniu #
DELETE /domains/{host} · can_tracking
curl -X DELETE https://api.lanachat.ai/v1/domains/go.mia-links.com \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Ștergerea domeniului LanaChat, a domeniului implicit („Set another default domain first”) sau a unui domeniu folosit de linkuri active („Used by N active links across all creators”) răspunde cu 409.
Pixeli #
Evenimentele se trimit server-to-server, deduplicate cu pixelul browserului prin același event_id, cu id-ul Telegram al fanului hash-uit (SHA-256), niciodată brut. Fără consimțământ nu se trimite niciun eveniment, niciodată. Un pixel se declanșează doar pentru linkurile care îl activează.
Citește conexiunile pixelilor #
GET /pixels · can_tracking
curl https://api.lanachat.ai/v1/pixels \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Răspunsul conține câte o conexiune pixel pentru fiecare dintre meta, tiktok și snap, și modul de consimțământ mode.
Conectează un pixel #
PUT /pixels/{provider} · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
pixel_id | string | Da | Meta: 15 sau 16 cifre. TikTok: 20 litere mari sau cifre. Snap: un UUID |
access_token | string | Da | Tokenul Conversions API al platformei |
test_event_code | string | Nu | Codul de test al platformei |
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" }
Tokenul de acces este stocat criptat și niciodată returnat: doar token_last4. Un pixel id în format greșit sau un token gol răspund cu 400.
Deconectează un pixel #
DELETE /pixels/{provider} · owner
curl -X DELETE https://api.lanachat.ai/v1/pixels/meta \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Trimite un eveniment de test #
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 și body sunt răspunsul propriu al platformei, deci vezi exact ce a răspuns Meta, TikTok sau Snap.
Setează modul de consimțământ #
PUT /pixels/consent · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | Da | page: ecran de consimțământ pentru fiecare fan înainte de deschiderea Telegram. implicit_by_country: ecran doar în UE și SEE, UK și Elveția |
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"}'
Evenimente #
Evenimente încorporate: Lead (conversație începută din link), Contact (primul mesaj fan), Purchase (vânzare verificată), Subscribe, InitiateCheckout. Evenimentele personalizate au un trigger: sale_over (vânzare peste o sumă în dolari), tag_added (un tag), nth_message (al N-lea mesaj al fanului, 2 sau mai mult) sau offer_viewed.
Listează evenimente #
GET /events · can_tracking
curl https://api.lanachat.ai/v1/events \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Răspunsul listează obiecte eveniment cu livrările acceptate și eșuate pe 7 zile, pe rețele.
Creează un eveniment personalizat #
POST /events · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Da | O literă, apoi până la 39 litere, cifre sau underscore; unic în workspace |
trigger | object | Da | type: sale_over, tag_added, nth_message sau offer_viewed; value pentru primele trei |
networks | object | Nu | meta, tiktok, snap: true pentru a trimite acolo |
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}}'
Răspunsul este evenimentul nou (201). Un nume deja folosit răspunde cu 409.
Activează sau dezactivează un eveniment #
PATCH /events/{id} · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
networks | object | Da | meta, tiktok, snap: true sau 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}}'
Șterge un eveniment personalizat #
DELETE /events/{id} · owner
curl -X DELETE https://api.lanachat.ai/v1/events/evt_bigspender \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Evenimentele încorporate nu pot fi șterse; dezactivează-le în schimb.
Statistici #
Citește statistici #
GET /stats · can_sales_read
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | Da | Prima zi UTC, YYYY-MM-DD, inclusiv |
to | string | Da | Ultima zi UTC, YYYY-MM-DD, inclusiv |
creator_id | string | Nu | Doar această creatoare; fără el, toate creatoarele |
curl "https://api.lanachat.ai/v1/stats?from=2026-09-06&to=2026-10-05&creator_id=cr_lea" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Răspunsul este obiectul statistici. Zilele sunt UTC; linkurile arhivate sunt excluse.
Exportă statistici ca CSV #
GET /stats/export.csv · can_sales_read
Aceiași parametri ca la 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