
# Support-Artefakt hochladen

`POST /v1/support-artifacts` · Berechtigung `support-artifacts:write`

Hängt eine HAR-Datei oder ein Protokoll an ein Support-Ticket an. Artefakte werden nur von der Support-Seite im Dashboard hochgeladen; API-Schlüssel und Maschinenclients erhalten `403 insufficient_permissions`. Das Dashboard entfernt Geheimnisse vor dem Upload in Ihrem Browser, und der Server prüft das Artefakt erneut: `Cookie`-, `Set-Cookie`-, `Authorization`- und `DPoP`-Header, OAuth-, OIDC- und SAML-Token-Felder, `__Host-`-Cookies, JWTs und mit KeenAuth beginnende Geheimnisse werden durch `[redacted]` ersetzt. Ein im Artefakt gefundener Verwaltungs-API-Schlüssel (`idp_sk_`, `idp_rk_`) wird sofort widerrufen; schlägt der Widerruf fehl, wird nichts gespeichert und der Upload gibt `503` zurück. Nur der bereinigte Inhalt wird gespeichert, mit dem Datenschlüssel der Umgebung verschlüsselt und nach 30 Tagen gelöscht. Die Antwort enthält niemals den Inhalt oder die entfernten Werte.

## Anfrage

| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| `ticket_ref` | query | ja | Referenz des Support-Tickets: 1-64 Zeichen, Buchstaben, Ziffern und `_ . : -`, beginnend mit einem Buchstaben oder einer Ziffer. |
| `kind` | query | ja | `har` (ein HAR-1.2-JSON-Dokument) oder `log` (Klartext). |
| `Content-Type` | header | ja | `application/octet-stream`. |
| `Content-Encoding` | header | nein | `gzip`, um ein komprimiertes Artefakt zu senden. |
| `Idempotency-Key` | header | nein | Optional. 16-64 Zeichen `[A-Za-z0-9_-]`; die Wiederholung desselben Schlüssels mit demselben Body liefert dasselbe Artefakt. |

Der Body ist das Artefakt selbst: höchstens 50 MB unkomprimiert. Der Anfrage-Body auf der Leitung ist auf 11 MiB begrenzt, daher größere Artefakte mit gzip komprimieren. Ein Ticket enthält höchstens 10 Artefakte.

## Antwort

`201 Created` mit dem gespeicherten Artefakt. `findings` zählt die entfernten Werte nach Art; `revocations_triggered` ist die Anzahl der widerrufenen Anmeldeinformationen, die im Artefakt vorkamen.

```json
{
  "id": "sart_01j9xk3m7q8r2s4t6v8w0y2z4a",
  "ticket_ref": "SUP-48213",
  "kind": "har",
  "size_bytes": 482113,
  "sha256": "9f2b5c7d1e3a4f60718293a4b5c6d7e8f90123456789abcdef0123456789abcd",
  "findings": {"authorization": 2, "cookie": 5, "host_cookie": 3, "oauth_param": 1},
  "revocations_triggered": 0,
  "created_at": "2026-11-10T09:30:00.123456Z",
  "expires_at": "2026-12-10T09:30:00.123456Z"
}
```

## Fehler

| HTTP | Code | Wann |
|---|---|---|
| 400 | `malformed_request` | Der Body konnte nicht gelesen werden, der gzip-Stream ist ungültig oder `Idempotency-Key` ist fehlerhaft. |
| 401 | `unauthenticated` | Die Anmeldeinformation fehlt, ist ungültig oder widerrufen. |
| 403 | `insufficient_permissions` | Die Anfrage wurde nicht aus dem Dashboard gestellt, oder die Dashboard-Rolle hat nicht `support-artifacts:write`. |
| 403 | `quota_exceeded` | Das Ticket hat bereits 10 Artefakte. |
| 413 | `payload_too_large` | Das Artefakt ist größer als 50 MB, oder der Anfrage-Body ist größer als 11 MiB. |
| 415 | `unsupported_media_type` | `Content-Type` ist nicht `application/octet-stream`, oder die Inhaltskodierung ist nicht `gzip`. |
| 422 | `validation_failed` | `ticket_ref` oder `kind` fehlt oder ist ungültig, der Body ist leer, oder ein `har`-Artefakt ist kein HAR-Dokument (`/body` `invalid_har`). |
| 422 | `idempotency_key_reuse` | Der `Idempotency-Key` wurde bereits mit einem anderen Body verwendet. |
| 429 | `rate_limited` | Es werden gerade zu viele Uploads verarbeitet oder das Ratenlimit wurde überschritten; nach Ablauf der `Retry-After`-Zeit erneut versuchen. |
| 503 | `service_unavailable` | Das Artefakt wurde nicht gespeichert (eine Anmeldeinformation konnte nicht widerrufen werden oder der Speicher ist nicht verfügbar); nach Ablauf der `Retry-After`-Zeit erneut versuchen. |

## Beispiel

Uploads sind eine Dashboard-Aktion. Die Anfrage, die das Dashboard sendet:

```http
POST /v1/support-artifacts?ticket_ref=SUP-48213&kind=har
Content-Type: application/octet-stream
Content-Encoding: gzip
Idempotency-Key: 2f1c9a7e-5b3d-4e8f-9a6c-1d2e3f4a5b6c

<gzip-komprimierte HAR-Datei>
```
