Zum Inhalt springen
Prototyp pruefen

API-Übersicht

Die Superheld API ermoeglicht die programmatische Integration von Bedrohungserkennung, Geraeteverwaltung und Alerting. Diese Seite beschreibt Endpunkte, Authentifizierung, Paginierung und Fehlerformate.

Die aktuelle Workspace-Runtime verwendet unversionierte Endpunkte unter:

https://api.superheld.app/
  • Transport: ausschließlich HTTPS. Unverschlüsselte Verbindungen werden abgelehnt.
  • Aktuelle Workspace-Server-Runtime: Default-Bind ist 127.0.0.1:8080; nicht-loopback Binds erwarten TLS-Zertifikat oder einen expliziten Plaintext-Override für kontrollierte Dev-/Proxy-Setups.
  • Versionierung: Die veröffentlichte Produkt-API-Versionierung befindet sich noch im Abgleich mit der Workspace-Implementierung. Die lokale Runtime nutzt derzeit kein /api/v1-Präfix.
  • Datenformat: JSON (Request und Response).
  • Kanonischer Vertrag: OpenAPI 3.1 Spezifikation (aktuell Draft, auf Workspace-Stand gezogen).

Alle Anfragen erfordern einen gültigen API-Schlüssel oder ein OAuth2-Token. Die aktuelle Workspace-Runtime akzeptiert API-Schlüssel per Authorization: Bearer ... oder X-API-Key:

Authorization: Bearer sh_live_abc123xyz456
X-API-Key: sh_live_abc123xyz456

Details zu API-Schlüsseln, OAuth2-Flows und Scopes: Authentifizierung und Autorisierung.

Die aktuelle Middleware arbeitet mit 120 Anfragen pro Minute. Bei Überschreitung antwortet die API mit 429 Too Many Requests. Relevante Response-Header:

HeaderBeschreibung
X-RateLimit-LimitMaximale Anfragen pro Zeitfenster
X-RateLimit-RemainingVerbleibende Anfragen im aktuellen Zeitfenster
X-RateLimit-ResetUnix-Timestamp, wann das Zeitfenster zurückgesetzt wird
Retry-AfterNur bei 429: Sekunden bis zum nächsten Versuch

Aktueller Workspace-Hinweis: Im Secure Mux wird Rate Limiting tenant-gebunden angewendet, sobald ein Token erfolgreich authentifiziert wurde. Außerhalb dieses Kontexts wird auf Credential-Fingerprint oder Remote-Adresse zurückgefallen.

Die API verwendet cursor-basierte Paginierung. Antworten mit mehreren Ergebnissen enthalten ein has_more-Feld und einen cursor-Wert für die nächste Seite:

Terminal-Fenster
GET /threats?cursor=abc123&limit=50

Standardwert: limit=20. Maximum: limit=100 (bzw. limit=500 für /events).

Die folgende Tabelle enthält alle dokumentierten Endpunkte. Endpunkte, die nur in einer einzigen Dokumentationsseite erwähnt werden, sind entsprechend markiert.

MethodePfadBeschreibungStatus
GET/devicesRegistrierte Geräte abrufenImplementiert
POST/devicesGerät registrierenImplementiert
GET/threatsErkannte Bedrohungen auflisten (abgeleitete Entitätssicht)Implementiert
GET/eventsKanonischer Event-Stream (append-only, primäre SIEM-Integration)Implementiert
POST/eventsSigniertes Device-Event einliefernImplementiert
GET/alertsAbgeleitete user-visible Alerts abrufenImplementiert
GET/incidentsTenant-gebundene Security-Incidents aus akzeptierten High-Severity-Alerting-Events oder High-Severity-Monitoring abrufenImplementiert (prototypisch/intern)
GET/incidents/{id}Einzelnen tenant-gebundenen Security-Incident abrufenImplementiert (prototypisch/intern)
PATCH/incidents/{id}Incident-Status entlang der aktuellen Lifecycle-Regeln weiterbewegenImplementiert (prototypisch/intern)
GET/jobsAsynchrone Job-Records auflistenImplementiert (prototypisch/intern)
POST/jobsAsynchronen Job-Record anlegenImplementiert (prototypisch/intern)
GET/jobs/{id}Einzelnen Job-Record abrufenImplementiert (prototypisch/intern)
POST/jobs/{id}/cancelQueued-, Running- oder Waiting-Review-Job abbrechenImplementiert (prototypisch/intern)
POST/jobs/{id}/reviewWaiting-Review-Job freigeben, anpassen, ablehnen oder abbrechenImplementiert (prototypisch/intern)
GET/jobs/auditTenant-scoped Review-Audit-Einträge über Jobs hinweg abrufenImplementiert (prototypisch/intern)
GET/jobs/{id}/auditReview-Audit-Einträge für einen Job abrufenImplementiert (prototypisch/intern)
GET/jobs/{id}/stepsAusführungsschritte eines Jobs abrufenImplementiert (prototypisch/intern)
GET/jobs/{id}/artifactsArtefakte eines Jobs abrufenImplementiert (prototypisch/intern)
GET/artifacts/{id}Einzelnes Artefakt abrufenImplementiert (prototypisch/intern)
GET/traces/{id}Einzelnen Ausführungs-Trace abrufenImplementiert (prototypisch/intern)
GET/traces/{id}/stepsAusführungsschritte eines Traces abrufenImplementiert (prototypisch/intern)
GET/tokensTenant-gebundene Secure-Mux-Token-Metadaten auflistenImplementiert (prototypisch/intern)
POST/tokensTenant-gebundenes Secure-Mux-Token erzeugenImplementiert (prototypisch/intern)
GET/tokens/auditTenant-gebundene Token-Audit-Einträge über alle sichtbaren Token hinweg abrufenImplementiert (prototypisch/intern)
GET/tokens/{id}Einzelnes tenant-gebundenes Secure-Mux-Token-Metadatum abrufenImplementiert (prototypisch/intern)
GET/tokens/{id}/auditAudit-Einträge für ein tenant-gebundenes Secure-Mux-Token abrufenImplementiert (prototypisch/intern)
DELETE/tokens/{id}Einzelnes tenant-gebundenes Secure-Mux-Token widerrufenImplementiert (prototypisch/intern)
POST/scanInhalt zur Analyse übergebenImplementiert
GET/statusSchutzstatus abrufenImplementiert
GET/webhooksRegistrierte Webhooks abrufenImplementiert
POST/webhooksWebhook registrierenImplementiert
GET/webhooks/dlqFehlgeschlagene Webhook-Zustellungen abrufenImplementiert
POST/webhooks/dlqKonkreten DLQ-Eintrag oder den neuesten Eintrag eines Webhooks erneut zustellenImplementiert
DELETE/webhooks/dlqKonkreten DLQ-Eintrag quittieren bzw. löschenImplementiert
GET/guidanceGuidance Cards abrufenImplementiert (intern/prototypisch)
{
"data": [
{
"threat_id": "thr_8f3a2b",
"threat_category": "phishing",
"confidence": 0.92,
"severity": "high",
"device_id": "dev_3c8a1f",
"detected_at": "2026-03-14T09:22:17Z",
"description": "Gefälschte Login-Seite erkannt",
"status": "active"
}
],
"has_more": true,
"total_count": 42
}
{
"scan_id": "scn_4e7d1c",
"status": "completed",
"threat_detected": true,
"threat_type": "phishing",
"confidence": 0.97,
"details": "Domain imitiert bekannten Finanzdienstleister. SSL-Zertifikat seit 2 Tagen aktiv."
}

Die API liefert Fehler in folgendem Format:

{
"error": {
"code": "error_code",
"message": "Beschreibung des Fehlers.",
"status": 400
}
}

Relevante HTTP-Statuscodes:

CodeBedeutung
400Ungültige Anfrage (fehlende oder fehlerhafte Parameter)
413Request-Body überschreitet das aktuelle Größenlimit
401Authentifizierung fehlgeschlagen
403Fehlender Scope oder unzureichende Berechtigung
404Ressource nicht gefunden
429Rate Limit überschritten
500Interner Serverfehler

Die aktuelle Workspace-Implementierung trägt tenant_id in Geräte- und Event-Payloads. Bei POST /events wird tenant_id gegen die registrierte Device-Zuordnung geprüft; sichere Scope-Prüfung erfolgt im Secure Mux.

Current workspace note: Der erste Job-Pfad ist jetzt intern nutzbar, aber bewusst begrenzt. Die Runtime unterstützt aktuell incident_triage_v1 als deterministischen Workflow mit GET /jobs, POST /jobs, GET /jobs/{id}, POST /jobs/{id}/cancel, POST /jobs/{id}/review, GET /jobs/audit, GET /jobs/{id}/audit, GET /jobs/{id}/steps, GET /jobs/{id}/artifacts, GET /artifacts/{id}, GET /traces/{id} und GET /traces/{id}/steps. POST /jobs/{id}/review akzeptiert aktuell approve, amend, reject und cancel; amend wirkt derzeit nur auf input_refs und max_runs, ungültige Review-Zustände liefern 422. Im Secure Mux akzeptiert der Review-Pfad jetzt dediziert jobs:review; jobs:write bleibt dafür als Legacy-Fallback akzeptiert. Reviewed jobs return reviewed_by when the path runs behind the secure mux, derived from the bound API token identity. Job-Review-Audits sind zusätzlich tenant-scoped über GET /jobs/audit und pro Job über GET /jobs/{id}/audit abrufbar, folgen wie die übrigen Listen dem Cursor-/Limit-Schema, unterstützen auf /jobs/audit derzeit die Filter action und reviewed_by und liefern zusätzlich strukturierte fields neben dem rohen detail. Review-Entscheidungen erscheinen zusätzlich als review_decision-Step im bestehenden Job-/Trace-Step-Pfad.

Current workspace note: Der Secure Mux enthält außerdem einen internen Token-Lifecycle-Prototyp. POST /tokens gibt den rohen Tokenwert genau einmal zurück, während GET /tokens, GET /tokens/audit, GET /tokens/{id} und GET /tokens/{id}/audit nur Metadaten bzw. Audit-Einträge liefern. Neue Tokens bleiben tenant-gebunden und dürfen nur Scopes anfordern, die der aufrufende Token bereits besitzt. In cmd/server werden nur SHA-256(token) und Metadaten im gewählten Runtime-Backend persistiert; Token-Audit-Einträge folgen demselben Runtime-Backend, nutzen Cursor-/Limit-Paginierung, unterstützen auf /tokens/audit derzeit die Filter action und token_id und liefern zusätzlich strukturierte fields neben dem rohen detail.

Bei der Pull-Integration fragt Ihr System die API regelmäßig nach neuen Daten ab. Beachten Sie das Rate Limit. Current workspace note: Hinter Reverse Proxies bleiben X-Forwarded-For und X-Real-IP standardmäßig unberücksichtigt. Proxy-Adressen werden erst dann als Client-Identität ausgewertet, wenn SUPERHELD_RATE_LIMIT_TRUST_PROXY=true explizit gesetzt ist.

Terminal-Fenster
curl -X GET "https://api.superheld.app/threats?since=2026-03-14T09:00:00Z&severity=high" \
-H "Authorization: Bearer sh_live_abc123xyz456"

Bei der Push-Integration sendet Superheld Ereignisse an Ihren HTTPS-Endpunkt. Die aktuelle Workspace-Runtime konfiguriert Webhooks direkt über /webhooks:

Terminal-Fenster
curl -X POST https://api.superheld.app/webhooks \
-H "Authorization: Bearer sh_live_abc123xyz456" \
-H "Content-Type: application/json" \
-d '{
"tenant_id": "tenant-acme",
"url": "https://mein-server.de/hooks/superheld",
"secret": "superheld-shared-secret"
}'

Die aktuelle Workspace-Runtime speichert das Secret serverseitig, gibt es aber in Create-/List-Responses nicht zurueck. List-Responses enthalten stattdessen zuletzt bekannte Delivery-Metadaten wie last_delivery_status, last_delivery_error, last_delivery_at und last_delivery_attempts.

Zusätzlicher Workspace-Hinweis: Webhook-Ziele muessen https:// verwenden. Loopback-, Link-Local- und private Zieladressen werden von der Runtime abgelehnt; Redirects auf solche Ziele ebenfalls.

Webhooks eignen sich für zeitkritische Sicherheitsereignisse. Polling eignet sich für regelmäßige Bestandsabgleiche. Beide Muster lassen sich kombinieren: Webhooks als primäre Quelle, Polling als Fallback.