LanaChat

API: Telegram-Konten, Pools und Stories

8 Min. LesezeitAktualisiert Markdown

Ein Telegram-Konto ist ein Konto einer Creatorin, das über eine Geschäftsanbindung (ein Bot, den sie in ihren Telegram-Einstellungen hinzufügt) mit LanaChat verbunden ist. Konten werden in Pools gruppiert: Ein Pool besteht aus einer Creatorin, einem Markt und einer Traffic-Quelle, und neue Konversationen von einem Tracking-Link werden auf die sendenden Konten des passenden Pools verteilt. Stories werden gleichzeitig auf einem oder mehreren Konten gepostet.

Endpoints #

MethodPathDescriptionPermissionStatus
GET/accountsKonten auflisten (creator_id=, health=connected,pending,expired)can_setupPlanned
POST/accountsEin Konto mit seinem Bot-Token hinzufügen; vor dem Speichern mit Telegram geprüftcan_setupPlanned
GET/accounts/{id}Ein Konto, dessen Status und Auslastung in dieser Stundecan_setupPlanned
PATCH/accounts/{id}Gehirn, Markt, Traffic, Alias oder Antwortsprache ändern; ein- oder ausschaltencan_setupPlanned
DELETE/accounts/{id}Konto trennen (Konversationen bleiben erhalten)can_setupPlanned
POST/accounts/{id}/checkVerbindung jetzt testen statt auf die stündliche Prüfung zu wartencan_setupPlanned
GET/poolsAlle Pools mit ihren Konten, Kapazität und Statuscan_trackingPlanned
GET/pools/settingsStündliches Limit des Workspaces und Verteilungsregelncan_trackingPlanned
PUT/pools/settingsStündliches Limit (100 bis 100.000) und Verteilung änderncan_trackingPlanned
PATCH/pools/accounts/{account_id}Konto in den Pool aufnehmen oder entfernen, pausieren, Gewicht oder Stundenlimit setzencan_trackingPlanned
GET/pools/eventsPool-Protokoll: Flood-Wartezeiten, Pausen, Fortsetzungen, gehaltene Linkscan_trackingPlanned
GET/storiesGepostete und geplante Stories (creator_id=, status=)can_setupPlanned
POST/storiesEine Story jetzt posten oder auf einem oder mehreren Konten planencan_setupPlanned
GET/stories/{id}Eine Story mit ihren Aufrufen, Reaktionen und Link-Klickscan_setupPlanned
DELETE/stories/{id}Eine geplante Story abbrechencan_setupPlanned

Das Konto-Objekt #

{
  "id": "acc_1001",
  "creator_id": "cr_lea",
  "username": "lea_officiel",
  "bot_username": "lea_helper_bot",
  "health": "connected",
  "active": true,
  "brain_id": "br_lea_main",
  "pool_id": "pool_lea_fr_instagram",
  "market": "fr",
  "traffic": "instagram",
  "story_rights": true,
  "last_activity_at": "2026-10-06T13:58:20Z"
}
FieldTypeDescription
idstringBeginnt mit acc_
creator_idstringDie Creatorin, zu der dieses Konto gehört
usernamestringDer Telegram-@username des Kontos, ohne das @
bot_usernamestringDer Bot, der über die Geschäftsanbindung verknüpft ist
healthstringconnected, pending oder expired
activebooleanfalse, wenn das Konto ausgeschaltet ist: die KI antwortet nicht
brain_idstring oder nullDas AI Brain, das auf diesem Konto antwortet
pool_idstringDer Pool, in den es durch market und traffic einsortiert wird
marketstringSprachmarkt, z. B. fr, en, pt-BR oder all
trafficstringTraffic-Quelle, z. B. instagram oder tiktok
story_rightsbooleanOb die Geschäftsanbindung LanaChat erlaubt, Stories zu posten
last_activity_atstringLetzte gesendete oder empfangene Nachricht, ISO 8601 UTC
  • health ist connected, pending (die Geschäftsanbindung ist noch nicht bestätigt) oder expired (der Bot hat keinen Zugriff mehr; erneut verbinden).
  • Das Bot-Token wird nie zurückgegeben. LanaChat fragt niemals nach Telefonnummer, Passwort oder 2FA-Code.

Konten #

Konten auflisten #

GET /accounts · can_setup

ParameterTypeRequiredDescription
creator_idstringNeinNur die Konten dieser Creatorin
healthstringNeinconnected, pending oder expired; mehrere durch Kommas getrennt
limit, cursornumber, stringNeinPagination
curl "https://api.lanachat.ai/v1/accounts?creator_id=cr_lea&health=connected,expired" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [
    { "id": "acc_1001", "creator_id": "cr_lea", "username": "lea_officiel", "bot_username": "lea_helper_bot", "health": "connected", "active": true, "brain_id": "br_lea_main", "pool_id": "pool_lea_fr_instagram", "market": "fr", "traffic": "instagram", "story_rights": true, "last_activity_at": "2026-10-06T13:58:20Z" },
    { "id": "acc_1004", "creator_id": "cr_lea", "username": "lea_backup", "bot_username": "lea_helper2_bot", "health": "connected", "active": true, "brain_id": "br_lea_main", "pool_id": "pool_lea_fr_instagram", "market": "fr", "traffic": "instagram", "story_rights": false, "last_activity_at": "2026-10-06T13:51:02Z" }
  ],
  "next_cursor": null
}

Konto hinzufügen #

POST /accounts · can_setup

ParameterTypeRequiredDescription
creator_idstringJaDie Creatorin, zu der das Konto gehört
bot_tokenstringJaDas Token des Bots, den sie in ihren Telegram Business-Einstellungen verknüpft hat
marketstringNeinSprachmarkt, z. B. fr
trafficstringNeinTraffic-Quelle, z. B. instagram
curl -X POST https://api.lanachat.ai/v1/accounts \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"creator_id": "cr_lea", "bot_token": "<bot token>", "market": "fr", "traffic": "instagram"}'
{
  "id": "acc_1007",
  "creator_id": "cr_lea",
  "username": "lea_officiel",
  "bot_username": "lea_helper_bot",
  "health": "pending",
  "active": true,
  "brain_id": "br_lea_main",
  "pool_id": "pool_lea_fr_instagram",
  "market": "fr",
  "traffic": "instagram",
  "story_rights": false,
  "last_activity_at": null
}

Die Antwort ist das Konto (201) mit health: "pending", bis die Creatorin die Geschäftsanbindung in Telegram bestätigt. Das Bot-Token wird vor dem Speichern mit Telegram geprüft: Ein von Telegram abgelehntes Token antwortet mit 400. Ein Konto, das bereits in einem anderen Workspace aktiv ist, wird abgelehnt (409). Jedes Konto benötigt eine Lizenz zum Antworten: siehe Billing.

Konto abrufen #

GET /accounts/{id} · can_setup

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

Die Antwort ist das Konto-Objekt mit seiner Auslastung in dieser Stunde. Eine unbekannte ID antwortet mit 404.

Konto aktualisieren #

PATCH /accounts/{id} · can_setup

ParameterTypeRequiredDescription
brain_idstringNeinDas Brain, das auf diesem Konto antwortet
marketstringNeinSprachmarkt; verschiebt das Konto in den passenden Pool
trafficstringNeinTraffic-Quelle; verschiebt das Konto in den passenden Pool
activebooleanNeinfalse schaltet das Konto aus, true wieder ein

Alias und Antwortsprache des Kontos können auf dieselbe Weise geändert werden.

curl -X PATCH https://api.lanachat.ai/v1/accounts/acc_1004 \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"traffic": "tiktok", "active": true}'

Die Antwort ist das aktualisierte Konto. Das Ausschalten des letzten sendenden Kontos einer Creatorin mit aktiven Links antwortet mit 409.

Konto trennen #

DELETE /accounts/{id} · can_setup

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

Die Konversationen bleiben erhalten. Das Entfernen des letzten sendenden Kontos einer Creatorin mit aktiven Links wird mit 409 abgelehnt.

Verbindung jetzt prüfen #

POST /accounts/{id}/check · can_setup

curl -X POST https://api.lanachat.ai/v1/accounts/acc_1001/check \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"

LanaChat prüft jedes Konto einmal pro Stunde; dieser Aufruf testet es sofort. Die Antwort ist das Konto mit seinem aktuellen health.

Pools #

Ein Pool entsteht durch die Tags seiner Konten (market und traffic); es gibt nichts zu erstellen. Eine neue Konversation geht an den Pool, dessen Traffic mit der Linkquelle übereinstimmt und dessen Markt zur Sprache des Fans passt, dann an den "All traffic"-Pool der Creatorin, dann an einen ihrer Pools, die noch senden. Bestehende Konversationen bleiben immer auf ihrem Konto.

Pools auflisten #

GET /pools · can_tracking

curl https://api.lanachat.ai/v1/pools \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [
    {
      "id": "pool_lea_fr_instagram",
      "name": "French · Instagram",
      "creator_id": "cr_lea",
      "accounts": ["acc_1001", "acc_1004"],
      "sent_last_hour": 312,
      "capacity_per_hour": 400,
      "status": "near"
    }
  ],
  "next_cursor": null
}

status ist sending, near (80 % der Kapazität), saturated (95 %) oder none (kein sendendes Konto).

Pool-Einstellungen abrufen #

GET /pools/settings · can_tracking

curl https://api.lanachat.ai/v1/pools/settings \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "cap_per_hour": 2000,
  "default_limit_per_hour": 200,
  "distribution": { "mode": "weighted", "warmup": true, "hold_when_saturated": true }
}
FieldTypeDescription
cap_per_hournumberNachrichten, die der gesamte Workspace in einer rollierenden Stunde senden darf, 100 bis 100.000
default_limit_per_hournumberStündliches Limit für ein neues Konto im Pool
distribution.modestringweighted (zufällig, proportional zum Gewicht jedes Kontos), round_robin (jedes Konto der Reihe nach) oder least_loaded (das Konto, das am weitesten vom Limit entfernt ist)
distribution.warmupbooleanEin neues Konto startet mit 50 Nachrichten pro Stunde und erreicht sein volles Limit am Tag 7
distribution.hold_when_saturatedbooleanWenn kein Konto einen neuen Fan aufnehmen kann, wird der Fan gehalten, bis eines frei wird, zuerst der älteste; sonst bekommt der Fan das am wenigsten ausgelastete Konto, auch über dem Limit

Wenn der Workspace das cap_per_hour erreicht, leiten Links weiter, aber neue Konversationen werden gehalten, bis die Stunde unter das Limit fällt.

Pool-Einstellungen ändern #

PUT /pools/settings · can_tracking

ParameterTypeRequiredDescription
cap_per_hournumberJa100 bis 100.000, ganze Zahl
default_limit_per_hournumberJa10 bis 1.000, ganze Zahl
distributionobjectJamode, warmup und hold_when_saturated, wie oben
curl -X PUT https://api.lanachat.ai/v1/pools/settings \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cap_per_hour": 3000, "default_limit_per_hour": 200, "distribution": {"mode": "least_loaded", "warmup": true, "hold_when_saturated": true}}'

Die Antwort sind die neuen Einstellungen. Ein Limit außerhalb von 100 bis 100.000 antwortet mit 400.

Konto im Pool ändern #

PATCH /pools/accounts/{account_id} · can_tracking

ParameterTypeRequiredDescription
in_poolbooleanNeinfalse nimmt das Konto aus dem Pool: es behält seine Konversationen, bekommt aber keine neuen Fans
pausedbooleanNeintrue pausiert es im Pool
weightnumberNein0 bis 100; Anteil neuer Fans im weighted-Modus (0 erlaubt: keine neuen Fans)
limit_per_hournumberNein10 bis 1.000 Nachrichten pro Stunde für dieses Konto
curl -X PATCH https://api.lanachat.ai/v1/pools/accounts/acc_1004 \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"weight": 40, "limit_per_hour": 300}'
{
  "account_id": "acc_1004",
  "creator_id": "cr_lea",
  "username": "lea_backup",
  "in_pool": true,
  "paused": false,
  "weight": 40,
  "limit_per_hour": 300,
  "sent_last_hour": 88,
  "new_conversations_today": 41,
  "state": "active",
  "flood_wait_until": null,
  "warmup_day": 7,
  "added_at": "2026-09-20T10:00:00Z"
}
  • state ist active oder flood_wait: Bei einem Telegram-Flood-Wartebefehl pausiert das Konto bis flood_wait_until und setzt dann selbstständig fort.
  • Während der Aufwärmphase (warmup_day 1 bis 7) sendet das Konto weniger als sein limit_per_hour: 50 Nachrichten pro Stunde am Tag 1, das volle Limit am Tag 7.
  • Das Herausnehmen, Pausieren oder Entfernen des letzten sendenden Kontos einer Creatorin mit aktiven Links wird mit 409 abgelehnt.

Pool-Protokoll lesen #

GET /pools/events · can_tracking

ParameterTypeRequiredDescription
creator_idstringNeinNur die Events der Konten dieser Creatorin
limit, cursornumber, stringNeinPagination
curl "https://api.lanachat.ai/v1/pools/events?creator_id=cr_lea&limit=2" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [
    { "at": "2026-10-06T13:40:12Z", "kind": "resumed", "creator_id": "cr_lea", "account_id": "acc_1004", "text": "@lea_backup is sending again." },
    { "at": "2026-10-06T13:25:12Z", "kind": "flood_wait", "creator_id": "cr_lea", "account_id": "acc_1004", "text": "@lea_backup hit a Telegram flood wait of 900 seconds." }
  ],
  "next_cursor": "eyJhdCI6IjIwMjYtMTAtMDZUMTM6MjU6MTJaIn0"
}

kind ist flood_wait, account_paused, resumed, link_paused (das Workspace-Limit wurde erreicht, neue Fans werden gehalten), account_added, account_removed oder settings. text ist ein einfacher englischer Satz.

Stories #

Stories auflisten #

GET /stories · can_setup

ParameterTypeRequiredDescription
creator_idstringNeinNur die Stories dieser Creatorin
statusstringNeinZum Beispiel scheduled
limit, cursornumber, stringNeinPagination
curl "https://api.lanachat.ai/v1/stories?creator_id=cr_lea&status=scheduled" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [ { "id": "sto_88", "status": "scheduled", "run_at": "2026-10-06T19:00:00Z", "account_ids": ["acc_1001", "acc_1004"] } ],
  "next_cursor": null
}

Story posten #

POST /stories · can_setup

ParameterTypeRequiredDescription
account_idsarray of stringsJaDie Konten, die sie posten
media_idstringJaEin Foto oder Video aus dem Vault der Creatorin
textstringNeinBildunterschrift
link_idstringNeinEin Tracking-Link, der in der Story angezeigt wird
duration_hoursnumberNeinWie lange die Story sichtbar bleibt
run_atstring oder nullNeinWann sie gepostet wird (ISO 8601 UTC); weglassen für sofort
curl -X POST https://api.lanachat.ai/v1/stories \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"account_ids": ["acc_1001", "acc_1004"], "media_id": "med_5521", "text": "New set tonight", "link_id": "lnk_3", "duration_hours": 24, "run_at": "2026-10-06T19:00:00Z"}'
{ "id": "sto_88", "status": "scheduled", "run_at": "2026-10-06T19:00:00Z", "account_ids": ["acc_1001", "acc_1004"] }

Ein Konto ohne das Recht "manage stories" in seiner Geschäftsanbindung (story_rights: false) wird abgelehnt, mit dem Grund in message.

Story abrufen #

GET /stories/{id} · can_setup

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

Die Antwort ist die Story mit ihren Aufrufen, Reaktionen und Link-Klicks, sobald sie gepostet wurde.

Geplante Story abbrechen #

DELETE /stories/{id} · can_setup

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

Nur eine geplante Story kann abgebrochen werden.

Die neuesten Nachrichten zu Lana auf Telegram

Neue Releases und Beta-Einladungen, zuerst im Kanal.