LanaChat

API : liens de tracking, domaines, pixels et statistiques

Lecture de 9 minMis à jour Markdown

Un lien de tracking envoie un visiteur vers une créatrice sur Telegram et compte ce qui suit : clics, conversations, premiers messages, acheteurs et revenus. Les liens peuvent être hébergés sur votre propre domaine, déclencher des pixels publicitaires (Meta, TikTok, Snap) et envoyer des événements serveur. Ces points d’accès correspondent à la page Tracking.

Endpoints #

MethodPathDescriptionPermissionStatus
GET/linksListe des liens (creator_id=, archived=false) avec leurs compteurscan_tracking ou can_sales_readPlanned
POST/linksCréer un liencan_trackingPlanned
GET/links/{id}Un liencan_tracking ou can_sales_readPlanned
PUT/links/{id}Remplacer un lien (nom, slug, domaine, destination, UTM, pixels)can_trackingPlanned
DELETE/links/{id}Archiver un lien (permanent=1 le supprime)can_trackingPlanned
GET/domainsVos domaines (status=active,inactive, q=)can_trackingPlanned
POST/domainsAjouter un domaine (statut pending)can_trackingPlanned
POST/domains/{host}/verifyVérifier ses enregistrements DNS maintenantcan_trackingPlanned
PATCH/domains/{host}Faire d’un domaine vérifié le domaine par défaut, ou changer son labelcan_trackingPlanned
DELETE/domains/{host}Supprimer un domaine non utilisé par un lien actifcan_trackingPlanned
GET/pixelsConnexions Meta, TikTok et Snap et mode consentementcan_trackingPlanned
PUT/pixels/{provider}Connecter ou remplacer un pixel (meta, tiktok, snap)ownerPlanned
DELETE/pixels/{provider}Déconnecter un pixelownerPlanned
POST/pixels/{provider}/testEnvoyer un événement test et retourner la réponse de la plateformecan_trackingPlanned
PUT/pixels/consentMode consentement : page ou implicit_by_countryownerPlanned
GET/eventsÉvénements intégrés et personnalisés, avec compteurs sur 7 jourscan_trackingPlanned
POST/eventsCréer un événement personnaliséownerPlanned
PATCH/events/{id}Activer ou désactiver un événement par réseauownerPlanned
DELETE/events/{id}Supprimer un événement personnaliséownerPlanned
GET/statsTotaux journaliers, par lien et par source (from=, to=, creator_id=)can_sales_readPlanned
GET/stats/export.csvLes mêmes chiffres au format CSVcan_sales_readPlanned

L’objet lien #

{
  "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
idstringCommence par lnk_
namestringLe nom visible par votre équipe
slugstringLa fin de l’URL publique
creator_idstringLa créatrice vers laquelle le lien redirige
source, campaignstringOrigine du trafic et nom de votre campagne
domainstringUn domaine vérifié de l’espace de travail, ou le domaine LanaChat
public_urlstringhttps://<domain>/r/<slug> : URL à mettre dans une bio ou une pub
destinationstringpool ou account
account_idstring ou nullLe compte fixe quand destination est account
utmobjectsource, medium, campaign
pixelsobjectPixels connectés déclenchés par ce lien
countersobjectclicks, conversations, first_messages, buyers, revenue_stars
archivedbooleanLes liens archivés sont exclus des stats
created_atstringISO 8601, UTC
  • destination est pool (le compte est choisi au clic parmi le pool de la créatrice, voir pools) ou account (toujours le même account_id).
  • slug : lettres minuscules, chiffres et tirets, 1 à 48 caractères, commence et finit par une lettre ou un chiffre, unique parmi les liens actifs du même domaine.
  • domain doit être un domaine vérifié de l’espace de travail ; sinon le domaine LanaChat est utilisé.
  • Valeurs utm : jusqu’à 80 lettres, chiffres, points, tirets ou underscores. Elles sont ajoutées à chaque clic et transmises aux événements pixel.

L’objet domaine #

{
  "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
hoststringUn sous-domaine en minuscules (au moins 3 labels), unique dans l’espace de travail
builtinbooleantrue pour le domaine LanaChat, qui ne peut jamais être supprimé
statusstringverified, pending ou error
errorstring ou nullPhrase claire quand status est error
sslstringnone, issuing ou active
is_defaultbooleanExactement un domaine vérifié est le domaine par défaut
labelstring ou nullUn nom pour votre équipe, jusqu’à 60 caractères
tokenstringValeur de l’enregistrement TXT de vérification
checksnumberNombre de vérifications DNS effectuées
added_at, verified_at, last_check_atstring ou nullISO 8601, UTC

L’objet connexion pixel #

{ "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
connectedbooleanLe pixel est connecté
pixel_idstringMeta : 15 ou 16 chiffres. TikTok : 20 lettres majuscules ou chiffres. Snap : un UUID
token_last4stringLes 4 derniers caractères du token d’accès, jamais le token complet
token_statusstringvalid, expired ou invalid
token_errorstring ou nullPhrase claire, par exemple « Access token expired on 3 Oct. Replace it to resume delivery. »
test_event_codestring ou nullCode test du gestionnaire d’événements de la plateforme
connected_atstringISO 8601, UTC

L’objet événement #

{
  "id": "evt_purchase",
  "name": "Purchase",
  "builtin": true,
  "trigger": { "type": "purchase" },
  "networks": { "meta": true, "tiktok": true, "snap": false }
}
FieldTypeDescription
idstringIdentifiant de l’événement
namestringNom intégré, ou votre nom personnalisé : une lettre, puis jusqu’à 39 lettres, chiffres ou underscores, unique dans l’espace de travail
builtinbooleantrue pour Lead, Contact, Purchase, Subscribe et InitiateCheckout
triggerobjecttype, et une value pour les triggers qui en ont besoin
networksobjectActivé ou désactivé pour meta, tiktok et snap

L’objet stats #

{
  "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
daysarrayUne ligne par jour UTC de la période
linksarrayUne ligne par lien, sur toute la période
sourcesarrayUne ligne par groupe de source : instagram, tiktok, snapchat, meta, x et other
clicksnumberRedirections servies
conversationsnumberConversations Telegram démarrées via le lien
first_messagesnumberFans ayant écrit au moins une fois
buyersnumberFans distincts avec un achat Stars vérifié dans la période
revenue_starsnumberAchats Stars vérifiés de ces fans dans la période

Liens #

Lister les liens #

GET /links · can_tracking ou can_sales_read

ParameterTypeRequiredDescription
creator_idstringNonLiens de cette seule créatrice
archivedbooleanNonfalse (vue par défaut) masque les liens archivés
limit, cursornumber, stringNonPagination
curl "https://api.lanachat.ai/v1/links?creator_id=cr_lea&archived=false" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La réponse est une liste paginée d’objets lien, chacun avec ses counters.

Créer un lien #

POST /links · can_tracking

ParameterTypeRequiredDescription
namestringOuiLe nom visible par votre équipe
slugstringOuiLettres minuscules, chiffres et tirets, 1 à 48 caractères
creator_idstringOuiLa créatrice vers laquelle le lien redirige
sourcestringNoninstagram, tiktok, snapchat, meta, x ou autre source
campaignstringNonNom de votre campagne
destinationstringNonpool ou account
account_idstringQuand destination est accountLe compte Telegram fixe
domainstringNonDomaine vérifié ; sinon domaine LanaChat
utmobjectNonsource, medium, campaign
pixelsobjectNonmeta, tiktok, snap : true pour activer ce pixel
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 déjà utilisé répond 409 avec The slug /lea-bio is already used by "Insta bio · Mia".
  • Un domaine non vérifié répond 400 ("Pick a verified domain…").

Obtenir un lien #

GET /links/{id} · can_tracking ou can_sales_read

curl https://api.lanachat.ai/v1/links/lnk_3 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La réponse est l’objet lien. Un id inconnu répond 404.

Remplacer un lien #

PUT /links/{id} · can_tracking

Même corps que Créer un lien ; PUT remplace tout le lien, envoyez donc tous les champs à conserver.

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

La réponse est le lien mis à jour. Mêmes erreurs qu’à la création.

Archiver ou supprimer un lien #

DELETE /links/{id} · can_tracking

ParameterTypeRequiredDescription
permanentnumberNon1 supprime définitivement au lieu d’archiver
curl -X DELETE https://api.lanachat.ai/v1/links/lnk_3 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Un lien archivé est exclu des statistiques.

Domaines #

Pour utiliser votre propre domaine, ajoutez-le, créez deux enregistrements DNS, puis vérifiez-le :

  • CNAME go.mia-links.com → links.lanachat.app
  • TXT _lanachat.go.mia-links.com = lanachat-verify=8be03d5f19a2

Les domaines en attente sont aussi vérifiés toutes les 10 minutes pendant 72 heures, puis quotidiennement. Le status devient verified et le ssl passe de issuing à active.

Lister les domaines #

GET /domains · can_tracking

ParameterTypeRequiredDescription
statusstringNonactive (vérifié) ou inactive (en attente ou erreur)
qstringNonPartie du host ou du label
curl "https://api.lanachat.ai/v1/domains?status=active" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La réponse liste des objets domaine, domaine LanaChat inclus (builtin: true).

Ajouter un domaine #

POST /domains · can_tracking

ParameterTypeRequiredDescription
hoststringOuiUn sous-domaine, par exemple 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"}'

La réponse est le nouveau domaine avec status: "pending" et son token pour l’enregistrement TXT. Le host est nettoyé (minuscules, pas de https://, pas de chemin). Les domaines racines, *.lanachat.app et un domaine déjà ajouté répondent 400 avec un message.

Vérifier un domaine #

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

Quand un enregistrement est incorrect, status est error et error indique lequel, par exemple « The CNAME record points to another service. » Le domaine LanaChat ne peut pas être vérifié (son DNS est géré par LanaChat).

Modifier un domaine #

PATCH /domains/{host} · can_tracking

ParameterTypeRequiredDescription
is_defaultbooleanNontrue pour en faire le domaine par défaut ; l’ancien domaine par défaut cesse de l’être
labelstring ou nullNonUn nom pour votre équipe, jusqu’à 60 caractères
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}'

Seul un domaine vérifié peut être le domaine par défaut. Le domaine LanaChat refuse un label (403).

Supprimer un domaine #

DELETE /domains/{host} · can_tracking

curl -X DELETE https://api.lanachat.ai/v1/domains/go.mia-links.com \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Supprimer le domaine LanaChat, le domaine par défaut ("Set another default domain first") ou un domaine utilisé par des liens actifs ("Used by N active links across all creators") répond 409.

Pixels #

Les événements sont envoyés serveur à serveur, dédupliqués avec le pixel navigateur via le même event_id, avec l’id Telegram du fan haché (SHA-256), jamais en clair. Sans consentement aucun événement n’est envoyé, jamais. Un pixel ne se déclenche que pour les liens qui l’activent.

Lire les connexions pixel #

GET /pixels · can_tracking

curl https://api.lanachat.ai/v1/pixels \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La réponse contient un objet connexion pixel pour chacun de meta, tiktok et snap, et le mode de consentement.

Connecter un pixel #

PUT /pixels/{provider} · owner

ParameterTypeRequiredDescription
pixel_idstringOuiMeta : 15 ou 16 chiffres. TikTok : 20 lettres majuscules ou chiffres. Snap : un UUID
access_tokenstringOuiToken Conversions API de la plateforme
test_event_codestringNonCode test de la plateforme
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" }

Le token d’accès est stocké chiffré et jamais renvoyé : seul token_last4 est visible. Un pixel mal formaté ou un token vide répond 400.

Déconnecter un pixel #

DELETE /pixels/{provider} · owner

curl -X DELETE https://api.lanachat.ai/v1/pixels/meta \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Envoyer un événement 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 et body sont la réponse directe de la plateforme, vous voyez donc exactement ce que Meta, TikTok ou Snap ont répondu.

Configurer le mode consentement #

PUT /pixels/consent · owner

ParameterTypeRequiredDescription
modestringOuipage : écran de consentement pour chaque fan avant ouverture de Telegram. implicit_by_country : écran seulement dans l’UE, l’EEE, le Royaume-Uni et la Suisse
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"}'

Événements #

Événements intégrés : Lead (conversation démarrée via un lien), Contact (premier message fan), Purchase (vente vérifiée), Subscribe, InitiateCheckout. Les événements personnalisés ont un trigger : sale_over (vente au-dessus d’un montant en dollars US), tag_added (un tag), nth_message (le Nième message fan, 2 ou plus) ou offer_viewed.

Lister les événements #

GET /events · can_tracking

curl https://api.lanachat.ai/v1/events \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La réponse liste des objets événement avec leurs livraisons acceptées et échouées sur 7 jours, par réseau.

Créer un événement personnalisé #

POST /events · owner

ParameterTypeRequiredDescription
namestringOuiUne lettre, puis jusqu’à 39 lettres, chiffres ou underscores ; unique dans l’espace de travail
triggerobjectOuitype : sale_over, tag_added, nth_message ou offer_viewed ; value pour les trois premiers
networksobjectNonmeta, tiktok, snap : true pour l’envoyer là
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}}'

La réponse est le nouvel événement (201). Un nom déjà utilisé répond 409.

Activer ou désactiver un événement #

PATCH /events/{id} · owner

ParameterTypeRequiredDescription
networksobjectOuimeta, tiktok, snap : true ou 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}}'

Supprimer un événement personnalisé #

DELETE /events/{id} · owner

curl -X DELETE https://api.lanachat.ai/v1/events/evt_bigspender \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Les événements intégrés ne peuvent pas être supprimés ; désactivez-les plutôt.

Statistiques #

Lire les stats #

GET /stats · can_sales_read

ParameterTypeRequiredDescription
fromstringOuiPremier jour UTC, YYYY-MM-DD, inclus
tostringOuiDernier jour UTC, YYYY-MM-DD, inclus
creator_idstringNonCette seule créatrice ; sinon toutes
curl "https://api.lanachat.ai/v1/stats?from=2026-09-06&to=2026-10-05&creator_id=cr_lea" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La réponse est l’objet stats. Les jours sont en UTC ; les liens archivés sont exclus.

Exporter les stats en CSV #

GET /stats/export.csv · can_sales_read

Mêmes paramètres que 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

Les dernières nouvelles de Lana sur Telegram

Nouveautés et invitations à la bêta, en premier sur le canal.