LanaChat API: Schnellstart, Authentifizierung und Fehler
Alles, was Ihr Team in der Console macht, kann Ihr Code auch tun. Die LanaChat API liest und ändert Ihren gesamten Workspace: Creatorinnen, Telegram-Konten, AI Brains, Skripte, den Vault, Fans und Konversationen, Tracking-Links, Abrechnung und Ihr Team. Es ist einfaches JSON über HTTPS, eine URL pro Ressource, mit denselben Berechtigungen wie die Console. Webhooks senden Ereignisse an Ihren Server, und der MCP-Server ermöglicht einem KI-Assistenten wie Claude oder Cursor, mit demselben Token in Ihrem Workspace zu arbeiten.
Hinweis Dies ist die öffentliche API-Referenz. Endpunkte, die mit Planned markiert sind, sind der veröffentlichte Vertrag, auf dem das Backend basiert: Sie antworten noch nicht. Die MCP-Verbindung verwendet dieselben Zugriffstoken.
Was Sie bauen können #
- Ein Sales-Dashboard in Ihren eigenen Tools: heutiger Umsatz pro Creatorin, pro Link, pro Quelle.
- Benachrichtigungen in Slack oder Telegram, wenn ein Fan kauft, wenn eine Konversation überprüft werden muss oder wenn ein Konto die Verbindung verliert.
- Ein Setup-Skript, das eine Creatorin hinzufügt, ihre Konten verbindet, ihren Vault hochlädt und ihr erstes Skript schreibt.
- Eine Tracking-Pipeline: Erstellen Sie einen Link pro Anzeige, lesen Sie Klicks, Konversationen und Käufer jede Stunde aus.
- Einen KI-Assistenten, der Skripte und Persona-Änderungen für Ihre Überprüfung entwirft, über MCP.
Schnellstart in 5 Minuten #
- Öffnen Sie in der Console Users › API & MCP und klicken Sie auf Create token.
- Benennen Sie es (zum Beispiel „Reporting script“), wählen Sie Custom permissions und aktivieren Sie, was benötigt wird, z. B. Read fans and conversations und Read sales.
- Speichern Sie, dann klicken Sie auf Copy token. Das Token wird nur einmal angezeigt.
4. Bewahren Sie es in einer Umgebungsvariable auf, damit es nie im Code steht:
export LANACHAT_TOKEN="lc_live_8f2c1d0e9b7a4c6f"
5. Machen Sie Ihren ersten Aufruf. Er gibt Ihren Workspace und die Berechtigungen des Tokens zurück:
curl https://api.lanachat.ai/v1/workspace \
-H "Authorization: Bearer $LANACHAT_TOKEN"
const res = await fetch('https://api.lanachat.ai/v1/workspace', {
headers: { Authorization: `Bearer ${process.env.LANACHAT_TOKEN}` },
});
if (!res.ok) throw new Error((await res.json()).error.message);
const workspace = await res.json();
console.log(workspace.name, workspace.token.permissions);
import os
import requests
r = requests.get(
"https://api.lanachat.ai/v1/workspace",
headers={"Authorization": f"Bearer {os.environ['LANACHAT_TOKEN']}"},
timeout=30,
)
r.raise_for_status()
print(r.json()["name"])
{
"id": "ws_7Hq2",
"name": "Mia Agency",
"kind": "agency",
"timezone": "Europe/Paris",
"token": { "id": "tok_31", "name": "Reporting script", "permissions": ["can_fan_read", "can_sales_read"], "expires_at": "2027-01-06T00:00:00Z" }
}
Das war’s: Jeder andere Endpunkt funktioniert genauso. Fertige Skripte finden Sie in API quick recipes.
Alle Ressourcen #
| Resource | Was sie abdeckt | Anleitung |
|---|---|---|
| Workspace | GET /workspace: der Workspace und die Berechtigungen des Tokens | Diese Seite |
| Creators | Creatorinnen, Identität, Persona und Setup-Fortschritt | Creators |
| Telegram accounts | Konten, Pools, Pool-Einstellungen und Stories | Telegram accounts |
| AI Brains | Brains, Entwürfe, Veröffentlichung, Versionen und der Playground | AI Brains |
| Scripts | Skripte, Schritte und Ordner | Scripts |
| Vault | Medien, Ordner und signierte Uploads | Vault |
| Fans and conversations | Fans, Listen, Verkäufe eines Fans, Nachrichten, Übernahme | Conversations |
| Tracking | Links, Domains, Pixel, Events und Statistiken | Tracking |
| Billing | Guthaben, Buchhaltung, Einzahlungen, Lizenzen, Auszahlungen, Rechnungen | Billing |
| Team | Mitglieder, Rollen und Zugriffstoken | Team |
| Webhooks | Ereignisse, die an Ihren Server gesendet werden, Signaturen und Wiederholungen | Webhooks |
| MCP | Der Server für KI-Assistenten und seine Werkzeuge | MCP |
Basis-URL und Versionen #
Jeder Pfad in diesen Anleitungen ist relativ zu:
https://api.lanachat.ai/v1
Die Version steht im Pfad. Eine breaking change erhält eine neue Version (/v2); neue Felder und Endpunkte werden ohne Ankündigung zu /v1 hinzugefügt, ignorieren Sie also unbekannte Felder.
Authentifizierung #
Jede Anfrage trägt Ihr Token im Header Authorization, nach dem Wort Bearer:
Authorization: Bearer lc_live_8f2c1d0e9b7a4c6f
- Erstellen, bearbeiten, rotieren und widerrufen Sie Tokens in Users › API & MCP oder mit den Token-Endpunkten. Nur der Workspace-Besitzer und Agenturinhaber können diese Seite öffnen.
- Ein Token wird nur einmal angezeigt, wenn Sie es erstellen. Speichern Sie es wie ein Passwort; Rotate oder Revoke Sie es auf derselben Seite.
- Eine Anfrage ohne gültiges Token antwortet mit
401. Ein Token ohne die benötigte Berechtigung für einen Endpunkt antwortet mit403. - Tokens gehören nie in eine URL oder in Browser-Code: Rufen Sie die API von Ihrem Server aus auf.
- Verwenden Sie pro Skript oder Assistent ein eigenes Token, damit jedes einzeln geändert oder widerrufen werden kann.
Workspaces #
Ein Token gehört zu genau einem Workspace, dem, in dem es erstellt wurde. Jede Anfrage liest und schreibt nur in diesem Workspace; es gibt keine Workspace-ID in den Pfaden. Ein Owner-Token (der Workspace, der mehrere Agenturen verwaltet) kann mit dem Header LanaChat-Workspace: ws_… für eine seiner Agenturen handeln; jedes andere Token, das diesen Header sendet, erhält 403.
Berechtigungen #
Jeder Endpunkt listet die benötigte Berechtigung auf. Das sind die, die Sie beim Erstellen eines Tokens ankreuzen:
| Berechtigung | In der Console | Ermöglicht |
|---|---|---|
can_setup | Workspace-Setup verwalten | Creatorinnen, Medien, Telegram-Konten, Skripte und Teammitglieder |
can_engine | Zugriff auf KI-Konfiguration | AI Brain-Entwürfe, KI-Einstellungen und Tests von Skripten |
can_publish | AI Brain-Entwürfe veröffentlichen | Veröffentlichung eines Brain-Entwurfs (benötigt can_engine) |
can_ai_test | Erweiterte KI-Entwürfe testen | Testen von Entwürfen mit Advanced AI (nur Owner-Workspace) |
can_ai_tune | Erweiterte KI-Einstellungen anpassen | Ändern der Sensitivitätseinstellungen von Advanced AI (nur Owner-Workspace) |
can_ai_publish | Erweiterte KI-Profile veröffentlichen | Veröffentlichung von Profilen mit Advanced AI (nur Owner-Workspace) |
can_commercial_reports | Kommerzielle Experimentberichte lesen | Experimente und deren Prüfberichte (nur Owner-Workspace) |
can_fan_read | Fans und Konversationen lesen | Fans, Konversationen und Nachrichten, nur lesend |
can_fan_import | Fan-Historie importieren | Import von vergangenen Fans und Nachrichten |
can_sales_read | Verkäufe lesen | Verkäufe, Statistiken und Dashboard-Zahlen |
can_chat | Neu: Chat mit Fans | Nachrichten senden, Reaktionen und Übernahme einer Konversation |
can_tracking | Neu: Tracking verwalten | Links, Domains, Pools, Pixel und Events |
owner | Owner-Token | Abrechnung, Rollen, Webhooks und Zugriffstoken; nur der Workspace-Besitzer kann es erstellen |
- Das Deaktivieren von Access AI configuration (
can_engine) deaktiviert auch Veröffentlichung, Advanced AI und Experimentberichte. can_chat,can_trackingund dasowner-Token sind geplant: Die Console bietet sie noch nicht an.
Anfragen und Antworten #
- Bodies sind JSON (
Content-Type: application/json), in UTF-8. Uploads erfolgen über eine signierte URL, niemals direkt über die API. - IDs sind Strings mit einem Präfix, das angibt, was sie sind:
cr_Creatorin,acc_Telegram-Konto,pool_,sto_Story,br_Brain,scr_Skript,med_Medium,fan_,conv_Konversation,msg_,lnk_Link,px_Pixel,mem_Mitglied,tok_Token. - Zeiten sind ISO 8601 in UTC (
2026-10-06T14:05:00Z). Tage in Statistiken sind UTC-Tage. - Geldbeträge sind in US-Cent (
amount_cents: 1900sind $19,00). Telegram Stars sind ganze Zahlen (stars: 250). PATCHändert nur die gesendeten Felder.PUTersetzt das ganze Objekt.- Ein
POST, das etwas erstellt, antwortet mit201und dem neuen Objekt; andere erfolgreiche Aufrufe antworten mit200.
Pagination #
Jede Liste antwortet mit einer Seite und einem Cursor zur nächsten:
curl "https://api.lanachat.ai/v1/fans?limit=50&cursor=eyJpZCI6ImZhbl85MjAifQ" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
{
"data": [ { "id": "fan_921", "display_name": "Marco", "creator_id": "cr_lea" } ],
"next_cursor": "eyJpZCI6ImZhbl85NzAifQ"
}
limitist 1 bis 100, standardmäßig 25.next_cursoristnullauf der letzten Seite. Ein Cursor ist undurchsichtig: Geben Sie ihn unverändert zurück, bauen Sie ihn nie selbst.- Listen sind standardmäßig nach neuestem Eintrag sortiert, außer der Endpunkt sagt etwas anderes.
Um alle Seiten zu lesen, wiederholen Sie, bis next_cursor null ist:
async function all(path) {
const items = [];
let cursor = null;
do {
const url = new URL('https://api.lanachat.ai/v1' + path);
url.searchParams.set('limit', '100');
if (cursor) url.searchParams.set('cursor', cursor);
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.LANACHAT_TOKEN}` } });
if (!res.ok) throw new Error((await res.json()).error.message);
const page = await res.json();
items.push(...page.data);
cursor = page.next_cursor;
} while (cursor);
return items;
}
const fans = await all('/fans?creator_id=cr_lea');
import os
import requests
def all_items(path, **params):
items, cursor = [], None
while True:
r = requests.get(
"https://api.lanachat.ai/v1" + path,
params={**params, "limit": 100, **({"cursor": cursor} if cursor else {})},
headers={"Authorization": f"Bearer {os.environ['LANACHAT_TOKEN']}"},
timeout=30,
)
r.raise_for_status()
page = r.json()
items += page["data"]
cursor = page["next_cursor"]
if not cursor:
return items
fans = all_items("/fans", creator_id="cr_lea")
Fehler #
Ein Fehler antwortet mit einem 4xx- oder 5xx-Status und immer demselben Body:
{
"error": {
"code": "insufficient_balance",
"message": "Your balance is $12.40 and this pack costs $170.00. Top up first."
}
}
| Status | code | Wann |
|---|---|---|
| 400 | invalid_request | Ein Feld fehlt oder hat das falsche Format; message sagt welches |
| 401 | unauthorized | Kein Token oder ein widerrufenes bzw. abgelaufenes Token |
| 402 | insufficient_balance | Das Guthaben reicht für einen Kauf nicht aus |
| 403 | forbidden | Das Token hat nicht die benötigte Berechtigung für den Endpunkt |
| 404 | not_found | Die ID existiert in diesem Workspace nicht |
| 409 | conflict | Die Änderung würde eine Regel verletzen (ein doppelter Slug, das letzte Versandkonto einer Creatorin) |
| 429 | rate_limited | Zu viele Anfragen; warten Sie Retry-After Sekunden |
| 500 | server_error | Fehler auf unserer Seite; versuchen Sie es später mit demselben Idempotency-Key erneut |
message ist ein einfacher englischer Satz, den Sie einer Person zeigen können. Verzweigen Sie Ihren Code nach code, niemals nach message.
Rate Limits #
Jedes Token darf 600 Anfragen pro Minute senden. Jede Antwort enthält RateLimit-Limit, RateLimit-Remaining und RateLimit-Reset (Sekunden bis zum Zurücksetzen des Fensters). Über dem Limit antwortet die API mit 429 und einem Retry-After-Header. Das Senden einer Nachricht an einen Fan unterliegt auch den eigenen Limits von Telegram: siehe die Pool-Regeln.
Ein kleiner Helfer, der bei 429 und 5xx wartet und es erneut versucht:
async function lanachat(method, path, body) {
const key = crypto.randomUUID(); // one key per action: a retry never does the work twice
for (let attempt = 0; attempt < 5; attempt++) {
const res = await fetch('https://api.lanachat.ai/v1' + path, {
method,
headers: {
Authorization: `Bearer ${process.env.LANACHAT_TOKEN}`,
'Content-Type': 'application/json',
...(method === 'POST' ? { 'Idempotency-Key': key } : {}),
},
body: body ? JSON.stringify(body) : undefined,
});
if (res.status === 429 || res.status >= 500) {
const wait = Number(res.headers.get('Retry-After')) || 2 ** attempt;
await new Promise((r) => setTimeout(r, wait * 1000));
continue;
}
const data = await res.json();
if (!res.ok) throw Object.assign(new Error(data.error.message), { code: data.error.code, status: res.status });
return data;
}
throw new Error('LanaChat API: too many retries');
}
Verwenden Sie ihn überall: await lanachat('GET', '/creators'), await lanachat('POST', '/links', { … }).
Idempotenz #
Senden Sie bei jedem Idempotency-Key einen POST-Header (beliebiger eindeutiger String bis zu 255 Zeichen, eine UUID ist ideal). Wenn derselbe Schlüssel innerhalb von 24 Stunden erneut kommt, antwortet die API mit dem ersten Ergebnis, anstatt die Arbeit doppelt zu machen: Ein Netzwerkfehler sendet so nie eine Nachricht oder kauft ein Paket zweimal.
curl -X POST https://api.lanachat.ai/v1/billing/licences/buy \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: 4b7f2a8e-1c3d-4e5f-9a0b-6c7d8e9f0a1b" \
-H "Content-Type: application/json" \
-d '{"pack": 10, "qty": 1}'
Dasselbe Schlüssel mit anderem Body antwortet mit 409. In einer Shell erzeugt $(uuidgen) für jede neue Aktion einen frischen Schlüssel.
Webhooks #
Statt die API jede Minute abzufragen, lassen Sie LanaChat Sie anrufen. Ein Webhook sendet ein HTTPS-POST an Ihren Server, wenn ein Fan zum ersten Mal schreibt, kauft, eine Rückerstattung erfolgt, ein Medium bereit ist oder ein Konto die Verbindung verliert. Jede Zustellung ist signiert (HMAC-SHA256) und wird 24 Stunden lang wiederholt. Die Events, Payloads und die Signaturprüfung in Node und Python finden Sie in Webhooks.
MCP für KI-Assistenten #
MCP ist ein offener Standard, der einem KI-Assistenten erlaubt, Werkzeuge in einer App zu nutzen. Der MCP-Server von LanaChat ermöglicht Claude, Cursor oder jedem MCP-Client, Ihre Creatorinnen zu lesen, Skripte zu entwerfen, einen Brain-Entwurf zu bearbeiten und Ihre Verkäufe zu lesen, mit demselben Zugriffstoken und denselben Berechtigungen. In Claude Code verbindet ein Befehl ihn:
claude mcp add --transport http lanachat https://app.lanachat.ai/mcp \
--header "Authorization: Bearer $LANACHAT_TOKEN"
Die Konfiguration für jeden Assistenten und die Liste der Werkzeuge finden Sie in API & MCP.