{"openapi":"3.1.0","info":{"title":"Oddy Medicator API","description":"KI-gestuetzte Klassifikation und Katalogisierung von Medizinprodukten.\n\n**Authentifizierung:** Session-Cookie nach Login oder `X-API-Key` Header.\n\n**Kontakt:** info@detalex.de | [medicator.io](https://medicator.io)","version":"1.0.0"},"paths":{"/api/v1/catalog":{"get":{"tags":["catalog"],"summary":"List Devices","operationId":"list_devices_api_v1_catalog_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":200,"description":"Search query (3-200 characters)","title":"Q"},"description":"Search query (3-200 characters)"},{"name":"cluster","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cluster"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"de","title":"Lang"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/{code}":{"get":{"tags":["catalog"],"summary":"Get Device","operationId":"get_device_api_v1_catalog__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/classify":{"post":{"tags":["classify"],"summary":"Classify Device","operationId":"classify_device_api_v1_classify_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ocr":{"post":{"tags":["ocr"],"summary":"Ocr Device","operationId":"ocr_device_api_v1_ocr_post","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"de","title":"Lang"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_ocr_device_api_v1_ocr_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OcrResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/me":{"get":{"tags":["me"],"summary":"Get Me","operationId":"get_me_api_v1_me_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys":{"post":{"tags":["api-keys"],"summary":"Create Api Key","description":"Neuen API-Key erstellen. Der Key wird nur einmal angezeigt.","operationId":"create_api_key_api_v1_keys_post","parameters":[{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["api-keys"],"summary":"List Api Keys","description":"Alle API-Keys des Benutzers auflisten.","operationId":"list_api_keys_api_v1_keys_get","parameters":[{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KeyInfo"},"title":"Response List Api Keys Api V1 Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/{key_id}":{"patch":{"tags":["api-keys"],"summary":"Update Api Key","description":"API-Key aktualisieren (Label, IPs, aktiv/inaktiv).","operationId":"update_api_key_api_v1_keys__key_id__patch","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["api-keys"],"summary":"Delete Api Key","description":"API-Key dauerhaft löschen.","operationId":"delete_api_key_api_v1_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hersteller":{"get":{"summary":"Manufacturers Page","operationId":"manufacturers_page_hersteller_get","parameters":[{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hersteller/{slug}":{"get":{"summary":"Manufacturer Detail Page","operationId":"manufacturer_detail_page_hersteller__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/manufacturers":{"get":{"summary":"Api Manufacturers","description":"Public paginated manufacturer list.","operationId":"api_manufacturers_api_manufacturers_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100,"default":"","title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"name","title":"Sort"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/manufacturer/{slug}":{"get":{"summary":"Api Manufacturer Detail","description":"Public manufacturer detail with categories.","operationId":"api_manufacturer_detail_api_manufacturer__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/manufacturer/{slug}/devices":{"get":{"summary":"Api Manufacturer Devices","description":"Device list by manufacturer — requires login.","operationId":"api_manufacturer_devices_api_manufacturer__slug__devices_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","maxLength":20,"default":"","title":"Category"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"medicator_session","in":"cookie","required":false,"schema":{"type":"string","title":"Medicator Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_ocr_device_api_v1_ocr_post":{"properties":{"file":{"type":"string","format":"binary","title":"File","description":"Photo of device or nameplate"}},"type":"object","required":["file"],"title":"Body_ocr_device_api_v1_ocr_post"},"CategoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"code":{"type":"string","title":"Code"},"name_de":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name De"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"},"names":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Names"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"cluster":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cluster"},"level":{"type":"integer","title":"Level"}},"type":"object","required":["id","code","level"],"title":"CategoryResponse"},"ClassifyRequest":{"properties":{"device_name":{"type":"string","title":"Device Name"},"lang":{"type":"string","title":"Lang","default":"de"}},"type":"object","required":["device_name"],"title":"ClassifyRequest"},"ClassifyResponse":{"properties":{"medicator_code":{"type":"string","title":"Medicator Code"},"url":{"type":"string","title":"Url"},"path":{"items":{"$ref":"#/components/schemas/PathSegment"},"type":"array","title":"Path"},"category":{"$ref":"#/components/schemas/CategoryResponse"},"confidence":{"type":"number","title":"Confidence"},"reasoning":{"type":"string","title":"Reasoning"},"in_catalog":{"type":"boolean","title":"In Catalog","default":false}},"type":"object","required":["medicator_code","url","path","category","confidence","reasoning"],"title":"ClassifyResponse"},"CreateKeyRequest":{"properties":{"label":{"type":"string","title":"Label"},"allowed_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Ips"}},"type":"object","required":["label"],"title":"CreateKeyRequest"},"CreateKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"key_prefix":{"type":"string","title":"Key Prefix"},"allowed_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Ips"},"plan":{"type":"string","title":"Plan"}},"type":"object","required":["id","key","label","key_prefix","allowed_ips","plan"],"title":"CreateKeyResponse"},"DeviceDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"medicator_code":{"type":"string","title":"Medicator Code"},"url":{"type":"string","title":"Url"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"manufacturer_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Manufacturer Id"},"cluster":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cluster"},"name_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Type"},"status":{"type":"string","title":"Status"},"names":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Names"},"category":{"anyOf":[{"$ref":"#/components/schemas/CategoryResponse"},{"type":"null"}]},"manufacturer":{"anyOf":[{"$ref":"#/components/schemas/ManufacturerResponse"},{"type":"null"}]}},"type":"object","required":["id","medicator_code","url","status"],"title":"DeviceDetailResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KeyInfo":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"key_prefix":{"type":"string","title":"Key Prefix"},"allowed_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Ips"},"plan":{"type":"string","title":"Plan"},"calls_used":{"type":"integer","title":"Calls Used"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","label","key_prefix","allowed_ips","plan","calls_used","is_active","created_at","last_used_at"],"title":"KeyInfo"},"ManufacturerResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"ManufacturerResponse"},"MatchCandidate":{"properties":{"medicator_code":{"type":"string","title":"Medicator Code"},"url":{"type":"string","title":"Url"},"model_name":{"type":"string","title":"Model Name"},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer"}},"type":"object","required":["medicator_code","url","model_name"],"title":"MatchCandidate"},"OcrResponse":{"properties":{"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"serial_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serial Number"},"medicator_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Medicator Code"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"path":{"items":{"$ref":"#/components/schemas/PathSegment"},"type":"array","title":"Path","default":[]},"category":{"anyOf":[{"$ref":"#/components/schemas/CategoryResponse"},{"type":"null"}]},"candidates":{"items":{"$ref":"#/components/schemas/MatchCandidate"},"type":"array","title":"Candidates","default":[]},"confidence":{"type":"number","title":"Confidence"},"reasoning":{"type":"string","title":"Reasoning"}},"type":"object","required":["confidence","reasoning"],"title":"OcrResponse"},"PaginatedResponse":{"properties":{"items":{"items":{},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"PaginatedResponse"},"PathSegment":{"properties":{"level":{"type":"string","title":"Level"},"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"},"name":{"type":"string","title":"Name"}},"type":"object","required":["level","code","label","name"],"title":"PathSegment"},"UpdateKeyRequest":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"allowed_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Ips"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UpdateKeyRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}