{"components":{"schemas":{"Item":{"properties":{"created":{"format":"date-time","type":"string"},"expires":{"format":"date-time","type":"string"},"id":{"type":"string"},"mime_type":{"type":"string"},"name":{"type":"string"},"persistent":{"type":"boolean"},"size":{"type":"integer"},"type":{"description":"file or text","type":"string"},"url":{"type":"string"}},"type":"object"}}},"info":{"description":"File drop and paste service with vision LLM integration","title":"Klipbord API","version":"dev"},"openapi":"3.0.3","paths":{"/api/analyze/{id}":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Prompt name (default, terminal, code, document, diagram, screenshot, or custom)","in":"query","name":"prompt","schema":{"type":"string"}}],"responses":{"200":{"description":"Analysis result"}},"summary":"Trigger vision analysis on an image"}},"/api/config/vision":{"get":{"responses":{"200":{"description":"Vision config"}},"summary":"Get vision configuration (presets, active, enabled)"}},"/api/config/vision/active":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"preset":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Active preset changed"}},"summary":"Set active vision preset"}},"/api/config/vision/enabled":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"enabled":{"type":"boolean"}},"type":"object"}}}},"responses":{"200":{"description":"Vision enabled toggled"}},"summary":"Enable/disable vision processing"}},"/api/config/vision/presets":{"get":{"responses":{"200":{"description":"List of presets"}},"summary":"List all presets"},"post":{"responses":{"201":{"description":"Preset added"}},"summary":"Add a preset"}},"/api/config/vision/presets/{name}":{"delete":{"responses":{"200":{"description":"Preset deleted"}},"summary":"Delete a preset"},"put":{"responses":{"200":{"description":"Preset updated"}},"summary":"Update a preset"}},"/api/config/vision/test":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"preset":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Test result"}},"summary":"Test connectivity to a vision preset (text-only, no image)"}},"/api/files":{"get":{"parameters":[{"description":"Filter by persistent state","in":"query","name":"persistent","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Item"},"type":"array"}}},"description":"List of items"}},"summary":"List all items"}},"/api/files/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Item deleted"}},"summary":"Delete an item"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"File content or item metadata"}},"summary":"Download a file or get text content"},"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"persistent":{"type":"boolean"}},"type":"object"}}}},"responses":{"200":{"description":"Item updated"}},"summary":"Pin/unpin item (persist forever)"}},"/api/logs":{"get":{"responses":{"200":{"description":"Redacted server log lines"}},"summary":"Get the most recent in-memory server log lines"}},"/api/prompts":{"get":{"responses":{"200":{"description":"List of prompts"}},"summary":"List all vision prompts (built-in and custom)"},"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"description":{"type":"string"},"name":{"type":"string"},"prompt":{"type":"string"}},"required":["name","prompt"],"type":"object"}}}},"responses":{"201":{"description":"Prompt created"}},"summary":"Create a custom vision prompt"}},"/api/prompts/{name}":{"delete":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Prompt deleted"}},"summary":"Delete a custom prompt (built-ins cannot be deleted)"},"get":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Prompt details"}},"summary":"Get a specific prompt"},"put":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"description":{"type":"string"},"prompt":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Prompt updated"}},"summary":"Update a prompt (built-in or custom)"}},"/api/text":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"content":{"type":"string"},"name":{"type":"string"},"persistent":{"type":"boolean"},"ttl":{"type":"string"}},"required":["content"],"type":"object"}}}},"responses":{"200":{"description":"Text snippet created"}},"summary":"Create a text snippet"}},"/api/text/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"text/plain":{"schema":{"type":"string"}}},"description":"Raw text content"}},"summary":"Get raw text snippet"}},"/api/update-check":{"get":{"responses":{"200":{"description":"Current and latest release versions"}},"summary":"Check whether a newer Klipbord release is available"}},"/api/upload":{"post":{"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"format":"binary","type":"string"},"ttl":{"description":"1h, 1d, 7d, 30d, never","type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Upload successful"}},"summary":"Upload a file (multipart, \u003c5MB recommended)"}},"/api/upload/chunk":{"post":{"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"chunk":{"format":"binary","type":"string"},"chunk_index":{"type":"integer"},"upload_id":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Chunk received"}},"summary":"Upload a chunk (multipart: upload_id, chunk_index, chunk)"}},"/api/upload/complete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"upload_id":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Upload complete"}},"summary":"Finalize chunked upload (reassembles file)"}},"/api/upload/init":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"filename":{"type":"string"},"mime_type":{"type":"string"},"size":{"type":"integer"},"ttl":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Upload initialized with upload_id"}},"summary":"Initialize chunked upload"}},"/api/upload/status/{upload_id}":{"get":{"parameters":[{"in":"path","name":"upload_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Chunk status"}},"summary":"Check which chunks have been received"}},"/api/version":{"get":{"responses":{"200":{"description":"Version info"}},"summary":"Get server version"}},"/api/vision/compare":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"image_type":{"description":"Sample image type: terminal, code, document, diagram, screenshot. If omitted, requires item_id.","type":"string"},"item_id":{"description":"Existing image item ID to analyze. If omitted, uses sample image_type.","type":"string"},"prompt":{"description":"Prompt name to use (default: 'default')","type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Ranked comparison results from all presets"}},"summary":"Run an image through all presets, compare results, and rank by quality"}},"/api/vision/compare-prompts":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"image_type":{"description":"Sample image type: terminal (default), code, document, diagram, screenshot. Ignored if item_id is provided.","type":"string"},"item_id":{"description":"Existing image item ID to test. If omitted, uses a sample image.","type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Ranked prompt comparison results"}},"summary":"Run one image through ALL prompts, compare and rank by quality"}},"/api/vision/runtime":{"get":{"responses":{"200":{"description":"Runtime status by vision preset"}},"summary":"Get configured vision providers' loaded-model and resource status"}},"/api/vision/test":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"image_type":{"description":"terminal (default), code, document, diagram, screenshot","type":"string"},"prompt":{"description":"Prompt name override (default: matches image_type)","type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Vision analysis result with extracted text"}},"summary":"Run full vision pipeline on a built-in sample image"}},"/health":{"get":{"responses":{"200":{"description":"Server healthy"}},"summary":"Health check"}},"/link/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Stored item content"}},"summary":"Open a stored file, image, or text snippet"}}},"servers":[{"description":"Current server","url":"http://localhost:8080"}]}
