Entwickler-Preview

Die LuNa API.

Bring LuNas Denken — und ihren Code-Stil — in deine eigenen Apps. Ein Endpoint, vorhersehbares JSON, klare Fehlercodes.

POST https://api.luna-chat.xyz/v1/chat
Alle Systeme laufen

Schnellstart

In drei Schritten zur ersten Antwort. LuNa spricht reines HTTP — jede Sprache funktioniert.

1
API-Key holen

Unten Zugang anfragen — du bekommst einen Key wie luna_sk_…

2
Nachricht senden

Sende deine Nachricht per POST an /v1/chat mit dem Key im Header.

3
Antwort lesen

LuNa antwortet als JSON — der Text steht in reply.

Beispiel-Anfrage

curl https://api.luna-chat.xyz/v1/chat \ -H "Authorization: Bearer $LUNA_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "luna-0.5", "message": "Hilf mir, das durchzudenken." }'

Authentifizierung

Jede Anfrage braucht ein Bearer-Token im Authorization-Header. Zwei Arten funktionieren: ein API-Key (luna_sk_…, für Plus & Pro) oder dein persönlicher Account-Token (gilt für jeden Plan, auch Free).

Authorization: Bearer luna_sk_xxxxxxxxxxxxxxxx # oder dein Account-Token: Authorization: Bearer <dein-account-token>

Bewahre deinen Key auf dem Server auf. Schick ihn nie im Client-Code mit — jeder könnte ihn lesen.

Chat-Endpoint

Sende eine einzelne Nachricht und erhalte LuNas Antwort. Der ganze Vertrag passt in eine Tabelle.

POST/v1/chat

Body-Parameter

Feld Typ Beschreibung
messagerequiredstringWas du LuNa sagen möchtest.
modelstringWelche LuNa verwendet wird. Standard: luna-0.5.
temperaturenumber0.0–2.0. Niedriger = fokussiert, höher = kreativ. Standard: modellabhängig. Werte außerhalb des Bereichs fallen auf den Standard zurück.
streambooleanTokens streamen, während sie entstehen. Standard false.

Antwort

Ein vorhersehbares JSON-Objekt. Der Text, den du willst, steht in reply.

{ "id": "msg_8f2a1c…", "model": "luna-0.5", "reply": "Klar — lass uns das zusammen durchdenken. Erzähl mir…", "usage": { "input_tokens": 12, "output_tokens": 96 } }

Streaming

Mit "stream": true liefert LuNa die Antwort als Server-Sent Events — Token für Token, sobald sie entstehen. Perfekt für ein Chat-Gefühl wie auf luna-chat.xyz.

// Antwort als Stream lesen — jedes Event ist ein Stück Text const res = await fetch("https://api.luna-chat.xyz/v1/chat", { method: "POST", headers: { "Authorization": `Bearer ${KEY}` }, body: JSON.stringify({ model: "luna-0.5", message: "Erklär mir Closures", stream: true }) }); const reader = res.body.getReader(); const dec = new TextDecoder(); while (true) { const { done, value } = await reader.read(); if (done) break; render(dec.decode(value)); // Text ankommen lassen, während LuNa denkt }

Konversationen

Für mehrstufige Gespräche schickst du statt message ein messages-Array — die ganze bisherige Unterhaltung, LuNa antwortet auf den letzten Eintrag.

{ "model": "luna-0.5", "messages": [ { "role": "user", "content": "Schreib mir eine debounce-Funktion." }, { "role": "assistant", "content": "Gern! Hier ist sie: …" }, { "role": "user", "content": "Jetzt mit TypeScript-Typen bitte." } ] }

Tipp: Schick nur die letzten ~10 Nachrichten mit — das spart Tokens und reicht LuNa fast immer als Gedächtnis.

Modelle

Dieselben Modelle wie im Chat — wähle eines über das model-Feld.

luna-0.5
LuNa 0.5 · Standard

Die fähigste LuNa — der empfohlene Standard für Chat, Texte und Reasoning im Alltag.

luna-0.4
LuNa 0.4 · Legacy

Von Grund auf selbst trainiert — eigene Architektur. Schwächer als 0.5, aber immer verfügbar.

luna-0.1
LuNa St

Coding-Assistent — Finetune von Qwen2.5-7B-Instruct. Nur auf GPU. Bei nahezu vollem Context-Window kann sie fehlerhaft werden — Chat kürzer halten oder neu starten.

Fehler & Limits

Fehler kommen als JSON mit klarem code — keine Rätselraten. Bei 429 und 503 sagt dir retry_after (Sekunden), wann du es wieder versuchen kannst.

{ "error": { "code": "rate_limited", "message": "Zu viele Anfragen — bitte kurz warten.", "retry_after": 12 } }

Fehlercodes

StatusCodeBedeutung
400bad_requestAnfrage fehlerhaft — z. B. unbekannte Modell-ID oder fehlendes message-Feld.
401invalid_tokenAPI-Key fehlt, ist abgelaufen oder ungültig.
403forbiddenAktion für deinen Plan nicht erlaubt — z. B. API-Keys erstellen mit Free (dafür brauchst du Plus oder Pro).
429rate_limitedRate-Limit deines Plans erreicht — warte retry_after Sekunden.
503unavailableLuNa-Server gerade nicht erreichbar — kurz warten und erneut versuchen.

Rate-Limits pro Plan

Das Limit gilt pro Account (über alle deine API-Keys und Account-Logins zusammen). Welcher Plan was bekommt, steht auf der Preise-Seite.

PlanAnfragen / MinuteHinweis
Free5 / MinuteZum Ausprobieren — per Account-Login (CLI), keine eigenen Keys.
Plus60 / MinuteEigene API-Keys, voller API-Zugang.
Pro120 / MinuteHöchstes Limit + Vorrang in der Queue.

Ob gerade alles läuft, siehst du live auf der Status-Seite — inkl. Verfügbarkeit pro Modell. Die Preise pro Modell stehen auf der Preise-Seite.

LuNa CLI

Lieber im Terminal? Die LuNa CLI spricht dieselbe API. Du meldest dich direkt im Browser an (für jeden Plan, auch Free) oder nutzt einen API-Key (Plus & Pro). Ein einzelnes statisches Binary — keine Abhängigkeiten.

→ Ausführliche CLI-Anleitung

Installation

Eine Zeile — lädt das luna-Binary und legt es in deinen PATH (Linux x86_64):

curl -fsSL https://luna-chat.xyz/cli/install | sh
luna herunterladen ein Binary · Linux x86_64 · ~2 MB

Oder manuell: herunterladen, ausführbar machen, in den PATH legen.

curl -fsSL https://luna-chat.xyz/cli/luna -o luna chmod +x luna mkdir -p ~/.local/bin mv luna ~/.local/bin/luna # muss im PATH liegen

Benutzung

# Login — öffnet den Browser (gilt für jeden Plan, auch Free) luna login # einmalige Frage luna chat "Erklär mir Closures in JavaScript" # anderes Modell + interaktiver Chat-REPL luna chat "Refactor das" --model luna-0.5 luna chat # Agent: Tools (Dateien, Suche, Bash) mit Erlaubnis-Abfrage luna # oder: luna agent luna code "Tests reparieren" # autonomer Mehrschritt-Lauf # oder mit API-Key (Plus & Pro), ohne Login LUNA_API_KEY=luna_sk_… luna chat "hi" # Account, Plan & Limit anzeigen luna whoami

luna login öffnet den Browser, um die CLI zu autorisieren — kein Token-Kopieren. Der Installer lädt nur das Binary nach ~/.local/bin und macht es ausführbar. Es respektiert das Rate-Limit deines Plans und zeigt bei 429/403 einen freundlichen Hinweis. Eigener Server? Mit --base-url. Mehr zum Agentenmodus in der CLI-Anleitung.

Zugang erhalten

Mit einem LuNa-Zugangs-Token kannst du die API sofort nutzen. Mit Free meldest du dich per CLI an (Account-Login). Für eigene API-Keys (luna_sk_…) brauchst du Plus oder Pro — aktuell kostenlos auf Anfrage. Melde dich an und öffne die Key-Verwaltung.

Zur Key-Verwaltung Anmelden

Noch keinen Token? LuNa ist im privaten Zugang — frag nach einem.