HydraHive API-Referenz

Basis-URL: https://<server>/api — Alle Endpoints außer /health, /setup/*, /auth/* und /hooks/* erfordern einen JWT-Bearer-Token.

Authorization: Bearer <token>

Token wird via POST /auth/login erhalten.

Auth

POST/auth/login

Authentifizierung mit Benutzername und Passwort. Gibt einen JWT-Token zurück.

FeldTypBeschreibung
usernamestringBenutzername
passwordstringPasswort

Request Body:

{ "username": "admin", "password": "geheim" }

Response 200:

{ "access_token": "eyJ...", "token_type": "bearer" }
Rate-Limit: 10 Versuche pro Minute. Bei Überschreitung: 429 Too Many Requests.

GET/auth/me

Gibt Informationen über den aktuell eingeloggten Benutzer zurück.

Response 200:

{ "username": "admin" }

Setup

GET/setup/status

Prüft ob der Setup-Wizard noch benötigt wird (kein Benutzer angelegt).

Response 200:

{ "needs_setup": true }

POST/setup

Legt den ersten Admin-Account an. Nur verfügbar solange noch kein Benutzer existiert.

FeldTypBeschreibung
usernamestringBenutzername des ersten Admins
passwordstringPasswort (min. 8 Zeichen)

Response 201:

{ "created": true, "username": "admin", "role": "admin" }

System

GET/health

Health-Check ohne Authentifizierung. Für Monitoring und Load-Balancer geeignet.

Response 200:

{ "status": "ok" }

GET/status

Detaillierter Systemstatus mit Discovery-, Projekt-, Session- und Laufzeit-Informationen.

Response 200:

{
  "discovery": { ... },
  "projects": { ... },
  "sessions": { ... },
  "runtime": { ... }
}

GET/admin/runtime/status

Runtime-Fingerprint für Audits und Support mit Deploy-Metadaten, Laufzeitstatus und verdichteter Core-Log-Zusammenfassung.

Response 200:

{
  "service": { "name": "hydrahive-core", "version": "0.1.0" },
  "deployment": { ... },
  "runtime": { ... },
  "audit": {
    "core_journal": {
      "available": true,
      "count": 200,
      "error_count": 2,
      "warn_count": 4,
      "first_timestamp": "2026-03-20 10:00:01",
      "last_timestamp": "2026-03-20 11:01:30",
      "top_signatures": [
        { "signature": "restart loop detected", "count": 3 }
      ]
    }
  }
}

Agenten

GET/agents

Gibt eine Liste aller registrierten Agenten zurück.

GET/agents/{id}

Gibt Details zu einem einzelnen Agenten zurück.

POST/agents

Erstellt einen neuen Agenten.

FeldTypBeschreibung
idstringEindeutige Agent-ID
typestringboss / specialist / worker
identitystringAnzeigename des Agenten
modelstringLLM-Modell (z.B. llama3.1:8b)
temperaturefloatTemperatur (0.0–1.0)
max_tokensintMaximale Token-Anzahl
toolsarrayListe aktivierter Tool-IDs
soulstringPersönlichkeitsbeschreibung (Markdown)
heartbeatobjectHeartbeat-Konfiguration (interval, timeout, on_failure)

PUT/agents/{id}

Aktualisiert einen bestehenden Agenten. Body-Felder wie bei POST.

DELETE/agents/{id}

Löscht einen Agenten. Response 204 No Content.

GET/agents/{id}/soul

Gibt den Soul-Text (Persönlichkeitsbeschreibung) des Agenten als Plaintext zurück.

GET/agents/{id}/logs

Gibt die letzten Log-Einträge des Agenten zurück.

Query-ParameterTypBeschreibung
linesintAnzahl zurückgegebener Log-Zeilen (optional)

Agent Skills

GET/agents/{id}/skills

Gibt alle Skills eines Agenten zurück.

POST/agents/{id}/skills

Erstellt einen neuen Skill für den Agenten.

FeldTypBeschreibung
filenamestringDateiname (z.B. steuerrecht.md)
skillstringAnzeigename des Skills
versionstringVersionsnummer (z.B. "1.0")
scopestringalways oder on-demand
triggersarrayTrigger-Keywords (für on-demand)
priorityintPriorität (niedrigere Zahl = höhere Priorität)
contentstringSkill-Inhalt (Markdown)

PUT/agents/{id}/skills/{filename}

Aktualisiert einen bestehenden Skill. Body-Felder wie bei POST.

DELETE/agents/{id}/skills/{filename}

Löscht einen Skill. Response 204 No Content.

Projekte

GET/projects

Gibt eine Liste aller Projekte zurück.

GET/projects/{id}

Gibt Details zu einem einzelnen Projekt zurück.

POST/projects

Erstellt ein neues Projekt.

FeldTypBeschreibung
idstringEindeutige Projekt-ID
namestringAnzeigename des Projekts
descriptionstringProjektbeschreibung (optional)
bossstringAgent-ID des Boss-Agenten
workersarrayListe der Worker-Agent-IDs
sambaboolSamba-Freigabe aktivieren

POST/projects/{id}/provision

Provisioniert ein Projekt: legt Linux-User, Verzeichnis, Matrix-Room und optionale Samba-Freigabe an.

DELETE/projects/{id}/provision

Entfernt die Provisionierung eines Projekts (Linux-User, Freigaben). Das Projekt selbst bleibt bestehen.

DELETE/projects/{id}

Löscht ein Projekt vollständig. Response 204 No Content.

Chat

POST/projects/{id}/message

Sendet eine Nachricht an den Boss-Agenten eines Projekts. Wartet auf die vollständige Antwort.

Request Body:

{ "content": "Erstelle einen Bericht über Q1." }

Response 200:

{
  "response": "Hier ist der Q1-Bericht...",
  "workers": ["steuer-agent", "buchhalter"],
  "session_id": "sess_abc123"
}

POST/projects/{id}/message/stream

Sendet eine Nachricht und empfängt die Antwort als Server-Sent Events (SSE). Jedes Event enthält einen JSON-Payload.

data: {"text": "Hier "}
data: {"text": "ist "}
data: {"text": "der Bericht..."}
data: {"done": true}

# Bei Fehler:
data: {"error": "LLM nicht erreichbar"}

GET/projects/{id}/session/history

Gibt die Chat-History der aktuellen Session zurück.

Query-ParameterTypBeschreibung
limitintMaximale Anzahl zurückgegebener Nachrichten (optional)

Integrationen

GET/me/platforms

Einheitlichen Status der persönlichen Plattform-Integrationen abrufen.

{
  "username": "till",
  "platforms": [
    {
      "platform": "matrix",
      "label": "Matrix",
      "supported": true,
      "configured": true,
      "connected": true,
      "details": { "matrix_id": "@till:matrix.local" }
    },
    {
      "platform": "discord",
      "label": "Discord",
      "supported": true,
      "configured": true,
      "connected": true,
      "details": { "guild_id": "123", "channel_ids": ["111", "222"] }
    },
    {
      "platform": "telegram",
      "label": "Telegram",
      "supported": false,
      "configured": false,
      "connected": false,
      "details": { "status": "planned" }
    }
  ]
}

Webhooks

GET/projects/{id}/webhooks

Gibt alle konfigurierten Webhooks eines Projekts zurück.

POST/projects/{id}/webhooks

Erstellt einen neuen ausgehenden Webhook für ein Projekt.

FeldTypBeschreibung
namestringName des Webhooks
urlstringZiel-URL für den Webhook
secretstringHMAC-Secret für Signierung (optional)
eventsarrayEvents die den Webhook auslösen

Verfügbare Events: message, agent_error, provision, agent_start, agent_stop

DELETE/projects/{id}/webhooks/{webhook_id}

Löscht einen Webhook. Response 204 No Content.

POST/projects/{id}/webhooks/test

Sendet einen Test-Request an alle konfigurierten Webhooks des Projekts.

POST/hooks/{id}/wake

Kein Auth erforderlich. Externer Trigger-Endpoint für eingehende Webhooks. Startet den Boss-Agenten des Projekts asynchron.

Request Body:

{ "message": "Neuer Git-Push auf main — bitte Code-Review starten" }

Response 202:

{ "accepted": true, "project_id": "mein-projekt" }
Kein Auth: Dieser Endpoint ist bewusst öffentlich zugänglich. Er kann ohne Token aufgerufen werden — z.B. von GitHub Actions oder Gitea Webhooks.

Benutzer

GET/users

Gibt eine Liste aller Benutzer zurück.

POST/users

Erstellt einen neuen Benutzer.

FeldTypBeschreibung
usernamestringBenutzername
passwordstringPasswort (min. 8 Zeichen)

DELETE/users/{username}

Löscht einen Benutzer. Der eigene Account kann nicht gelöscht werden. Response 204 No Content.

PUT/users/{username}/password

Ändert das Passwort eines Benutzers.

{ "password": "neues-passwort" }

Audit-Log

GET/audit/logs

Gibt Audit-Log-Einträge zurück, optional gefiltert.

Query-ParameterTypBeschreibung
limitintMaximale Anzahl Einträge
userstringFiltern nach Benutzer
actionstringFiltern nach Aktion
projectstringFiltern nach Projekt-ID

Response 200:

{
  "logs": [
    {
      "id": "log_abc",
      "timestamp": "2026-03-20T14:32:00Z",
      "user": "admin",
      "action": "user.login",
      "target": "admin",
      "project_id": null,
      "ip": "192.168.1.1",
      "details": {}
    }
  ],
  "count": 1
}

Bekannte Aktionen:

LLM-Konfiguration

GET/llm/config

Gibt die aktuelle LLM-Konfiguration zurück (alle Anbieter).

PUT/llm/config/claude_max

Setzt den Claude Max OAuth-Token.

{ "token": "sk-ant-oat01-..." }

PUT/llm/config/{provider}

Konfiguriert einen beliebigen LLM-Anbieter (z.B. openai, ollama).

GET/llm/claude_token_status

Gibt den Status des aktuellen Claude-Tokens zurück.

Response 200:

{
  "exists": true,
  "remaining_days": 12,
  "expires_approx": "2026-04-01",
  "status": "ok"
}
StatusBedeutung
okToken gültig, mehr als 7 Tage verbleibend
warningToken läuft in weniger als 7 Tagen ab
criticalToken läuft in weniger als 2 Tagen ab
expiredToken abgelaufen

GET/llm/ollama/models

Gibt eine Liste der lokal verfügbaren Ollama-Modelle zurück.

POST/llm/ollama/pull

Lädt ein Ollama-Modell herunter.

{ "model": "llama3.1:8b" }

Tools

GET/tools

Gibt eine Liste aller registrierten Tools mit ID, Beschreibung und Parameter-Schema zurück.

System-Logs

GET/logs/core

Gibt die letzten Zeilen der Core-Logs zurück.

Query-ParameterTypBeschreibung
linesintAnzahl Zeilen (Standard: 200, Maximum: 1000)

GET/logs/core/summary

Gibt eine verdichtete Core-Journal-Zusammenfassung mit ERROR/WARN-Zählung und Signaturen zurück.

Query-ParameterTypBeschreibung
linesintAnzahl analysierter Zeilen (Standard: 200, Maximum: 1000)