{"openapi":"3.1.0","info":{"title":"ImageHost API","description":"Quarantine-first image hosting. Bearer keys are scoped to their own images. Upload returns 202; poll metadata until ready. See /docs for integration details.","version":"1.0.0"},"paths":{"/api/v1/images":{"post":{"tags":["Images"],"summary":"Uploadimage","description":"Queue an image for mandatory scanning. A 202 response is not a publication approval.","operationId":"uploadImage_api_v1_images_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_uploadImage_api_v1_images_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Images"],"summary":"Listimages","operationId":"listImages_api_v1_images_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"enum":["pending","scanning","scan_error","ready","blocked","expired"],"type":"string"},{"type":"null"}],"title":"State"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","maxLength":100,"default":"","title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagePage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/images/{imageId}":{"get":{"tags":["Images"],"summary":"Imagemetadata","operationId":"imageMetadata_api_v1_images__imageId__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"imageId","in":"path","required":true,"schema":{"type":"string","title":"Imageid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Images"],"summary":"Deleteimage","operationId":"deleteImage_api_v1_images__imageId__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"imageId","in":"path","required":true,"schema":{"type":"string","title":"Imageid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/images/{imageId}/content":{"get":{"tags":["Images"],"summary":"Privatecontent","description":"Read an approved image, including private images owned by this key.","operationId":"privateContent_api_v1_images__imageId__content_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"imageId","in":"path","required":true,"schema":{"type":"string","title":"Imageid"}}],"responses":{"200":{"description":"Successful Response","content":{"image/webp":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/i/{imageId}.webp":{"get":{"tags":["Delivery"],"summary":"Publiccontent","operationId":"publicContent_i__imageId__webp_get","parameters":[{"name":"imageId","in":"path","required":true,"schema":{"type":"string","title":"Imageid"}}],"responses":{"200":{"description":"Successful Response","content":{"image/webp":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/images/{imageId}/retry":{"post":{"tags":["Images"],"summary":"Retryimage","operationId":"retryImage_api_v1_images__imageId__retry_post","parameters":[{"name":"imageId","in":"path","required":true,"schema":{"type":"string","title":"Imageid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats":{"get":{"tags":["Statistics"],"summary":"Stats","operationId":"stats_api_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/keys":{"get":{"tags":["Administration"],"summary":"Listkeys","operationId":"listKeys_api_v1_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["Administration"],"summary":"Createkey","operationId":"createKey_api_v1_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyInput"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/{keyId}":{"delete":{"tags":["Administration"],"summary":"Revokekey","operationId":"revokeKey_api_v1_keys__keyId__delete","parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string","title":"Keyid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/system":{"get":{"tags":["Administration"],"summary":"System","operationId":"system_api_v1_system_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/audit":{"get":{"tags":["Administration"],"summary":"Auditlog","operationId":"auditLog_api_v1_audit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_uploadImage_api_v1_images_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"JPEG, PNG or static WebP; up to MAX_UPLOAD_MB"},"public":{"type":"boolean","title":"Public","default":true}},"type":"object","required":["file"],"title":"Body_uploadImage_api_v1_images_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImageOutput":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"state":{"type":"string","title":"State"},"public":{"type":"boolean","title":"Public"},"size":{"type":"integer","title":"Size"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"created":{"type":"number","title":"Created"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"views":{"type":"integer","title":"Views"},"bytes_served":{"type":"integer","title":"Bytes Served"}},"type":"object","required":["id","name","state","public","size","width","height","created","reason","url","views","bytes_served"],"title":"ImageOutput"},"ImagePage":{"properties":{"images":{"items":{"$ref":"#/components/schemas/ImageOutput"},"type":"array","title":"Images"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["images","total","limit","offset"],"title":"ImagePage"},"KeyInput":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"scopes":{"items":{"type":"string","enum":["images:read","images:write","images:delete"]},"type":"array","maxItems":3,"minItems":1,"title":"Scopes"},"expiresInDays":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Expiresindays","default":90}},"type":"object","required":["name","scopes"],"title":"KeyInput"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}