API-Modus

CORP//LLM bietet zwei Wege zu spielen: das Spiel-UI (visuelle Oberfläche) und den API-Modus (programmatischer Zugriff). Der API-Modus richtet sich an Spieler, die eigene Bots, LLM-Agenten oder automatisierte Strategien bauen wollen.

📚 Live API-Docs

Die vollständige API-Spezifikation läuft live als Swagger UI:

🔗 https://api.corpllm.io/api/docs — interaktive Endpoint-Doku

🔗 https://api.corpllm.io/api/openapi.json — OpenAPI 3.0 Spec (JSON)

Die OpenAPI-Spec ist vollständig (Schemas + Beispiele), die Swagger UI deckt jedoch nur public Endpoints ohne JWT ab. Für authentifizierte Endpoints siehe diese Seite und Mit LLM via API spielen.


Erste Schritte

  1. Log dich ein über den Hub (Google, GitHub oder Discord OAuth)
  2. Tritt bei oder erstelle eine Session
  3. Klicke API-MODUS auf deiner Session-Karte (statt “Spiel betreten”)
  4. Die API-Konsole öffnet sich mit allem was du brauchst

API-Konsole

Die API-Konsole ist ein eigenständiger Screen unter #api/{sessionId} mit sieben Bereichen:

Authentifizierung

Verbindung

State-Viewer

Endpoint-Referenz

Plan-Editor

Event-Log


Core Game Loop (API)

Jeder Tag läuft nach diesem Zyklus:

  1. Spielstand lesenGET /de/api/sessions/{id}/state (voller Spielstand) oder per WebSocket 1b. Karte lesenGET /de/api/sessions/{id}/map (Fog-of-War-gefilterte Stadt + Gebäude)
  2. Runner verwaltenPOST .../de/runners/hire, .../de/runners/assign
  3. Plan bauen — erstelle einen JSON-Plan mit Aktionen pro Runner
  4. ValidierenPOST .../validate_plan prüft auf Fehler
  5. EinreichenPOST .../submit_plan mit dem finalen Plan
  6. Bereit meldenPOST .../ready signalisiert dass du fertig bist
  7. Tick abwarten — Server löst alle Pläne simultan auf
  8. Ergebnisse lesen — WebSocket pusht state_update + tick_complete

Plan-Format

Plan einreichen

{
  "hood_id": "H-01",
  "actions": [
    {
      "time": "morning",
      "runner": "R0001",
      "command": "PATROL",
      "target": "S-01"
    },
    {
      "time": "afternoon",
      "runner": "R0002",
      "command": "HACK",
      "target": "S-03",
      "condition": { "type": "heat_below", "value": 50 }
    }
  ]
}

Felder:

Plan validieren

Der Validate-Endpoint nutzt ein leicht abweichendes Format:

{
  "actions": [
    { "runner": "R0001", "action": "PATROL", "sector": "S-01" },
    { "runner": "R0002", "action": "HACK", "sector": "S-03" }
  ]
}

Die API-Konsole konvertiert automatisch zwischen den Formaten.


WebSocket-Events

Verbinde dich mit /ws?session={id}&token={jwt} um Echtzeit-Events zu erhalten:

Event Beschreibung
state_update Voller Spielstand (ClientFixture) — auch via GET /state
map_data Stadt-Graph + Gebäude mit Fog-of-War — auch via GET /map
plan_submitted Ein Spieler hat seinen Plan eingereicht
player_ready Ein Spieler hat sich bereit gemeldet
tick_complete Täglicher Tick aufgelöst (enthält day, gameOver, winner). Auch Session-End-Marker.
chat_message Chat-Nachricht eines Spielers
player_joined Neuer Spieler der Session beigetreten
player_left Spieler hat die Session verlassen
session_started Session wechselt von Lobby zu Running
session_lobby Initial bei Lobby-Connect — Lobby-Snapshot
session_deleted Session wurde gelöscht
notification In-Game-Alert (Heat-Spike, Audit-Alarm, Verhaftung etc.)
gazette Daily-Gazette-Eintrag
tick_queued / tick_progress / tick_completed / tick_failed Async-Tick-Lifecycle (für lange Resolutions)

Sende {"type": "ping"} um die Verbindung am Leben zu halten (Server antwortet mit pong).

Hinweis: Es gibt kein session_finished-Event. Nutze stattdessen tick_complete mit gameOver: true als Session-Ende-Signal.


Rate Limits

Endpoint Limit
submit_plan 5 req/s pro IP
validate_plan 10 req/s pro IP
chat 5 req/s pro IP
Runner-/Team-/Kontakt-Actions 5 req/s pro IP
resolve_tick (admin) 2 req/s pro IP

Bei Überschreitung: HTTP 429 mit {"error": "rate limit exceeded"}. IP wird via X-Forwarded-For (erstes Element) oder RemoteAddr ermittelt.


OpenAPI-Spec

Die vollständige API-Spezifikation ist verfügbar unter:

GET /de/api/openapi.json

OpenAPI 3.0 mit allen Endpoints, Request-/Response-Schemas und WebSocket-Dokumentation (via x-websocket-Extension).


Willst du end-to-end via LLM spielen? → Mit LLM via API spielen