| `POST` | `/api/auth/logout` | Xác thực | Hủy phiên hiện tại |
| `GET` | `/api/auth/session` | Xác thực | Xác thực phiên hiện tại |
| `POST` | `/api/auth/change-password` | Xác thực | Đổi mật khẩu của chính mình (vô hiệu hóa mọi phiên khác + khóa API) |
| `GET` | `/api/auth/users` | Admin | Liệt kê tất cả người dùng |
| `POST` | `/api/auth/register` | Admin | Tạo người dùng mới |
| `PUT` | `/api/auth/users/:id` | Admin | Cập nhật vai trò hoặc nhóm của người dùng |
| `POST` | `/api/auth/users/:id/reset-password` | Admin | Đặt lại mật khẩu của người dùng |
| `DELETE` | `/api/auth/users/:id` | Admin | Xóa một người dùng |
| `GET` | `/api/v1/config/auth` | Công khai | Kiểm tra xác thực có được bật hay không (`{ authEnabled: bool }`) |
| `POST` | `/api/auth/mfa/enroll` | Xác thực | Bắt đầu đăng ký TOTP MFA. Yêu cầu tính năng enterprise `mfa` |
| `POST` | `/api/auth/mfa/verify` | Xác thực | Xác nhận đăng ký MFA bằng mã TOTP |
| `POST` | `/api/auth/mfa/complete` | Công khai | Hoàn tất thử thách đăng nhập MFA đang chờ |
| `POST` | `/api/auth/mfa/disable` | Xác thực | Tắt MFA cho người dùng hiện tại |
| `POST` | `/api/auth/users/:id/mfa/reset` | Admin (`users:manage`) | Đặt lại MFA cho một người dùng |
| `GET` | `/api/auth/oidc/login` | Công khai | Bắt đầu đăng nhập OIDC khi OIDC được bật |
| `GET` | `/api/auth/oidc/callback` | Công khai | Callback ủy quyền OIDC |
| `GET` | `/api/auth/saml/metadata` | Công khai | XML metadata SAML SP khi SAML được bật |
| `GET` | `/api/auth/saml/login` | Công khai | Bắt đầu đăng nhập SAML |
| `POST` | `/api/auth/saml/callback` | Công khai | Dịch vụ tiêu thụ khẳng định SAML |
Khi MFA được bật cho một người dùng, `POST /api/auth/login` trả về `{"requiresMfa":true,"mfaToken":"...","mfaRequired":true|false}` thay vì token phiên. Gửi `mfaToken` đó cùng mã TOTP hoặc mã khôi phục tới `/api/auth/mfa/complete`.
### Quyền hạn {#permissions}
| Quyền hạn | Admin | User |
|-----------|:-----:|:----:|
| Dùng công cụ | ✓ | ✓ |
| Tệp/pipeline/khóa API của riêng mình | ✓ | ✓ |
| Xem tệp/pipeline/khóa của mọi người dùng | ✓ | - |
| Ghi cài đặt | ✓ | - |
| Quản lý người dùng & nhóm | ✓ | - |
| Quản lý thương hiệu | ✓ | - |
## Kiểm tra tình trạng {#health-check}
| Phương thức | Đường dẫn | Quyền truy cập | Mô tả |
|--------|------|--------|-------------|
| `GET` | `/api/v1/health` | Công khai | Kiểm tra tình trạng cơ bản. Trả về `{"status":"healthy","version":"..."}` với 200, hoặc `{"status":"unhealthy"}` với 503 nếu không kết nối được cơ sở dữ liệu. |
| `GET` | `/api/v1/readyz` | Công khai | Kiểm tra sẵn sàng. Kiểm tra PostgreSQL, Redis, dung lượng đĩa và S3 khi được cấu hình. Trả về 503 khi instance không nên nhận lưu lượng. |
| `GET` | `/api/v1/admin/health` | Admin (`system:health`) | Chẩn đoán chi tiết bao gồm thời gian hoạt động, chế độ lưu trữ, trạng thái cơ sở dữ liệu, trạng thái hàng đợi và khả năng dùng GPU. |
## Sử dụng công cụ {#using-tools}
Mọi công cụ đều theo cùng một mẫu:
```bash
# Single file
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId> \
-H "Authorization: Bearer <token>"\
-F "file=@input.jpg"\
-F 'settings={"width":800,"height":600}'
# Batch (returns ZIP)
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId>/batch \
-H "Authorization: Bearer <token>"\
-F "files=@a.jpg"\
-F "files=@b.jpg"\
-F 'settings={...}'
```
`<section>` là một trong `image`, `video`, `audio`, `pdf`, hoặc `files`.
- Tải lên là `multipart/form-data`.
-`settings` là một chuỗi JSON chứa các tùy chọn riêng của công cụ.
-`clientJobId` là một trường form tùy chọn để đối chiếu tiến trình do bên gọi cung cấp.
-`fileId` là một trường form tùy chọn tham chiếu đến một mục có sẵn trong thư viện tệp. Khi có mặt, đầu ra đã xử lý được lưu thành phiên bản mới và response bao gồm `savedFileId`.
- **Công cụ nhanh** thường trả về 200 JSON: `{"jobId":"...","downloadUrl":"/api/v1/download/<jobId>/<filename>","originalSize":1234,"processedSize":567}`. Tải tệp đã xử lý từ `downloadUrl`.
- **Bất kỳ công cụ nào được xếp hàng** có thể trả về 202 JSON nếu chạy lâu hoặc vượt quá khung chờ đồng bộ: `{"jobId":"...","async":true}`. Kết nối SSE để theo dõi tiến trình, rồi tải xuống khi hoàn tất (xem [Theo dõi tiến trình](#progress-tracking)).
- **Route hàng loạt** trả về một kho lưu trữ ZIP được stream trực tiếp (kèm header `X-Job-Id`) cho các công cụ được đăng ký trong registry hàng loạt tổng quát.
## Tham khảo công cụ {#tools-reference}
### Cấu hình chuyển đổi sẵn {#conversion-presets}
Danh mục dùng chung bao gồm 83 endpoint cấu hình chuyển đổi chuyên biệt như `jpg-to-png`, `mov-to-mp4`, `m4a-to-mp3`, `pdf-to-jpg`, và `excel-to-csv`. Cấu hình sẵn là các route công cụ hạng nhất:
`POST /api/v1/tools/<section>/<presetId>`
Mỗi cấu hình sẵn khóa định dạng đầu ra và ủy thác cho một công cụ nền tảng như `convert`, `convert-video`, `extract-audio`, `convert-audio`, `image-to-pdf`, `pdf-to-image`, `svg-to-raster`, hoặc `convert-spreadsheet`. Xem [Cấu hình chuyển đổi sẵn](/vi/tools/conversion-presets) để biết bảng route đầy đủ và các cài đặt tùy chọn.
### Cơ bản {#essentials}
| ID công cụ | Tên | Cài đặt chính |
|---------|------|-------------|
| `resize` | Đổi kích thước | `width`, `height`, `fit` (cover/contain/fill/inside/outside), `percentage`, `withoutEnlargement`, cùng 23 cấu hình mạng xã hội sẵn |
Mọi công cụ AI đều chạy trên phần cứng của bạn: mặc định là CPU, hoặc NVIDIA CUDA khi có GPU NVIDIA được hỗ trợ. Tăng tốc iGPU của Intel/AMD qua VA-API, Quick Sync hoặc OpenCL hiện chưa được hỗ trợ cho suy luận AI. Không cần internet.
| `passport-photo` | Ảnh hộ chiếu | Điểm mốc MediaPipe | Luồng hai giai đoạn. Phân tích dùng multipart `file`; tạo dùng JSON với `countryCode`, `bgColor`, `printLayout` (none/4x6/a4), điểm mốc, kích thước ảnh |
| `content-aware-resize` | Đổi kích thước nhận biết nội dung | Seam carving (caire) | `width`, `height`, `protectFaces`, `blurRadius`, `sobelThreshold`, `square` |
| `transparency-fixer` | Sửa độ trong suốt PNG | BiRefNet HR-matting | `defringe` (0-100), `outputFormat` (png/webp) |
| `ai-canvas-expand` | Mở rộng khung vẽ bằng AI | LaMa (outpainting) | `extendTop`, `extendRight`, `extendBottom`, `extendLeft` (px), `tier` (fast/balanced/high), `format`, `quality` |
### Đóng dấu & Lớp phủ {#watermark-overlay}
| ID công cụ | Tên | Cài đặt chính |
|---------|------|-------------|
| `watermark-text` | Dấu chìm văn bản | `text`, `font`, `fontSize`, `color`, `opacity`, `position`, `rotation`, `tile` |
| `watermark-image` | Dấu chìm hình ảnh | `opacity`, `position`, `scale` - tệp thứ hai là dấu chìm |
| `text-overlay` | Lớp phủ văn bản | `text`, `font`, `fontSize`, `color`, `x`, `y`, `background`, `padding`, `borderRadius` |
| `compose` | Ghép ảnh | `x`, `y`, `opacity`, `blend` - tệp thứ hai được xếp lớp lên trên |
| `meme-generator` | Trình tạo Meme | `templateId`, `textLayout` (top-bottom/top-only/bottom-only/center/side-by-side), `textBoxes` ([{id, text}]), `fontFamily` (anton/arial-black/comic-sans/montserrat/bebas-neue/permanent-marker/roboto), `fontSize`, `textColor`, `strokeColor`, `textAlign`, `allCaps`. Hỗ trợ chế độ mẫu (thân JSON với `templateId`) hoặc chế độ ảnh tùy chỉnh (multipart kèm tệp). |
### Tiện ích {#utilities}
| ID công cụ | Tên | Cài đặt chính |
|---------|------|-------------|
| `info` | Thông tin ảnh | - (trả về width, height, format, size, channels, hasAlpha, DPI, EXIF) |
| `compare` | So sánh ảnh | `mode` (side-by-side/overlay/diff), `diffThreshold` - tệp thứ hai là đối tượng so sánh |
| `find-duplicates` | Tìm ảnh trùng | `threshold` (khoảng cách hash tri giác, mặc định 8) - đa tệp |
| `color-palette` | Bảng màu | `count` (số lượng màu chủ đạo), `format` (hex/rgb) |
| `qr-generate` | Trình tạo mã QR | `data`, `size`, `margin`, `colorDark`, `colorLight`, `errorCorrectionLevel`, `dotStyle`, `cornerStyle`, `logo` (tệp tùy chọn) |
| `barcode-read` | Đọc mã vạch | - (tự động phát hiện QR, EAN, Code128, DataMatrix, v.v.) |
Một số công cụ cung cấp thêm endpoint ngoài `POST /api/v1/tools/<section>/<toolId>` tiêu chuẩn:
| Phương thức | Đường dẫn | Mô tả |
|--------|------|-------------|
| `GET` | `/api/v1/tools/popular` | Trả về ID công cụ phổ biến, quay lại danh sách mặc định được tuyển chọn khi dữ liệu sử dụng còn ít |
| `POST` | `/api/v1/tools/image/remove-background/effects` | Áp dụng hiệu ứng nền (color/gradient/blur/shadow) mà không chạy lại AI. Dùng mặt nạ được cache từ lần xóa ban đầu. |
| `POST` | `/api/v1/tools/image/edit-metadata/inspect` | Đọc metadata EXIF/IPTC/XMP có sẵn từ một ảnh |
| `POST` | `/api/v1/tools/image/strip-metadata/inspect` | Kiểm tra các trường metadata trước khi xóa |
| `POST` | `/api/v1/tools/image/passport-photo/analyze` | Giai đoạn 1: Phát hiện khuôn mặt bằng AI + xóa nền. Trả về điểm mốc khuôn mặt và dữ liệu được cache. |
| `POST` | `/api/v1/tools/image/passport-photo/generate` | Giai đoạn 2: Cắt, đổi kích thước và xếp ô bằng phân tích được cache. Không chạy lại AI. |
| `POST` | `/api/v1/tools/pdf/pdf-to-image/preview` | Tạo bản xem trước của một trang PDF cụ thể |
| `POST` | `/api/v1/tools/pdf/pdf-to-jpg/info` | Lấy metadata PDF cho cấu hình JPG chuyên biệt |
| `POST` | `/api/v1/tools/pdf/pdf-to-jpg/preview` | Tạo bản xem trước trang PDF cấu hình JPG |
| `POST` | `/api/v1/tools/pdf/pdf-to-png/info` | Lấy metadata PDF cho cấu hình PNG chuyên biệt |
| `POST` | `/api/v1/tools/pdf/pdf-to-png/preview` | Tạo bản xem trước trang PDF cấu hình PNG |
| `POST` | `/api/v1/tools/pdf/pdf-to-tiff/info` | Lấy metadata PDF cho cấu hình TIFF chuyên biệt |
| `POST` | `/api/v1/tools/pdf/pdf-to-tiff/preview` | Tạo bản xem trước trang PDF cấu hình TIFF |
| `POST` | `/api/v1/tools/image/svg-to-raster/batch` | Chuyển đổi hàng loạt nhiều SVG sang raster |
| `POST` | `/api/v1/tools/image/image-enhancement/analyze` | Phân tích chất lượng ảnh và trả về đề xuất nâng cao |
| `POST` | `/api/v1/tools/image/optimize-for-web/preview` | Bản xem trước nhẹ để tinh chỉnh tham số trực tiếp. Trả về ảnh được tối ưu kèm header kích thước. |
Áp dụng một công cụ hỗ trợ hàng loạt tổng quát cho nhiều tệp cùng lúc. Trả về một kho lưu trữ ZIP. Các route đa tệp hoặc nhiều bước tùy chỉnh, chẳng hạn ký PDF và các route cấu hình PDF-sang-ảnh, dùng hợp đồng endpoint riêng thay vì route `/batch` tổng quát.
Công cụ `ocr-pdf` hỗ trợ route `/batch` tổng quát này.
curl -X POST http://localhost:1349/api/v1/tools/image/compress/batch \
-H "Authorization: Bearer <token>"\
-F "files=@a.jpg"\
-F "files=@b.jpg"\
-F "files=@c.jpg"\
-F 'settings={"quality":80}'
```
Độ đồng thời được kiểm soát bởi `CONCURRENT_JOBS` (mặc định: tự động phát hiện từ số lõi CPU). `MAX_BATCH_SIZE` giới hạn số tệp mỗi lô (mặc định: 100; đặt 0 để không giới hạn).
## Pipeline {#pipelines}
### Thực thi một pipeline {#execute-a-pipeline}
```bash
# Single file
curl -X POST http://localhost:1349/api/v1/pipeline/execute \
Đầu ra của mỗi bước là đầu vào của bước tiếp theo. Pipeline mặc định cho phép 20 bước, có thể cấu hình qua `MAX_PIPELINE_STEPS`. Đặt `MAX_PIPELINE_STEPS=0` để bỏ giới hạn.
### Lưu và quản lý pipeline {#save-and-manage-pipelines}
| Phương thức | Đường dẫn | Mô tả |
|--------|------|-------------|
| `POST` | `/api/v1/pipeline/save` | Lưu một pipeline có tên (`name`, `description`, `steps[]`) |
| `GET` | `/api/v1/pipeline/list` | Liệt kê pipeline đã lưu (admin thấy tất cả; người dùng thấy của riêng mình) |
| `GET` | `/api/v1/pipeline/tools` | Liệt kê các ID công cụ hợp lệ cho các bước pipeline |
## Theo dõi tiến trình {#progress-tracking}
Các tác vụ chạy lâu, công cụ được xếp hàng, tác vụ hàng loạt và pipeline phát tiến trình theo thời gian thực qua Server-Sent Events. Luồng tiến trình là công khai và được khóa theo ID tác vụ, nên client không cần gửi header Authorization để đọc.
```bash
# Connect to the SSE stream (jobId is in the JSON response body from the tool endpoint)
| `DELETE` | `/api/v1/files` | Xóa hàng loạt tệp và chuỗi phiên bản của chúng (thân: `{ ids: [...] }`) |
| `POST` | `/api/v1/fetch-urls` | Tải URL từ xa vào không gian làm việc cho các lần nhập dựa trên URL |
| `POST` | `/api/v1/preview` | Tạo bản xem trước WebP tương thích trình duyệt (cho định dạng HEIC/HEIF/RAW) |
| `GET` | `/api/v1/files/:id/preview` | Stream bản xem trước tương thích trình duyệt được cache hoặc tạo mới cho một tệp PDF, tài liệu văn phòng, video hoặc âm thanh đã lưu |
| `POST` | `/api/v1/preview/generate` | Tạo bản xem trước MP4 hoặc MP3 theo yêu cầu cho một tệp phương tiện đã tải lên mà không cần lưu trước |
| `GET` | `/api/v1/download/:jobId/:filename` | Tải một tệp đã xử lý từ không gian làm việc |
Để tự động lưu kết quả công cụ vào thư viện, hãy đưa vào `fileId` làm một trường form multipart tham chiếu đến một tệp có sẵn trong thư viện. Kết quả đã xử lý sẽ được lưu thành phiên bản mới.
## Quản lý khóa API {#api-key-management}
| Phương thức | Đường dẫn | Quyền truy cập | Mô tả |
|--------|------|--------|-------------|
| `POST` | `/api/v1/api-keys` | Xác thực | Tạo khóa mới - chỉ hiển thị một lần |
| `GET` | `/api/v1/api-keys` | Xác thực | Liệt kê khóa (name, id, lastUsedAt - không phải khóa thô) |
| `PUT` | `/api/v1/teams/:id` | Admin (`teams:manage`) | Đổi tên nhóm |
| `DELETE` | `/api/v1/teams/:id` | Admin (`teams:manage`) | Xóa nhóm (không thể xóa nhóm mặc định hoặc nhóm có thành viên) |
## Cài đặt {#settings}
Cấu hình khóa-giá trị lúc chạy (bất kỳ người dùng đã xác thực nào cũng đọc được, chỉ admin ghi được).
| Phương thức | Đường dẫn | Mô tả |
|--------|------|-------------|
| `GET` | `/api/v1/settings` | Lấy tất cả cài đặt |
| `PUT` | `/api/v1/settings` | Cập nhật hàng loạt cài đặt (thân JSON với các cặp khóa-giá trị) |
| `GET` | `/api/v1/settings/:key` | Lấy một cài đặt cụ thể theo khóa |
Các khóa đã biết: `disabledTools` (mảng JSON gồm các ID công cụ), `enableExperimentalTools` (chuỗi bool), `loginAttemptLimit` (số).
## Tùy chọn {#preferences}
Tùy chọn theo từng người dùng tách biệt với cài đặt instance. Bất kỳ người dùng đã xác thực nào cũng có thể đọc và cập nhật bản đồ tùy chọn của riêng mình.
| Phương thức | Đường dẫn | Mô tả |
|--------|------|-------------|
| `GET` | `/api/v1/preferences` | Lấy tùy chọn của người dùng hiện tại dưới dạng `{ "preferences": { ... } }` |
| `PUT` | `/api/v1/preferences` | Chèn/cập nhật một hoặc nhiều khóa tùy chọn cho người dùng hiện tại |
## Vai trò {#roles}
Quản lý vai trò tùy chỉnh với quyền hạn chi tiết.
| Phương thức | Đường dẫn | Quyền truy cập | Mô tả |
|--------|------|--------|-------------|
| `GET` | `/api/v1/roles` | Admin (`audit:read`) | Liệt kê tất cả vai trò kèm số người dùng |
| `POST` | `/api/v1/roles` | Admin (`security:manage`) | Tạo một vai trò tùy chỉnh (`name`, `description`, `permissions`) |
| `PUT` | `/api/v1/roles/:id` | Admin (`security:manage`) | Cập nhật một vai trò tùy chỉnh (không thể sửa vai trò tích hợp sẵn) |
| `DELETE` | `/api/v1/roles/:id` | Admin (`security:manage`) | Xóa một vai trò tùy chỉnh (không thể xóa vai trò tích hợp sẵn; người dùng bị ảnh hưởng trở về vai trò `user`) |
Các quyền hạn có sẵn (17): `tools:use`, `files:own`, `files:all`, `apikeys:own`, `apikeys:all`, `pipelines:own`, `pipelines:all`, `settings:read`, `settings:write`, `users:manage`, `teams:manage`, `features:manage`, `system:health`, `audit:read`, `compliance:manage`, `webhooks:manage`, `security:manage`.
## Nhật ký kiểm toán {#audit-log}
Endpoint chỉ dành cho admin để xem lại các hành động liên quan đến bảo mật.
| Phương thức | Đường dẫn | Quyền truy cập | Mô tả |
|--------|------|--------|-------------|
| `GET` | `/api/v1/audit-log` | Admin (`audit:read`) | Nhật ký kiểm toán phân trang với bộ lọc tùy chọn |
| `action` | Lọc theo loại hành động (ví dụ `ROLE_CREATED`, `ROLE_DELETED`) |
| `ip` | Lọc theo địa chỉ IP nguồn |
| `from` | Lọc các mục sau ngày ISO 8601 này |
| `to` | Lọc các mục trước ngày ISO 8601 này |
## Phân tích {#analytics}
| Phương thức | Đường dẫn | Quyền truy cập | Mô tả |
|--------|------|--------|-------------|
| `GET` | `/api/v1/config/analytics` | Công khai | Lấy cấu hình phân tích có hiệu lực (khóa PostHog, Sentry DSN, tỷ lệ lấy mẫu). Khóa, DSN và ID instance để trống khi phân tích bị tắt, dù từ việc nướng lúc biên dịch hay từ cài đặt `analyticsEnabled` của instance. |
| `POST` | `/api/v1/feedback` | Xác thực | Gửi phản hồi rõ ràng của người dùng đến dự án PostHog đã cấu hình dưới dạng `feedback_submitted`. Route tuân thủ cổng phân tích, giới hạn tốc độ gửi, loại bỏ các trường liên hệ trừ khi `contactOk` là true, và không bao giờ nhận nội dung tệp, tên tệp, đường dẫn tải lên hoặc văn bản lỗi riêng tư thô. Khi phân tích bị tắt, nó trả về `{ "ok": true, "accepted": false }`. |
| `PUT` | `/api/v1/settings` | Admin (`settings:write`) | Đặt tùy chọn từ chối trên toàn instance. Gửi một thân JSON `{ "analyticsEnabled": "false" }` để tắt phân tích cho tất cả mọi người, hoặc `"true"` để bật lại. |
## Tính năng / Bundle AI {#features-ai-bundles}
Quản lý các bundle tính năng AI (cài đặt/gỡ cài đặt các gói mô hình AI trong môi trường Docker). Ưu tiên endpoint cài đặt ở cấp công cụ khi bật một công cụ từ tự động hóa tùy chỉnh: một số công cụ AI cần nhiều hơn một bundle dùng chung, và endpoint này bỏ qua các bundle đã cài đặt trong khi chỉ xếp hàng những bundle còn thiếu.
OCR là một cải tiến tùy chọn thay vì phụ thuộc cứng. Cấp `fast` Tesseract của nó hoạt động mà không cần gói; `POST /api/v1/admin/features/ocr/install` cài đặt gói RapidOCR đã ký cho `balanced` và `best` trên Linux amd64 hoặc arm64. Thời gian chạy OCR chính xác sử dụng CPU trên máy chủ chỉ dành cho CPU và NVIDIA, đồng thời yêu cầu ít nhất 4 GiB bộ nhớ hiệu dụng (giới hạn vùng chứa cgroup được định cấu hình, nếu không thì bộ nhớ máy chủ). SnapOtter báo cáo lý do tương thích `requiredMemoryBytes`, `effectiveMemoryBytes` và `insufficient-memory`, đồng thời từ chối cài đặt không tương thích trước khi tải xuống. Yêu cầu bộ nhớ này không áp dụng cho `fast`. Gói này có khoảng 208-234 MiB để tải xuống và 409-488 MiB được cài đặt, tùy thuộc vào mục tiêu; chỉ mục đã ký liên kết các kích thước chính xác được thực thi trong quá trình cài đặt.
| Phương thức | Đường dẫn | Quyền truy cập | Mô tả |
|--------|------|--------|-------------|
| `GET` | `/api/v1/features` | Xác thực | Liệt kê tất cả bundle tính năng và trạng thái cài đặt của chúng |
| `POST` | `/api/v1/admin/features/:bundleId/install` | Admin (`features:manage`) | Cài đặt một bundle tính năng (bất đồng bộ, trả về `jobId` để theo dõi tiến trình) |
| `POST` | `/api/v1/admin/tools/:toolId/features/install` | Admin (`features:manage`) | Cài đặt mọi bundle mà một công cụ cần; trả về trạng thái đã xếp hàng/đã bỏ qua theo từng bundle |
| `POST` | `/api/v1/admin/features/:bundleId/uninstall` | Admin (`features:manage`) | Gỡ cài đặt một bundle tính năng và dọn dẹp các tệp mô hình |
| `GET` | `/api/v1/admin/features/disk-usage` | Admin (`features:manage`) | Lấy tổng dung lượng đĩa của các mô hình AI |
| `POST` | `/api/v1/admin/features/import` | Quản trị viên (`features:manage`) | Nhập gói AI kế thừa (`file`) hoặc bản phát hành OCR ngoại tuyến đã ký (`index` cộng với `archive`) |
Quá trình nhập OCR được air-gapped phải bao gồm `ocr-runtime-index.json` đã ký của bản phát hành và kho lưu trữ nền tảng phù hợp. SnapOtter áp dụng cùng chữ ký Ed25519, hàm băm giả, khả năng tương thích, trích xuất và kiểm tra khói được sử dụng trong quá trình cài đặt trực tuyến:
```bash
curl -X POST http://localhost:1349/api/v1/admin/features/import \
-H "Authorization: Bearer <admin-token>"\
-F "index=@ocr-runtime-index.json"\
-F "archive=@ocr-linux-amd64-cpu-py312.tar.gz"
```
Sử dụng kho lưu trữ `linux-arm64-cpu-py311` trên arm64. Một tạo phẩm đã được ký cho một mục tiêu khác sẽ bị từ chối thay vì được cài đặt.