LanaChat

API: enlaces de seguimiento, dominios, píxeles y estadísticas

9 min de lecturaActualizado Markdown

Un enlace de seguimiento envía a un visitante a una creadora en Telegram y cuenta lo que sigue: clics, conversaciones, primeros mensajes, compradores e ingresos. Los enlaces pueden estar en tu propio dominio, activar píxeles de publicidad (Meta, TikTok, Snap) y enviar eventos al servidor. Estos endpoints coinciden con la página Tracking.

Endpoints #

MétodoRutaDescripciónPermisoEstado
GET/linksLista enlaces (creator_id=, archived=false) con sus contadorescan_tracking o can_sales_readPlanned
POST/linksCrear un enlacecan_trackingPlanned
GET/links/{id}Un enlacecan_tracking o can_sales_readPlanned
PUT/links/{id}Reemplazar un enlace (nombre, slug, dominio, destino, UTM, píxeles)can_trackingPlanned
DELETE/links/{id}Archivar un enlace (permanent=1 lo elimina)can_trackingPlanned
GET/domainsTus dominios (status=active,inactive, q=)can_trackingPlanned
POST/domainsAñadir un dominio (estado pending)can_trackingPlanned
POST/domains/{host}/verifyVerificar sus registros DNS ahoracan_trackingPlanned
PATCH/domains/{host}Hacer un dominio verificado el predeterminado, o cambiar su etiquetacan_trackingPlanned
DELETE/domains/{host}Eliminar un dominio que no use ningún enlace activocan_trackingPlanned
GET/pixelsLas conexiones de Meta, TikTok y Snap y el modo de consentimientocan_trackingPlanned
PUT/pixels/{provider}Conectar o reemplazar un píxel (meta, tiktok, snap)ownerPlanned
DELETE/pixels/{provider}Desconectar un píxelownerPlanned
POST/pixels/{provider}/testEnviar un evento de prueba y devolver la respuesta de la plataformacan_trackingPlanned
PUT/pixels/consentModo de consentimiento: page o implicit_by_countryownerPlanned
GET/eventsEventos integrados y personalizados, con conteos de entrega de 7 díascan_trackingPlanned
POST/eventsCrear un evento personalizadoownerPlanned
PATCH/events/{id}Activar o desactivar un evento por redownerPlanned
DELETE/events/{id}Eliminar un evento personalizadoownerPlanned
GET/statsTotales diarios, por enlace y por fuente (from=, to=, creator_id=)can_sales_readPlanned
GET/stats/export.csvLos mismos números en CSVcan_sales_readPlanned

El objeto enlace #

{
  "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"
}
CampoTipoDescripción
idstringEmpieza con lnk_
namestringEl nombre que ve tu equipo
slugstringEl final de la URL pública
creator_idstringLa creadora a la que envía el enlace
source, campaignstringDe dónde viene el tráfico y el nombre de tu campaña
domainstringUn dominio verificado del workspace, o el dominio de LanaChat
public_urlstringhttps://<domain>/r/<slug>: la URL para poner en una bio o un anuncio
destinationstringpool o account
account_idstring o nullLa cuenta fija cuando destination es account
utmobjectsource, medium, campaign
pixelsobjectQué píxeles conectados se activan con este enlace
countersobjectclicks, conversations, first_messages, buyers, revenue_stars
archivedbooleanLos enlaces archivados se excluyen de las estadísticas
created_atstringISO 8601, UTC
  • destination es pool (la cuenta se elige al hacer clic entre el pool de la creadora, ver pools) o account (siempre la misma account_id).
  • slug: letras minúsculas, dígitos y guiones, de 1 a 48 caracteres, empezando y terminando con letra o dígito, único entre enlaces activos del mismo dominio.
  • domain debe ser un dominio verificado del workspace; sin él se usa el dominio de LanaChat.
  • Valores utm: hasta 80 letras, dígitos, puntos, guiones o guiones bajos. Se añaden en cada clic y se envían a los eventos de píxel.

El objeto dominio #

{
  "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
}
CampoTipoDescripción
hoststringUn subdominio en minúsculas (al menos 3 etiquetas), único en el workspace
builtinbooleantrue para el dominio de LanaChat, que nunca se puede eliminar
statusstringverified, pending o error
errorstring o nullUna frase simple cuando status es error
sslstringnone, issuing o active
is_defaultbooleanExactamente un dominio verificado es el predeterminado
labelstring o nullUn nombre para tu equipo, hasta 60 caracteres
tokenstringEl valor del registro TXT de verificación
checksnumberComprobaciones DNS realizadas hasta ahora
added_at, verified_at, last_check_atstring o nullISO 8601, UTC

El objeto conexión de píxel #

{ "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" }
CampoTipoDescripción
connectedbooleanEl píxel está conectado
pixel_idstringMeta: 15 o 16 dígitos. TikTok: 20 letras mayúsculas o dígitos. Snap: un UUID
token_last4stringLos últimos 4 caracteres del token de acceso, nunca el token completo
token_statusstringvalid, expired o invalid
token_errorstring o nullUna frase simple, por ejemplo "Access token expired on 3 Oct. Replace it to resume delivery."
test_event_codestring o nullEl código de prueba del gestor de eventos de la plataforma
connected_atstringISO 8601, UTC

El objeto evento #

{
  "id": "evt_purchase",
  "name": "Purchase",
  "builtin": true,
  "trigger": { "type": "purchase" },
  "networks": { "meta": true, "tiktok": true, "snap": false }
}
CampoTipoDescripción
idstringEl id del evento
namestringNombre integrado, o tu nombre personalizado: una letra, luego hasta 39 letras, dígitos o guiones bajos, único en el workspace
builtinbooleantrue para Lead, Contact, Purchase, Subscribe e InitiateCheckout
triggerobjecttype, y un value para los triggers que lo requieren
networksobjectActivado o desactivado para meta, tiktok y snap

El objeto estadísticas #

{
  "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 } ]
}
CampoTipoDescripción
daysarrayUna fila por día UTC del período
linksarrayUna fila por enlace, en todo el período
sourcesarrayUna fila por grupo de fuente: instagram, tiktok, snapchat, meta, x y other
clicksnumberRedirecciones servidas
conversationsnumberConversaciones de Telegram iniciadas con el enlace
first_messagesnumberFans que escribieron al menos una vez
buyersnumberFans distintos con una compra verificada de Stars en el período
revenue_starsnumberCompras verificadas de Stars de esos fans en el período

Enlaces #

Listar enlaces #

GET /links · can_tracking o can_sales_read

ParámetroTipoObligatorioDescripción
creator_idstringNoSolo enlaces de esta creadora
archivedbooleanNofalse (vista por defecto) oculta enlaces archivados
limit, cursornumber, stringNoPaginación
curl "https://api.lanachat.ai/v1/links?creator_id=cr_lea&archived=false" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La respuesta es una lista paginada de objetos enlace, cada uno con sus counters.

Crear un enlace #

POST /links · can_tracking

ParámetroTipoObligatorioDescripción
namestringSíEl nombre que ve tu equipo
slugstringSíLetras minúsculas, dígitos y guiones, de 1 a 48 caracteres
creator_idstringSíLa creadora a la que envía el enlace
sourcestringNoinstagram, tiktok, snapchat, meta, x u otra fuente
campaignstringNoEl nombre de tu campaña
destinationstringNopool o account
account_idstringCuando destination es accountLa cuenta fija de Telegram
domainstringNoUn dominio verificado; sin él se usa el dominio de LanaChat
utmobjectNosource, medium, campaign
pixelsobjectNometa, tiktok, snap: true para activar ese píxel
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 ya usado responde 409 con The slug /lea-bio is already used by "Insta bio · Mia".
  • Un dominio no verificado responde 400 ("Pick a verified domain…").

Obtener un enlace #

GET /links/{id} · can_tracking o can_sales_read

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

La respuesta es el objeto enlace. Un id desconocido responde 404.

Reemplazar un enlace #

PUT /links/{id} · can_tracking

Mismo cuerpo que Crear un enlace; PUT reemplaza todo el enlace, así que envía todos los campos que quieras conservar.

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 respuesta es el enlace actualizado. Mismos errores que al crear uno.

Archivar o eliminar un enlace #

DELETE /links/{id} · can_tracking

ParámetroTipoObligatorioDescripción
permanentnumberNo1 elimina el enlace definitivamente en lugar de archivarlo
curl -X DELETE https://api.lanachat.ai/v1/links/lnk_3 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Un enlace archivado se excluye de las estadísticas.

Dominios #

Para usar tu propio dominio, añádelo, crea dos registros DNS y luego verifícalo:

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

Los dominios pendientes también se revisan cada 10 minutos durante 72 horas, luego diariamente. El status pasa a verified y el ssl cambia a issuing y luego active.

Listar dominios #

GET /domains · can_tracking

ParámetroTipoObligatorioDescripción
statusstringNoactive (verificado) o inactive (pendiente o error)
qstringNoParte del host o de la etiqueta
curl "https://api.lanachat.ai/v1/domains?status=active" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La respuesta lista objetos dominio, incluido el dominio de LanaChat (builtin: true).

Añadir un dominio #

POST /domains · can_tracking

ParámetroTipoObligatorioDescripción
hoststringSíUn subdominio, por ejemplo 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 respuesta es el nuevo dominio con status: "pending" y su token para el registro TXT. El host se limpia (minúsculas, sin https://, sin ruta). Dominios raíz, *.lanachat.app y un dominio ya añadido responden 400 con una frase.

Verificar un dominio #

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

Cuando un registro es incorrecto, status es error y error indica cuál, por ejemplo "The CNAME record points to another service." El dominio de LanaChat no puede verificarse (su DNS lo gestiona LanaChat).

Cambiar un dominio #

PATCH /domains/{host} · can_tracking

ParámetroTipoObligatorioDescripción
is_defaultbooleanNotrue lo hace el dominio predeterminado; el anterior predeterminado deja de serlo
labelstring o nullNoUn nombre para tu equipo, hasta 60 caracteres
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}'

Solo un dominio verificado puede ser el predeterminado. El dominio de LanaChat rechaza una etiqueta (403).

Eliminar un dominio #

DELETE /domains/{host} · can_tracking

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

Eliminar el dominio de LanaChat, el dominio predeterminado ("Set another default domain first") o un dominio usado por enlaces activos ("Used by N active links across all creators") responde 409.

Píxeles #

Los eventos se envían servidor a servidor, deduplicados con el píxel del navegador mediante el mismo event_id, con el id de Telegram del fan hasheado (SHA-256), nunca en crudo. Sin consentimiento no se envía ningún evento, nunca. Un píxel se activa solo para enlaces que lo habilitan.

Leer conexiones de píxel #

GET /pixels · can_tracking

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

La respuesta contiene una conexión de píxel para cada uno de meta, tiktok y snap, y el mode de consentimiento.

Conectar un píxel #

PUT /pixels/{provider} · owner

ParámetroTipoObligatorioDescripción
pixel_idstringSíMeta: 15 o 16 dígitos. TikTok: 20 letras mayúsculas o dígitos. Snap: un UUID
access_tokenstringSíEl token de la API de Conversiones de la plataforma
test_event_codestringNoEl código de prueba de la plataforma
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" }

El token de acceso se almacena cifrado y nunca se devuelve: solo token_last4. Un id de píxel en formato incorrecto o un token vacío responde 400.

Desconectar un píxel #

DELETE /pixels/{provider} · owner

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

Enviar un evento de prueba #

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 y body son la respuesta propia de la plataforma, así ves exactamente lo que dijo Meta, TikTok o Snap.

Configurar el modo de consentimiento #

PUT /pixels/consent · owner

ParámetroTipoObligatorioDescripción
modestringSípage: una pantalla de consentimiento para cada fan antes de abrir Telegram. implicit_by_country: la pantalla solo en la UE y EEE, Reino Unido y Suiza
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"}'

Eventos #

Eventos integrados: Lead (conversación iniciada desde un enlace), Contact (primer mensaje del fan), Purchase (venta verificada), Subscribe, InitiateCheckout. Los eventos personalizados tienen un trigger: sale_over (una venta sobre un monto en dólares), tag_added (una etiqueta), nth_message (el N-ésimo mensaje del fan, 2 o más) u offer_viewed.

Listar eventos #

GET /events · can_tracking

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

La respuesta lista objetos evento con sus entregas aceptadas y fallidas en 7 días, por red.

Crear un evento personalizado #

POST /events · owner

ParámetroTipoObligatorioDescripción
namestringSíUna letra, luego hasta 39 letras, dígitos o guiones bajos; único en el workspace
triggerobjectSítype: sale_over, tag_added, nth_message u offer_viewed; value para los tres primeros
networksobjectNometa, tiktok, snap: true para enviarlo ahí
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 respuesta es el nuevo evento (201). Un nombre ya usado responde 409.

Activar o desactivar un evento #

PATCH /events/{id} · owner

ParámetroTipoObligatorioDescripción
networksobjectSímeta, tiktok, snap: true o 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}}'

Eliminar un evento personalizado #

DELETE /events/{id} · owner

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

Los eventos integrados no se pueden eliminar; desactívalos en su lugar.

Estadísticas #

Leer estadísticas #

GET /stats · can_sales_read

ParámetroTipoObligatorioDescripción
fromstringSíPrimer día UTC, YYYY-MM-DD, incluido
tostringSíÚltimo día UTC, YYYY-MM-DD, incluido
creator_idstringNoSolo esta creadora; sin él, todas las creadoras
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 respuesta es el objeto estadísticas. Los días son UTC; los enlaces archivados se excluyen.

Exportar estadísticas en CSV #

GET /stats/export.csv · can_sales_read

Mismos parámetros 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

Las últimas novedades de Lana en Telegram

Novedades e invitaciones a la beta, primero en el canal.