Die Sicherheitsprüfung
POST https://api.kennmarq.com/v1/check
Ab dem 2. Dezember 2026 verbietet die KI-Verordnung KI-Systeme, die sexuelle Bilder von Personen erstellen, die dem Anschein nach Kinder sind, oder von einer realen Person ohne deren Einwilligung (Art. 5 Abs. 1 Buchst. ba und bb). Die Sicherheitsprüfung prüft ein Bild auf beides und blockiert es, merkt es zur Prüfung vor oder lässt es zu. Sie ist ein Risikosignal mit veröffentlichten Fehlerraten, keine Garantie: Sie entscheiden, und Sie bleiben verantwortlich.
Anfrage
Ein Schlüssel mit der Berechtigung check und multipart/form-data mit dem Bild in file (PNG, JPEG oder WebP; die Anfrage ist höchstens 4 MB groß, und ein größeres Bild bis 25 MB geht über einen Upload, angegeben in upload) sowie optional policy: ai-act (Standard) oder safe-only. Jede Prüfung zählt zwei Markierungen. Um beim Markieren zu prüfen, senden Sie stattdessen check an POST /v1/mark.
Ein Clip (MP4, hier bis 25 MB; einen größeren prüfen Sie beim Markieren) wird an 12 über ihn verteilten Einzelbildern gelesen, je zwei Markierungen: Die Antwort ist die seines schlechtesten Einzelbilds (block vor flag vor allow), mit der Stelle dieses Einzelbilds in frame (index und seconds) und der Zahl der gelesenen Einzelbilder in frames.
curl https://api.kennmarq.com/v1/check \
-H "Authorization: Bearer $KENNMARQ_API_KEY" \
-F file=@render.png -F policy=ai-act{
"object": "safety_check",
"checked_at": "2026-11-12T10:00:00Z",
"checker": { "name": "Kennmarq.com", "version": "0.5.0" },
"file": { "type": "image/png", "bytes": 1482113, "width": 1024, "height": 1024, "sha256": "…" },
"policy": "ai-act",
"verdict": "flag",
"reason": "sexual_realistic_face",
"nudity": { "label": "explicit", "score": 0.991 },
"apparent_minor": false,
"realistic_face": true
}verdict:allow,flagoderblock. Auch eine Blockierung ist ein200: Die Prüfung hat funktioniert, und ihre Antwort ist die Blockierung.reason:sexual_apparent_minor,sexual_realistic_face,explicitodernullbei allow.nudity:none,suggestiveoderexplicitsowie der Wert des Klassifikators, von 0 bis 1.apparent_minorundrealistic_face: nur bei einem Bild mit Nacktheit gelesen, sonstnull. Die Prüfung schätzt nie ein Alter für sich allein und gibt nie ein Alter oder eine Identität zurück.
Richtlinien
| Richtlinie | Blockiert | Zur Prüfung vorgemerkt |
|---|---|---|
ai-act | Sexuelle oder anzügliche Inhalte mit einer dem Anschein nach minderjährigen Person (Art. 5 Abs. 1 Buchst. bb) | Explizite Inhalte mit einem realistischen Gesicht: Holen Sie die Einwilligung der Person ein, bevor Sie den Inhalt veröffentlichen (Art. 5 Abs. 1 Buchst. ba) |
safe-only | Dasselbe sowie alles Explizite | Nichts |
| unsere Untergrenze | Explizite Inhalte mit einer dem Anschein nach minderjährigen Person, bei jedem POST /v1/mark, unabhängig von dessen check. Lässt sich nicht abschalten | Nichts |
Wie ein Bild gelesen wird
In Schritten, jeder nur, wenn der vorige ihn erfordert, sodass ein Bild ohne Nacktheit nur einen Lesevorgang kostet. Zuerst die Nacktheit: explicit, wenn der Klassifikator sicher ist, oder ziemlich sicher und der Detektor einen entblößten Körperteil findet; suggestive ab einem Wert von 0,3. Dann, bei einem Bild mit Nacktheit: Ist es ein Foto? Bei einem Foto wird jedes Gesicht, das groß genug zum Lesen ist (32 px oder mehr), auf sein scheinbares Alter gelesen, mit strengeren Schwellen bei einem expliziten Bild als bei einem anzüglichen. Eine Zeichnung geht stattdessen an den Tagger, dessen Tags angeben, wann eine gezeichnete Figur ein Kind ist.
| Prüfschritt | Modell | Lizenz |
|---|---|---|
| Nacktheit | Der NSFW-Klassifikator von Falconsai (ViT-B/16), mit dem 320n-Detektor von NudeNet als zweiter Meinung bei Grenzfällen | Apache-2.0; MIT |
| Foto oder Zeichnung | SigLIP von Google (base, 224 px), Zero-Shot-Abgleich mit Beschreibungen von Fotos und Zeichnungen | Apache-2.0 |
| Gesichter | YuNet aus dem OpenCV Zoo | MIT |
| Scheinbares Alter, Fotos | Zwei Modelle auf sechs Ausschnitten jedes Gesichts: SigLIP 2, feinabgestimmt auf Altersgruppen, und age-vit von Civitai | Apache-2.0 |
| Scheinbares Alter, Zeichnungen | wd-vit-tagger-v3 von SmilingWolf (seine Tags für Kinder) | Apache-2.0 |
Alles offene Modelle, ausgeführt auf unseren Servern in Zürich und festgelegt auf genau die Dateien, die wir getestet haben.
Fehlerraten
Anteil echter Fotos, deren Gesicht als minderjährig gelesen wurde, gemessen im Oktober 2026 mit diesen Modellen und Schwellen an den Validierungsfotos von FairFace (5.980 Gesichter):
| Alter | Explizites Bild | Anzügliches Bild |
|---|---|---|
| 0–2 | 98,5 % | 97 % |
| 3–9 | 92 % | 85 % |
| 10–19 | 47 % | 34 % |
| 20–29 | 5,9 % | 2,3 % |
| 30 und älter | 0,9 % | 0,6 % |
Erwachsene, die in expliziten Bildern als minderjährig gelesen werden, verteilen sich nicht gleichmäßig: in ihren Zwanzigern Frauen 8,0 % und Männer 3,2 %; Schwarze und südostasiatische Gesichter etwa 12,5 %, weiße Gesichter 1,7 %. FairFace ist der eigene Trainingsdatensatz eines der Modelle, daher werden echte Bilder schlechter abschneiden. Bei 78 Alltagsbildern ohne Nacktheit hat die Prüfung unter keiner der beiden Richtlinien einen Fehlalarm ausgelöst (der Robustheitsbericht). Bekannte Grenzen:
- ein Gesicht, das sie nicht findet (abgewandt, verdeckt oder unter 32 px hoch), erhält keine Altersschätzung, sodass ein solches Foto durchgeht;
- um die 18 ist das scheinbare Alter eine Schätzung, die in beide Richtungen danebenliegen kann: Die meisten älteren Jugendlichen gehen durch;
- ein nahezu fotorealistisches 3D-Rendering gilt als Foto;
- der Tagger liest Zeichnungen im Anime-Stil am besten; in anderen Stilen kann ein gezeichnetes Kind unerkannt bleiben.
Datenschutz
Das Bild wird im Arbeitsspeicher gelesen und nie aufbewahrt: keine Kopie, kein Wert, kein Hash. Die Antwort geht nur an Sie, nie in die Markierungen einer Datei.
Fehler
| Status | Code | Wann |
|---|---|---|
| 400 | invalid_request | Keine Datei, ein doppelt gesendetes Feld, eine andere Richtlinie als ai-act oder safe-only oder ein Bild, das sich nicht lesen lässt. |
| 400 | unknown_field | Ein anderes Feld als file (oder upload) und policy. |
| 400 | option_not_available | url, categorize oder describe: noch nicht verfügbar. |
| 401 | missing_api_key, invalid_api_key, api_key_revoked | Siehe Authentifizierung. |
| 402 | quota_exceeded | In diesem Monat sind weniger als zwei Markierungen übrig (bei einem Clip weniger als 24). |
| 403 | insufficient_scope, ip_not_allowed | Dem Schlüssel fehlt die Berechtigung check, oder die Adresse steht nicht auf der Allowlist. |
| 404 | upload_not_found | Der angegebene Upload ist keiner, den dieser Schlüssel verwenden kann: unbekannt, schon verwendet, abgelaufen oder der eines anderen Schlüssels. |
| 413 | payload_too_large | Die Anfrage ist größer als 4 MB (senden Sie größere Dateien über einen Upload), oder ein Clip ist größer als 25 MB oder überschreitet unsere Grenzen. |
| 415 | unsupported_media_type | Kein Bild im Format PNG, JPEG oder WebP und kein MP4-Clip, oder nicht als multipart/form-data gesendet. |
| 429 | rate_limited | Zu viele Aufrufe in dieser Minute; versuchen Sie es nach Retry-After Sekunden erneut. |
| 503 | marker_unavailable, storage_unavailable | Die Prüfung (oder die Uploads) kann gerade nicht laufen. Sie wird nie übersprungen: Es wird nichts berechnet; versuchen Sie es erneut. |
Fehler-Bodys folgen dem gemeinsamen Format.