Portal API

Self-Service-API für die Verwaltung von Keys, Providern und Einstellungen.

Nur Managed Service

Portal-Endpunkte sind nur im Managed/Cloud-Modus verfuegbar. Fuer Self-Hosted-Standalone-Deployments konfigurieren Sie Einstellungen ueber Umgebungsvariablen.

Authentifizierung

Portal-Endpunkte erfordern ein gueltiges JWT-Access-Token. Erhalten Sie Tokens ueber den Login-Flow und fuegen Sie das Access-Token im Authorization-Header für alle Portal-Anfragen ein.

Basispfad: /portal

POST /auth/login

Authentifizierung mit E-Mail und Passwort. Gibt ein Access-Token (15 Minuten Gueltigkeit) und ein Refresh-Token (7 Tage Gueltigkeit) zurueck.

# Anmeldung mit E-Mail und Passwort
curl -X POST https://api.noirdoc.de/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "benutzer@example.com",
    "password": "ihr-passwort"
  }'

Antwort:

{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "refresh_token": "dGhpcyBpcyBhIHJlZnJl..."
}

POST /auth/refresh

Tauschen Sie ein gueltiges Refresh-Token gegen ein neues Access-Token, wenn das aktuelle abgelaufen ist.

# Access-Token erneuern
curl -X POST https://api.noirdoc.de/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{
    "refresh_token": "dGhpcyBpcyBhIHJlZnJl..."
  }'

Antwort:

{
  "access_token": "eyJhbGciOiJIUzI1NiIs..."
}

POST /auth/logout

Invalidiert das aktuelle Refresh-Token. Das Access-Token bleibt gueltig, bis es natuerlich ablaeuft.

# Abmeldung und Token-Invalidierung
curl -X POST https://api.noirdoc.de/auth/logout \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Access-Token verwenden

Fuegen Sie das Access-Token im Authorization-Header für alle nachfolgenden Portal-Anfragen ein:

Authorization: Bearer <access_token>

API-Keys

GET /portal/keys

Listet alle Proxy-API-Keys für den aktuellen Tenant auf.

# Alle API-Keys auflisten
curl https://api.noirdoc.de/portal/keys \
  -H "Authorization: Bearer <access_token>"

Antwort:

[
  {
    "id": "key_abc123",
    "label": "produktion",
    "prefix": "px-a1b2",
    "created_at": "2025-09-15T10:30:00Z",
    "is_active": true
  },
  {
    "id": "key_def456",
    "label": "staging",
    "prefix": "px-c3d4",
    "created_at": "2025-10-01T08:00:00Z",
    "is_active": true
  }
]

POST /portal/keys

Erstellt einen neuen Proxy-API-Key. Der vollstaendige Key-Wert wird nur einmal in der Antwort zurueckgegeben — speichern Sie ihn sicher ab.

# Neuen API-Key erstellen
curl -X POST https://api.noirdoc.de/portal/keys \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"label": "neuer-service-key"}'

Request Body:

FeldTypErforderlichBeschreibung
labelstringJaEin lesbares Label für den Key

Antwort:

{
  "id": "key_ghi789",
  "label": "neuer-service-key",
  "key": "px-vollstaendiger-key-wert-nur-einmal-sichtbar",
  "created_at": "2025-11-20T14:00:00Z"
}

PATCH /portal/keys/{id}

Aktualisiert die Eigenschaften eines Keys, z.B. sein Label.

# Key-Label aktualisieren
curl -X PATCH https://api.noirdoc.de/portal/keys/key_abc123 \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"label": "umbenannter-key"}'

DELETE /portal/keys/{id}

Soft-Delete eines Keys. Der Key wird deaktiviert und kann nicht mehr für Proxy-Anfragen verwendet werden. Er kann spaeter reaktiviert werden.

# API-Key deaktivieren
curl -X DELETE https://api.noirdoc.de/portal/keys/key_abc123 \
  -H "Authorization: Bearer <access_token>"

POST /portal/keys/{id}/reactivate

Reaktiviert einen zuvor geloeschten Key.

# Deaktivierten Key reaktivieren
curl -X POST https://api.noirdoc.de/portal/keys/key_abc123/reactivate \
  -H "Authorization: Bearer <access_token>"

Provider

GET /portal/providers

Listet alle konfigurierten LLM-Provider für den aktuellen Tenant auf.

# Alle Provider auflisten
curl https://api.noirdoc.de/portal/providers \
  -H "Authorization: Bearer <access_token>"

Antwort:

[
  {
    "provider": "openai",
    "provider_type": "openai",
    "base_url": "https://api.openai.com/v1",
    "has_api_key": true
  }
]

PUT /portal/providers/{provider}

Konfiguriert oder aktualisiert einen Provider. Setzt den API-Key und die Verbindungsdetails, die Noirdoc bei der Weiterleitung von Anfragen an diesen Provider verwendet.

# OpenAI-Provider konfigurieren
curl -X PUT https://api.noirdoc.de/portal/providers/openai \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "sk-ihr-openai-key",
    "provider_type": "openai"
  }'

Request Body:

FeldTypErforderlichBeschreibung
api_keystringJaDer API-Key des Providers
base_urlstringNeinBenutzerdefinierte Base-URL (für Azure oder selbst gehostete Modelle)
api_versionstringNeinAPI-Version (für Azure OpenAI)
provider_typestringJaProvider-Typ: openai, anthropic, azure, openrouter

DELETE /portal/providers/{provider}

Entfernt eine Provider-Konfiguration. Proxy-Anfragen, die diesen Provider benoetigen, schlagen fehl, bis er neu konfiguriert wird.

# Provider-Konfiguration entfernen
curl -X DELETE https://api.noirdoc.de/portal/providers/openai \
  -H "Authorization: Bearer <access_token>"

Einstellungen

GET /portal/settings

Ruft die aktuellen Tenant-Einstellungen ab, einschliesslich Pseudonymisierungsverhalten, Mapping-TTL, Dateiverarbeitungsmodus und mehr.

# Aktuelle Einstellungen abrufen
curl https://api.noirdoc.de/portal/settings \
  -H "Authorization: Bearer <access_token>"

PATCH /portal/settings

Aktualisiert eine oder mehrere Einstellungen. Senden Sie nur die Felder, die Sie aendern moechten.

# Einstellungen aktualisieren
curl -X PATCH https://api.noirdoc.de/portal/settings \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "mapping_ttl_days": 14,
    "file_handling": "block"
  }'

Nutzung und Audit-Logs

GET /portal/usage

Ruft Nutzungsstatistiken für den aktuellen Tenant ab, einschliesslich Anfragezahlen und Token-Nutzung.

# Nutzungsstatistiken abrufen
curl https://api.noirdoc.de/portal/usage \
  -H "Authorization: Bearer <access_token>"

GET /portal/audit-logs

Ruft Audit-Logs für den aktuellen Tenant ab. Unterstützt Filterung nach Zeitraum und Eventtyp ueber Query-Parameter.

# Audit-Logs für einen Zeitraum abrufen
curl "https://api.noirdoc.de/portal/audit-logs?from=2025-11-01&to=2025-11-30" \
  -H "Authorization: Bearer <access_token>"

Fehlerantworten

Portal-Endpunkte geben Standard-HTTP-Fehlercodes zurueck:

StatusBedeutung
401Fehlendes oder ungueltiges JWT-Token
403Unzureichende Berechtigungen
404Ressource nicht gefunden
422Validierungsfehler — pruefen Sie den Request Body