API: KI-Deklaration als v1-Pflichtfeld, Legacy-Default fuer /service (Entscheidung 10.07.)

Befund: v1 hatte keine KI-Deklarationsfelder — Submit lief seit der
KI-Kennzeichnungspflicht (09.07.) immer auf 422 und haette alle
Legacy-API-Kunden blockiert (Suite uebersah es: Factory deklariert).

- v1-Submit verlangt ai_text_declaration; der Call gilt dokumentiert
  als verbindliche Bestaetigung (Art. 50 KI-VO) und schliesst die
  Archiv-Kenntnisnahme (AGB par. 13) ein
- Bild-Upload verlangt ai_declaration (original/ai_generated/ai_edited)
- Legacy-/service-Aliasse defaulten auf none/original — das
  API-Kunden-Mailing (R6.4) weist auf die Erklaerungswirkung hin
- OpenAPI v1.yml + lang-Hinweis aktualisiert; Tests erweitert
  (Submit/Image/LegacyCompatibility)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-10 12:41:24 +00:00
parent 3843e534da
commit 92af015532
11 changed files with 213 additions and 10 deletions

View file

@ -125,16 +125,39 @@ paths:
description: |
Der einzige API-Weg Richtung Veröffentlichung. Durchläuft denselben
Funnel wie das Web-Formular (Richtlinien-Filter, Kontingent, Status-Log).
Der Aufruf erklärt verbindlich den deklarierten KI-Grad des Textes
(`ai_text_declaration`, Transparenzpflicht nach Art. 50 KI-VO) und
schließt die Kenntnisnahme der dauerhaften Archivierung ein
(AGB § 13: Depublikation nur als kostenpflichtiger Service,
gesetzliche Ansprüche unberührt).
parameters:
- name: id
in: path
required: true
schema: { type: integer }
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [ai_text_declaration]
properties:
ai_text_declaration:
type: string
enum: [none, assisted, mostly_ai, fully_ai]
description: >
Deklarierter KI-Grad des Textes: ohne generative KI (none),
KI als Formulierungshilfe mit redaktioneller Überarbeitung
(assisted), überwiegend KI-erstellt und geprüft (mostly_ai),
vollständig KI-generiert (fully_ai). Ab mostly_ai trägt die
Veröffentlichung ein öffentliches Transparenz-Label.
responses:
"200": { description: "Eingereicht (Status review)" }
"402": { description: "Aktive Buchung erforderlich (Tarif oder Einzel-PM)" }
"409": { description: "Nur draft/rejected kann eingereicht werden" }
"422": { description: "Kontingent erschöpft oder Richtlinienverstoß" }
"422": { description: "KI-Deklaration fehlt/ungültig, Kontingent erschöpft oder Richtlinienverstoß" }
/press-releases/{id}/images:
parameters:
- name: id
@ -164,12 +187,18 @@ paths:
multipart/form-data:
schema:
type: object
required: [image]
required: [image, ai_declaration]
properties:
image:
type: string
format: binary
description: JPG, PNG oder WebP, max. 8 MB
ai_declaration:
type: string
enum: [original, ai_generated, ai_edited]
description: >
KI-Kennzeichnung des Bildes (Art. 50 KI-VO): Originalfoto,
KI-generiert oder KI-bearbeitet.
title: { type: string, maxLength: 120 }
description: { type: string, maxLength: 500 }
copyright: { type: string, maxLength: 255 }