{"openapi":"3.1.0","info":{"title":"Cannabis-Transparent Public API","version":"1.0.0","description":"Öffentliche, lesende API auf Chargen-Ebene.\n\nWICHTIG: Diese API liefert auf KEINER Stufe einen Qualitäts-Score, ein Gesamturteil,\neine Note, ein Ranking oder einen Vergleich zwischen Produkten, Chargen oder Apotheken\n(§10 HWG). Zurückgegeben werden ausschließlich aggregierte, nicht-personenbezogene\nTatsachen: welche Charge erfasst ist, zu welchem Produkt/Hersteller sie gehört und\nwie viele Bewertungen vorliegen. Medizinische Felder (z. B. PGIC, Nebenwirkungen)\nsind nicht Teil dieser API.\n\nStufen: Free = ohne API-Key (unverändert). Partner/Enterprise = optionaler Key im\nAuthorization-Header; liefert zusätzliche faktische, nicht-personenbezogene Felder.\nRate-Limits sind pro Stufe definiert und aktuell in der Beta NICHT erzwungen.","contact":{"name":"Cannabis-Transparent","url":"https://www.cannabis-transparent.de/api-zugang"}},"servers":[{"url":"https://www.cannabis-transparent.de"}],"tags":[{"name":"Chargen","description":"Aggregierte Chargen-Daten"},{"name":"Badge","description":"Einbettbares Vertrauens-Badge (faktisch, ohne Bewertung)"}],"components":{"securitySchemes":{"PartnerKey":{"type":"http","scheme":"bearer","description":"Optionaler Partner-Schlüssel (Format `ct_live_…`). Ohne Schlüssel gilt die Free-Stufe; ein unbekannter Schlüssel fällt still auf Free zurück."}},"schemas":{"Batch":{"type":"object","required":["batch","product","manufacturer","reviews","last_updated"],"properties":{"batch":{"type":"string","description":"Chargennummer","example":"Ch.-B. 2026-05"},"product":{"type":["string","null"],"description":"Produktname (häufigster Wert der Charge)"},"manufacturer":{"type":["string","null"],"description":"Hersteller (häufigster Wert der Charge)"},"reviews":{"type":"integer","description":"Anzahl erfasster, nicht gemeldeter Bewertungen","example":4},"last_updated":{"type":["string","null"],"format":"date-time"},"first_seen":{"type":["string","null"],"format":"date-time","description":"NUR Partner/Enterprise: früheste Einreichung"},"reviews_verified":{"type":"integer","description":"NUR Partner/Enterprise: davon von verifizierten Testern"},"tier":{"type":"string","enum":["partner","enterprise"],"description":"NUR Partner/Enterprise"}}},"Error":{"type":"object","properties":{"error":{"type":"string","enum":["batch_not_found","internal_error","rate_limited"]},"batch":{"type":"string"}}}}},"paths":{"/api/v1/batches/{batch}":{"get":{"tags":["Chargen"],"summary":"Aggregierte Daten zu einer Charge","description":"Kein Qualitäts-Score, kein Urteil, kein Ranking. Ohne API-Key nutzbar.","security":[{},{"PartnerKey":[]}],"parameters":[{"name":"batch","in":"path","required":true,"schema":{"type":"string"},"example":"Ch.-B. 2026-05","description":"URL-kodierte Chargennummer"}],"responses":{"200":{"description":"Aggregierte Chargen-Daten","headers":{"X-CT-Tier":{"schema":{"type":"string","enum":["free","partner","enterprise"]}},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Anfragen pro 10-Minuten-Fenster"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"}}}},"404":{"description":"Für diese Charge liegen keine Bewertungen vor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate-Limit überschritten (nur wenn aktiviert)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Interner Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/badge/{batch}.svg":{"get":{"tags":["Badge"],"summary":"Einbettbares CT-Badge (SVG)","description":"Rein faktisch: „Unabhängig erfasst\" + Anzahl der Bewertungen. Keine Note, kein Ranking. Ohne Daten wird ein neutrales Badge mit HTTP 200 geliefert.","parameters":[{"name":"batch","in":"path","required":true,"schema":{"type":"string"},"example":"Ch.-B. 2026-05"}],"responses":{"200":{"description":"SVG-Badge","content":{"image/svg+xml":{"schema":{"type":"string"}}}}}}},"/api/badge/{batch}/go":{"get":{"tags":["Badge"],"summary":"Weiterleitung vom Badge auf die CT-Produktseite","parameters":[{"name":"batch","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"302":{"description":"Redirect auf /produkte/…"}}}},"/api/badge/embed.js":{"get":{"tags":["Badge"],"summary":"Einbettungs-Snippet (JavaScript)","description":"Wandelt jedes Element mit data-ct-badge=\"<Charge>\" in ein verlinktes Badge um. Keine Cookies, kein Tracking.","responses":{"200":{"description":"JavaScript","content":{"application/javascript":{"schema":{"type":"string"}}}}}}}},"x-tiers":{"free":{"key_required":false,"requests_per_10min":300,"fields":["batch","product","manufacturer","reviews","last_updated"]},"partner":{"key_required":true,"requests_per_10min":3000,"extra_fields":["first_seen","reviews_verified"]},"enterprise":{"key_required":true,"requests_per_10min":30000,"extra_fields":["first_seen","reviews_verified"]},"rate_limit_enforced":false,"never_returned":["score","grade","ranking","comparison","pgic","side_effects","personal_data"]}}