{"openapi":"3.1.0","info":{"title":"Synology Duplicate Manager API","description":"Synology NAS duplicate manager + multilingual natural-language photo search.","version":"3.6.0"},"paths":{"/health":{"get":{"tags":["system"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/config":{"get":{"tags":["system"],"summary":"Config","operationId":"config_api_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/settings":{"get":{"tags":["settings"],"summary":"Settings Get","operationId":"settings_get_api_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["settings"],"summary":"Settings Update","operationId":"settings_update_api_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RootSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fs/browse":{"get":{"tags":["settings"],"summary":"Fs Browse","operationId":"fs_browse_api_fs_browse_get","parameters":[{"name":"path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/status":{"get":{"tags":["scan"],"summary":"Scan Status","operationId":"scan_status_api_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanState"}}}}}}},"/api/scan":{"post":{"tags":["scan"],"summary":"Scan Start","operationId":"scan_start_api_scan_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ScanRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/summary":{"get":{"tags":["duplicates"],"summary":"Summary","operationId":"summary_api_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Summary"}}}}}}},"/api/duplicates":{"get":{"tags":["duplicates"],"summary":"Duplicates","operationId":"duplicates_api_duplicates_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"min_size","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum file size in bytes","default":0,"title":"Min Size"},"description":"Minimum file size in bytes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/duplicates/{md5}":{"get":{"tags":["duplicates"],"summary":"Duplicate By Md5","operationId":"duplicate_by_md5_api_duplicates__md5__get","parameters":[{"name":"md5","in":"path","required":true,"schema":{"type":"string","title":"Md5"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateGroup"},"title":"Response Duplicate By Md5 Api Duplicates  Md5  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files":{"delete":{"tags":["duplicates"],"summary":"Delete Duplicate File","operationId":"delete_duplicate_file_api_files_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteFileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/batch":{"delete":{"tags":["duplicates"],"summary":"Delete Duplicate Files Batch","operationId":"delete_duplicate_files_batch_api_files_batch_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchDeleteFilesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/photos/preflight":{"get":{"tags":["photos"],"summary":"Photo Preflight","operationId":"photo_preflight_api_photos_preflight_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/photos/health":{"get":{"tags":["photos"],"summary":"Photo Health","operationId":"photo_health_api_photos_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/photos/scan":{"post":{"tags":["photos"],"summary":"Photo Scan Start","operationId":"photo_scan_start_api_photos_scan_post","responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/photos/status":{"get":{"tags":["photos"],"summary":"Photo Scan Status","operationId":"photo_scan_status_api_photos_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/photos/stats":{"get":{"tags":["photos"],"summary":"Photo Stats","operationId":"photo_stats_api_photos_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/photos/search":{"get":{"tags":["photos"],"summary":"Photo Search","operationId":"photo_search_api_photos_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":300,"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"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":{"BatchDeleteFilesRequest":{"properties":{"paths":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Paths"}},"type":"object","required":["paths"],"title":"BatchDeleteFilesRequest"},"DeleteFileRequest":{"properties":{"path":{"type":"string","minLength":1,"title":"Path"}},"type":"object","required":["path"],"title":"DeleteFileRequest"},"DuplicateFile":{"properties":{"path":{"type":"string","title":"Path"},"root":{"type":"string","title":"Root"},"size":{"type":"integer","title":"Size"},"mtime_ns":{"type":"integer","title":"Mtime Ns"}},"type":"object","required":["path","root","size","mtime_ns"],"title":"DuplicateFile"},"DuplicateGroup":{"properties":{"md5":{"type":"string","title":"Md5"},"size":{"type":"integer","title":"Size"},"count":{"type":"integer","title":"Count"},"reclaimable_bytes":{"type":"integer","title":"Reclaimable Bytes"},"files":{"items":{"$ref":"#/components/schemas/DuplicateFile"},"type":"array","title":"Files"}},"type":"object","required":["md5","size","count","reclaimable_bytes","files"],"title":"DuplicateGroup"},"DuplicateList":{"properties":{"total_groups":{"type":"integer","title":"Total Groups"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"items":{"items":{"$ref":"#/components/schemas/DuplicateGroup"},"type":"array","title":"Items"}},"type":"object","required":["total_groups","limit","offset","items"],"title":"DuplicateList"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"RootSettingsUpdate":{"properties":{"scan_roots":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Scan Roots"},"photo_roots":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Photo Roots"}},"type":"object","required":["scan_roots","photo_roots"],"title":"RootSettingsUpdate"},"ScanRequest":{"properties":{"mode":{"type":"string","enum":["quick","full","force_full"],"title":"Mode","default":"quick"}},"type":"object","title":"ScanRequest"},"ScanStartResponse":{"properties":{"accepted":{"type":"boolean","title":"Accepted"},"state":{"$ref":"#/components/schemas/ScanState"}},"type":"object","required":["accepted","state"],"title":"ScanStartResponse"},"ScanState":{"properties":{"running":{"type":"boolean","title":"Running"},"mode":{"anyOf":[{"type":"string","enum":["quick","full","force_full"]},{"type":"null"}],"title":"Mode"},"run_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Run Id"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"phase":{"type":"string","title":"Phase"},"files_seen":{"type":"integer","title":"Files Seen"},"files_hashed":{"type":"integer","title":"Files Hashed"},"hash_candidates":{"type":"integer","title":"Hash Candidates"},"dirs_skipped":{"type":"integer","title":"Dirs Skipped"},"errors":{"type":"integer","title":"Errors"},"current_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Path"},"message":{"type":"string","title":"Message"}},"type":"object","required":["running","phase","files_seen","files_hashed","hash_candidates","dirs_skipped","errors","message"],"title":"ScanState"},"Summary":{"properties":{"total_files":{"type":"integer","title":"Total Files"},"hashed_files":{"type":"integer","title":"Hashed Files"},"error_files":{"type":"integer","title":"Error Files"},"duplicate_groups":{"type":"integer","title":"Duplicate Groups"},"duplicate_files":{"type":"integer","title":"Duplicate Files"},"reclaimable_bytes":{"type":"integer","title":"Reclaimable Bytes"}},"type":"object","required":["total_files","hashed_files","error_files","duplicate_groups","duplicate_files","reclaimable_bytes"],"title":"Summary"},"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"}}}}