# Tool_OCR V2 API (現況) Base URL:`http://localhost:${BACKEND_PORT:-8000}/api/v2` 認證:所有業務端點需 Bearer Token(JWT)。 ## 認證 - `POST /auth/login`:{ username, password } → `access_token`, `expires_in`, `user`. - `POST /auth/logout`:可傳 `session_id`,未傳則登出全部。 - `GET /auth/me`:目前使用者資訊。 - `GET /auth/sessions`:列出登入 Session。 - `POST /auth/refresh`:刷新 access token。 ## 任務流程摘要 1) 上傳檔案 → `POST /upload` (multipart file) 取得 `task_id`。 2) 啟動處理 → `POST /tasks/{task_id}/start`(ProcessingOptions 可控制 dual track、force_track、layout/預處理/table 偵測)。 3) 查詢狀態與 metadata → `GET /tasks/{task_id}`、`/metadata`。 4) 下載結果 → `/download/json | /markdown | /pdf | /unified`。 5) 進階:`/analyze` 先看推薦軌道;`/preview/preprocessing` 取得預處理前後預覽。 ## 核心端點 - `POST /upload` - 表單欄位:`file` (必填);驗證副檔名於允許清單。 - 回傳:`task_id`, `filename`, `file_size`, `file_type`, `status` (pending)。 - `POST /tasks/` - 僅建立 Task meta(不含檔案),通常不需使用。 - `POST /tasks/{task_id}/start` - Body `ProcessingOptions`:`use_dual_track`(default true), `force_track`(ocr|direct), `language`(default ch), `layout_model`(chinese|default|cdla), `preprocessing_mode`(auto|manual|disabled) + `preprocessing_config`, `table_detection`. - `POST /tasks/{task_id}/cancel`、`POST /tasks/{task_id}/retry`。 - `GET /tasks` - 查詢參數:`status`(pending|processing|completed|failed)、`filename`、`date_from`/`date_to`、`page`、`page_size`、`order_by`、`order_desc`。 - `GET /tasks/{task_id}`:詳細資料與路徑、處理軌道、統計。 - `GET /tasks/stats`:當前使用者任務統計。 - `POST /tasks/{task_id}/analyze`:預先分析文件並給出推薦軌道/信心/文件類型/抽樣統計。 - `GET /tasks/{task_id}/metadata`:處理結果的統計與說明。 - 下載: - `GET /tasks/{task_id}/download/json` - `GET /tasks/{task_id}/download/markdown` - `GET /tasks/{task_id}/download/pdf`(若無 PDF 則即時生成) - `GET /tasks/{task_id}/download/unified`(UnifiedDocument JSON) - 預處理預覽: - `POST /tasks/{task_id}/preview/preprocessing`(body:page/mode/config) - `GET /tasks/{task_id}/preview/image?type=original|preprocessed&page=1` ## 翻譯(需已完成 OCR) Prefix:`/translate` - `POST /{task_id}`:開始翻譯,body `{ target_lang, source_lang }`,回傳 202。若已存在會直接回 Completed。 - `GET /{task_id}/status`:翻譯進度。 - `GET /{task_id}/result?lang=xx`:翻譯 JSON。 - `GET /{task_id}/translations`:列出已產生的翻譯。 - `DELETE /{task_id}/translations/{lang}`:刪除翻譯。 - `POST /{task_id}/pdf?lang=xx`:下載翻譯後版面保持 PDF。 ## 管理端(需要管理員) Prefix:`/admin` - `GET /stats`:系統層統計。 - `GET /users`、`GET /users/top`。 - `GET /audit-logs`、`GET /audit-logs/user/{user_id}/summary`。 ## 健康檢查 - `/health`:服務狀態、GPU/Memory 管理資訊。 - `/`:簡易 API 入口說明。 ## 回應結構摘要 - Task 回應常見欄位:`task_id`, `status`, `processing_track`, `document_type`, `processing_time_ms`, `page_count`, `element_count`, `file_size`, `mime_type`, `result_json_path` 等。 - 下載端點皆以檔案回應(Content-Disposition 附檔名)。 - 錯誤格式:`{ "detail": "...", "error_code": "...", "timestamp": "..." }`(部分錯誤僅有 `detail`)。 ## 使用範例 上傳並啟動: ```bash # 上傳 curl -X POST "http://localhost:8000/api/v2/upload" \ -H "Authorization: Bearer $TOKEN" \ -F "file=@demo_docs/edit.pdf" # 啟動處理(force_track=ocr 舉例) curl -X POST "http://localhost:8000/api/v2/tasks/$TASK_ID/start" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"force_track":"ocr","language":"ch"}' # 查詢與下載 curl -X GET "http://localhost:8000/api/v2/tasks/$TASK_ID/metadata" -H "Authorization: Bearer $TOKEN" curl -L "http://localhost:8000/api/v2/tasks/$TASK_ID/download/json" -H "Authorization: Bearer $TOKEN" -o result.json ``` 翻譯並下載翻譯 PDF: ```bash curl -X POST "http://localhost:8000/api/v2/translate/$TASK_ID" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"target_lang":"en","source_lang":"auto"}' curl -X GET "http://localhost:8000/api/v2/translate/$TASK_ID/status" -H "Authorization: Bearer $TOKEN" curl -L "http://localhost:8000/api/v2/translate/$TASK_ID/pdf?lang=en" \ -H "Authorization: Bearer $TOKEN" -o translated.pdf ```