5154395edb
- 新增 API 参考文档(v0.1.88),覆盖 17 个模块、50+ 端点 - 更新 CHANGELOG,记录 v0.1.77 ~ v0.1.88 的全部变更 - 重点更新:查重 API、订阅 API、标题库 API、配音库 API 变更内容: - 认证 API:7 个端点 - 项目 API:3 个端点 - 任务中心 API:2 个端点 - 素材诊断 API:1 个端点 - 素材库 API:2 个端点 - 素材 API:3 个端点 - 导入/分类任务 API:4 个端点 - 上传 API:3 个端点 - 分片上传 API:4 个端点 - 生成任务 API:3 个端点 - 成片 API:4 个端点 - 标题库 API:5 个端点 - 配音库 API:5 个端点 - 查重 API:5 个端点 - 订阅 API:5 个端点
1689 lines
29 KiB
Markdown
1689 lines
29 KiB
Markdown
# 小虾 SaaS API 参考文档
|
||
|
||
**版本**: v0.1.88
|
||
**更新日期**: 2026-06-29
|
||
**基础 URL**: `/api/v1`
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [认证 (Auth)](#1-认证-auth)
|
||
2. [项目 (Project)](#2-项目-project)
|
||
3. [任务中心 (TaskCenter)](#3-任务中心-taskcenter)
|
||
4. [素材诊断 (AssetDiagnosis)](#4-素材诊断-assetdiagnosis)
|
||
5. [素材库 (AssetLibrary)](#5-素材库-assetlibrary)
|
||
6. [素材 (Asset)](#6-素材-asset)
|
||
7. [导入任务 (IngestJob)](#7-导入任务-ingestjob)
|
||
8. [分类任务 (ClassificationJob)](#8-分类任务-classificationjob)
|
||
9. [上传 (Upload)](#9-上传-upload)
|
||
10. [分片上传 (ChunkedUpload)](#10-分片上传-chunkedupload)
|
||
11. [生成任务 (Generation)](#11-生成任务-generation)
|
||
12. [生成视频 (GeneratedVideo)](#12-生成视频-generatedvideo)
|
||
13. [标题库 (TitleLibrary)](#13-标题库-titlelibrary)
|
||
14. [配音库 (VoiceLibrary)](#14-配音库-voicelibrary)
|
||
15. [查重 (Duplication)](#15-查重-duplication)
|
||
16. [订阅 (Subscription)](#16-订阅-subscription)
|
||
|
||
---
|
||
|
||
## 通用说明
|
||
|
||
### 认证方式
|
||
|
||
除特别说明外,所有 API 端点均需要认证。认证通过以下方式:
|
||
|
||
**请求头**:
|
||
```
|
||
Authorization: Bearer <access_token>
|
||
```
|
||
|
||
获取 access_token 请参见 [登录接口](#post-apiv1autologin)。
|
||
|
||
### 错误响应格式
|
||
|
||
```json
|
||
{
|
||
"detail": "错误描述信息"
|
||
}
|
||
```
|
||
|
||
### HTTP 状态码
|
||
|
||
| 状态码 | 说明 |
|
||
|--------|------|
|
||
| 200 | 请求成功 |
|
||
| 201 | 资源创建成功 |
|
||
| 204 | 请求成功(无返回内容) |
|
||
| 400 | 请求参数错误 |
|
||
| 401 | 未认证或 token 无效 |
|
||
| 403 | 无权限访问 |
|
||
| 404 | 资源不存在 |
|
||
| 409 | 资源冲突 |
|
||
| 413 | 文件过大 |
|
||
| 415 | 不支持的文件类型 |
|
||
| 422 | 请求格式正确但无法处理 |
|
||
| 429 | 配额超限 |
|
||
| 500 | 服务器内部错误 |
|
||
| 503 | 服务暂不可用 |
|
||
|
||
---
|
||
|
||
## 1. 认证 (Auth)
|
||
|
||
**基础路径**: `/api/v1/auth`
|
||
|
||
### POST /register
|
||
|
||
用户注册。
|
||
|
||
**认证**: 否
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"email": "user@example.com",
|
||
"password": "your_password",
|
||
"username": "username",
|
||
"display_name": "显示名称"
|
||
}
|
||
```
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| email | string | 是 | 邮箱地址 |
|
||
| password | string | 是 | 密码(建议至少 8 位) |
|
||
| username | string | 是 | 用户名(唯一) |
|
||
| display_name | string | 否 | 显示名称,默认同 username |
|
||
|
||
**响应** `201 Created`:
|
||
```json
|
||
{
|
||
"user_id": "用户ID",
|
||
"email": "user@example.com",
|
||
"username": "username",
|
||
"display_name": "显示名称",
|
||
"message": "注册成功!"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /login
|
||
|
||
用户登录。
|
||
|
||
**认证**: 否
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"email": "user@example.com",
|
||
"password": "your_password"
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"access_token": "eyJhbGciOiJIUzI1NiIs...",
|
||
"refresh_token": "eyJhbGciOiJIUzI1NiIs...",
|
||
"token_type": "bearer",
|
||
"user_id": "用户ID",
|
||
"email": "user@example.com",
|
||
"username": "username",
|
||
"display_name": "显示名称",
|
||
"expires_in": 3600
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /refresh
|
||
|
||
刷新访问令牌。
|
||
|
||
**认证**: 否
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"refresh_token": "eyJhbGciOiJIUzI1NiIs..."
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`: 同登录响应
|
||
|
||
---
|
||
|
||
### GET /verify-email
|
||
|
||
验证邮箱(通过链接点击)。
|
||
|
||
**认证**: 否
|
||
|
||
**查询参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| token | string | 是 | 邮箱验证 token |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"message": "邮箱验证成功"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /verify-email
|
||
|
||
验证邮箱(通过 API)。
|
||
|
||
**认证**: 否
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"token": "邮箱验证 token"
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"message": "邮箱验证成功"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /password/forgot
|
||
|
||
请求密码重置。
|
||
|
||
**认证**: 否
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"email": "user@example.com"
|
||
}
|
||
```
|
||
|
||
**响应** `202 Accepted`:
|
||
```json
|
||
{
|
||
"message": "如果账户存在,密码重置邮件已发送"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /password/reset
|
||
|
||
重置密码。
|
||
|
||
**认证**: 否
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"token": "密码重置 token",
|
||
"new_password": "new_password123"
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"message": "密码重置成功"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET /me
|
||
|
||
获取当前登录用户信息。
|
||
|
||
**认证**: 是
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"user_id": "用户ID",
|
||
"email": "user@example.com",
|
||
"username": "username",
|
||
"display_name": "显示名称",
|
||
"email_verified": true
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 2. 项目 (Project)
|
||
|
||
**基础路径**: `/api/v1/projects`
|
||
|
||
### GET /
|
||
|
||
获取用户的所有项目列表。
|
||
|
||
**认证**: 是
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"items": [
|
||
{
|
||
"id": "项目ID",
|
||
"owner_user_id": "拥有者ID",
|
||
"name": "项目名称",
|
||
"description": "项目描述",
|
||
"shared_users": []
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /
|
||
|
||
创建新项目。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"name": "项目名称",
|
||
"description": "项目描述(可选)"
|
||
}
|
||
```
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| name | string | 是 | 项目名称(1-100字符) |
|
||
| description | string | 否 | 项目描述(最多500字符) |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "项目ID",
|
||
"owner_user_id": "拥有者ID",
|
||
"name": "项目名称",
|
||
"description": "项目描述",
|
||
"shared_users": []
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET /{project_id}
|
||
|
||
获取指定项目详情。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| project_id | string | 项目 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "项目ID",
|
||
"owner_user_id": "拥有者ID",
|
||
"name": "项目名称",
|
||
"description": "项目描述",
|
||
"shared_users": []
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 任务中心 (TaskCenter)
|
||
|
||
**基础路径**: `/api/v1`
|
||
|
||
### GET /projects/{project_id}/tasks
|
||
|
||
获取项目的所有任务(导入任务 + 生成任务)。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| project_id | string | 项目 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"items": [
|
||
{
|
||
"id": "task:任务ID",
|
||
"task_type": "ingest 或 generation",
|
||
"project_id": "项目ID",
|
||
"status": "pending | processing | completed | failed",
|
||
"progress": 0.0,
|
||
"current_step": "当前步骤描述",
|
||
"error_message": "",
|
||
"user_message": "",
|
||
"retryable": false,
|
||
"source_id": "原始任务ID",
|
||
"created_at": "2024-01-01T00:00:00Z",
|
||
"updated_at": "2024-01-01T00:00:00Z"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /tasks/{task_type}/{source_id}/retry
|
||
|
||
重试失败的任务。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| task_type | string | 任务类型:`ingest` 或 `generation` |
|
||
| source_id | string | 原始任务 ID |
|
||
|
||
**响应** `200 OK`: 返回重试后的任务信息(同上)
|
||
|
||
---
|
||
|
||
## 4. 素材诊断 (AssetDiagnosis)
|
||
|
||
**基础路径**: `/api/v1`
|
||
|
||
### GET /projects/{project_id}/asset-diagnosis
|
||
|
||
获取项目的素材健康度诊断。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| project_id | string | 项目 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"project_id": "项目ID",
|
||
"readiness_score": 75,
|
||
"readiness_label": "素材充足",
|
||
"total_assets": 10,
|
||
"ready_assets": 8,
|
||
"video_assets": 5,
|
||
"image_assets": 2,
|
||
"voice_assets": 1,
|
||
"total_duration_seconds": 120.5,
|
||
"estimated_video_count": 3,
|
||
"used_assets": 2,
|
||
"unused_assets": 6,
|
||
"pending_review_assets": 0,
|
||
"smart_views": [
|
||
{
|
||
"key": "recommended",
|
||
"label": "推荐素材",
|
||
"count": 5,
|
||
"description": "已导入完成、可参与生成的视频素材"
|
||
}
|
||
],
|
||
"gaps": [
|
||
{
|
||
"key": "missing_voice",
|
||
"severity": "info",
|
||
"message": "暂未配置配音素材",
|
||
"recommendation": "如果本项目需要口播/旁白,请上传配音素材"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 素材库 (AssetLibrary)
|
||
|
||
**基础路径**: `/api/v1/asset-libraries`
|
||
|
||
### GET /
|
||
|
||
获取素材库列表。
|
||
|
||
**认证**: 是
|
||
|
||
**查询参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| project_id | string | 否 | 按项目 ID 筛选 |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"items": [
|
||
{
|
||
"id": "素材库ID",
|
||
"project_id": "项目ID",
|
||
"name": "素材库名称",
|
||
"kind": "video | voice | image",
|
||
"asset_count": 10,
|
||
"total_size": 104857600
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /
|
||
|
||
创建素材库。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"project_id": "项目ID",
|
||
"name": "素材库名称",
|
||
"kind": "video"
|
||
}
|
||
```
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| project_id | string | 是 | 所属项目 ID |
|
||
| name | string | 是 | 素材库名称(1-100字符) |
|
||
| kind | string | 是 | 类型:`video`、`voice` 或 `image` |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "素材库ID",
|
||
"project_id": "项目ID",
|
||
"name": "素材库名称",
|
||
"kind": "video",
|
||
"asset_count": 0,
|
||
"total_size": 0
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 素材 (Asset)
|
||
|
||
**基础路径**: `/api/v1/assets`
|
||
|
||
### GET /
|
||
|
||
获取素材列表。
|
||
|
||
**认证**: 是
|
||
|
||
**查询参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| library_id | string | 是 | 素材库 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"items": [
|
||
{
|
||
"id": "素材ID",
|
||
"project_id": "项目ID",
|
||
"library_id": "素材库ID",
|
||
"name": "素材名称.mp4",
|
||
"storage_key": "uploads/xxx/素材名称.mp4",
|
||
"mime_type": "video/mp4",
|
||
"metadata": {},
|
||
"file_size": 10485760,
|
||
"thumbnail_url": "https://...",
|
||
"duration": 120.5,
|
||
"width": 1920,
|
||
"height": 1080,
|
||
"fps": 30.0,
|
||
"codec": "h264",
|
||
"status": "ready",
|
||
"classification_status": "completed",
|
||
"quality_score": 85.0,
|
||
"uploaded_by_user_id": "用户ID"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /
|
||
|
||
创建素材记录(通常由上传流程自动调用)。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"project_id": "项目ID",
|
||
"library_id": "素材库ID",
|
||
"name": "素材名称.mp4",
|
||
"storage_key": "uploads/xxx/素材名称.mp4",
|
||
"mime_type": "video/mp4",
|
||
"metadata": {},
|
||
"file_size": 10485760,
|
||
"thumbnail_url": "https://...",
|
||
"duration": 120.5,
|
||
"width": 1920,
|
||
"height": 1080,
|
||
"fps": 30.0,
|
||
"codec": "h264",
|
||
"status": "uploading",
|
||
"classification_status": "pending",
|
||
"quality_score": 85.0
|
||
}
|
||
```
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| project_id | string | 是 | 项目 ID |
|
||
| library_id | string | 是 | 素材库 ID |
|
||
| name | string | 是 | 素材名称(1-100字符) |
|
||
| storage_key | string | 是 | 存储路径 |
|
||
| mime_type | string | 是 | MIME 类型 |
|
||
| metadata | object | 否 | 元数据 |
|
||
| file_size | integer | 否 | 文件大小(字节) |
|
||
| thumbnail_url | string | 否 | 缩略图 URL |
|
||
| duration | float | 否 | 时长(秒) |
|
||
| width | integer | 否 | 宽度 |
|
||
| height | integer | 否 | 高度 |
|
||
| fps | float | 否 | 帧率 |
|
||
| codec | string | 否 | 编码格式 |
|
||
| status | string | 否 | 状态(默认 uploading) |
|
||
| classification_status | string | 否 | 分类状态(默认 pending) |
|
||
| quality_score | float | 否 | 质量分数(0-100) |
|
||
|
||
**响应** `200 OK`: 返回创建的素材对象
|
||
|
||
---
|
||
|
||
### PATCH /{asset_id}/review
|
||
|
||
更新素材审核状态。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| asset_id | string | 素材 ID |
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"review_status": "pending_review | approved | rejected"
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`: 返回更新的素材对象
|
||
|
||
---
|
||
|
||
## 7. 导入任务 (IngestJob)
|
||
|
||
**基础路径**: `/api/v1/ingest-jobs`
|
||
|
||
### GET /{job_id}
|
||
|
||
获取导入任务详情。
|
||
|
||
**认证**: 否(内部 API)
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| job_id | string | 任务 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "任务ID",
|
||
"project_id": "项目ID",
|
||
"library_id": "素材库ID",
|
||
"storage_key": "uploads/xxx/file.mp4",
|
||
"status": "completed",
|
||
"error_message": "",
|
||
"result_asset_id": "素材ID"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /
|
||
|
||
提交新的导入任务。
|
||
|
||
**认证**: 否(内部 API)
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"project_id": "项目ID",
|
||
"library_id": "素材库ID",
|
||
"storage_key": "uploads/xxx/file.mp4"
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`: 返回创建的任务对象
|
||
|
||
---
|
||
|
||
## 8. 分类任务 (ClassificationJob)
|
||
|
||
**基础路径**: `/api/v1/classification-jobs`
|
||
|
||
### GET /{job_id}
|
||
|
||
获取分类任务详情。
|
||
|
||
**认证**: 否(内部 API)
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| job_id | string | 任务 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "任务ID",
|
||
"project_id": "项目ID",
|
||
"asset_id": "素材ID",
|
||
"status": "completed",
|
||
"classification": "video",
|
||
"confidence": 0.95,
|
||
"error_message": ""
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /
|
||
|
||
提交新的分类任务。
|
||
|
||
**认证**: 否(内部 API)
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"project_id": "项目ID",
|
||
"asset_id": "素材ID"
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`: 返回创建的任务对象
|
||
|
||
---
|
||
|
||
## 9. 上传 (Upload)
|
||
|
||
**基础路径**: `/api/v1/upload`
|
||
|
||
### POST /direct/prepare
|
||
|
||
准备直传 OSS(获取表单签名)。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"project_id": "项目ID",
|
||
"library_id": "素材库ID",
|
||
"filename": "video.mp4",
|
||
"content_type": "video/mp4",
|
||
"file_size": 104857600
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"upload_url": "https://oss.example.com/...",
|
||
"method": "POST",
|
||
"storage_key": "uploads/xxx/video.mp4",
|
||
"expires_at": "2024-01-01T12:00:00Z",
|
||
"fields": {
|
||
"OSSAccessKeyId": "...",
|
||
"policy": "...",
|
||
"signature": "...",
|
||
"key": "uploads/xxx/video.mp4"
|
||
},
|
||
"max_size_bytes": 104857600
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /direct/complete
|
||
|
||
确认直传完成并创建导入任务。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"project_id": "项目ID",
|
||
"library_id": "素材库ID",
|
||
"storage_key": "uploads/xxx/video.mp4"
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"storage_key": "uploads/xxx/video.mp4",
|
||
"ingest_job_id": "导入任务ID"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /
|
||
|
||
上传素材文件(multipart/form-data)。
|
||
|
||
**认证**: 是
|
||
|
||
**表单字段**:
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| project_id | string | 是 | 项目 ID |
|
||
| library_id | string | 是 | 素材库 ID |
|
||
| file | file | 是 | 上传的文件 |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"storage_key": "uploads/xxx/video.mp4",
|
||
"ingest_job_id": "导入任务ID",
|
||
"url": "https://oss.example.com/uploads/xxx/video.mp4"
|
||
}
|
||
```
|
||
|
||
**支持的文件类型**:
|
||
- 视频: `video/mp4`, `video/mpeg`, `video/quicktime`, `video/x-msvideo`, `video/webm`, `video/x-matroska`, `video/3gpp`
|
||
- 音频: `audio/mpeg`, `audio/wav`, `audio/ogg`, `audio/flac`, `audio/aac`, `audio/mp3`, `audio/x-m4a`
|
||
- 图片: `image/jpeg`, `image/png`, `image/gif`, `image/webp`, `image/bmp`, `image/svg+xml`, `image/tiff`
|
||
|
||
---
|
||
|
||
## 10. 分片上传 (ChunkedUpload)
|
||
|
||
**基础路径**: `/api/v1/upload/chunk`
|
||
|
||
适用于大文件上传(最大 2GB)。
|
||
|
||
### POST /init
|
||
|
||
初始化分片上传。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"filename": "large_video.mp4",
|
||
"file_size": 1073741824,
|
||
"total_chunks": 200,
|
||
"content_type": "video/mp4",
|
||
"project_id": "项目ID",
|
||
"library_id": "素材库ID"
|
||
}
|
||
```
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| filename | string | 是 | 文件名(1-255字符) |
|
||
| file_size | integer | 是 | 文件大小(最大 2GB) |
|
||
| total_chunks | integer | 是 | 分片总数 |
|
||
| content_type | string | 否 | 文件 MIME 类型 |
|
||
| project_id | string | 是 | 项目 ID |
|
||
| library_id | string | 是 | 素材库 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"upload_id": "上传ID",
|
||
"chunk_size": 5242880,
|
||
"total_chunks": 200,
|
||
"filename": "large_video.mp4",
|
||
"expires_at": "2024-01-02T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /{upload_id}/{chunk_index}
|
||
|
||
上传单个分片。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| upload_id | string | 上传 ID |
|
||
| chunk_index | integer | 分片索引(从 0 开始) |
|
||
|
||
**请求体**: 二进制文件数据
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"message": "Chunk uploaded successfully",
|
||
"chunk_index": 0,
|
||
"uploaded_chunks": 1,
|
||
"total_chunks": 200
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET /{upload_id}/status
|
||
|
||
获取上传状态(支持断点续传)。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| upload_id | string | 上传 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"upload_id": "上传ID",
|
||
"filename": "large_video.mp4",
|
||
"file_size": 1073741824,
|
||
"total_chunks": 200,
|
||
"uploaded_chunks": [0, 1, 2, 3],
|
||
"status": "uploading",
|
||
"created_at": "2024-01-01T00:00:00Z",
|
||
"expires_at": "2024-01-02T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /{upload_id}/complete
|
||
|
||
完成分片上传,合并文件并创建导入任务。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| upload_id | string | 上传 ID |
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"project_id": "项目ID",
|
||
"library_id": "素材库ID"
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"storage_key": "uploads/xxx/large_video.mp4",
|
||
"ingest_job_id": "导入任务ID",
|
||
"url": "https://oss.example.com/uploads/xxx/large_video.mp4"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 11. 生成任务 (Generation)
|
||
|
||
**基础路径**: `/api/v1/generation`
|
||
|
||
### POST /tasks
|
||
|
||
创建视频生成任务。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"project_id": "项目ID",
|
||
"asset_library_id": "素材库ID",
|
||
"strategy_id": "",
|
||
"voice_library_id": ""
|
||
}
|
||
```
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| project_id | string | 是 | 项目 ID |
|
||
| asset_library_id | string | 是 | 素材库 ID |
|
||
| strategy_id | string | 否 | 生成策略 ID |
|
||
| voice_library_id | string | 否 | 配音库 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "任务ID",
|
||
"project_id": "项目ID",
|
||
"asset_library_id": "素材库ID",
|
||
"strategy_id": "",
|
||
"voice_library_id": "",
|
||
"status": "pending",
|
||
"progress": 0.0,
|
||
"result_count": 0,
|
||
"error_message": ""
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET /tasks/{task_id}
|
||
|
||
获取生成任务详情。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| task_id | string | 任务 ID |
|
||
|
||
**响应** `200 OK`: 返回任务详情(同上)
|
||
|
||
---
|
||
|
||
### GET /tasks/{task_id}/results
|
||
|
||
获取生成任务的成片列表。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| task_id | string | 任务 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"items": [
|
||
{
|
||
"id": "成片ID",
|
||
"project_id": "项目ID",
|
||
"generation_task_id": "任务ID",
|
||
"name": "成片名称.mp4",
|
||
"file_url": "uploads/xxx/output.mp4",
|
||
"file_size": 5242880,
|
||
"duration": 30.0,
|
||
"thumbnail_url": "https://...",
|
||
"width": 1920,
|
||
"height": 1080,
|
||
"fps": 30.0,
|
||
"status": "completed",
|
||
"review_status": "pending_review",
|
||
"generation_params": {},
|
||
"download_url": "https://..."
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 12. 生成视频 (GeneratedVideo)
|
||
|
||
**基础路径**: `/api/v1/generated-videos`
|
||
|
||
### GET /
|
||
|
||
获取成片列表。
|
||
|
||
**认证**: 是
|
||
|
||
**查询参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| project_id | string | 否 | 按项目 ID 筛选 |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"items": [
|
||
{
|
||
"id": "成片ID",
|
||
"project_id": "项目ID",
|
||
"generation_task_id": "任务ID",
|
||
"name": "成片名称.mp4",
|
||
"file_url": "uploads/xxx/output.mp4",
|
||
"file_size": 5242880,
|
||
"duration": 30.0,
|
||
"thumbnail_url": "https://...",
|
||
"width": 1920,
|
||
"height": 1080,
|
||
"fps": 30.0,
|
||
"status": "completed",
|
||
"review_status": "pending_review",
|
||
"generation_params": {},
|
||
"download_url": "https://..."
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET /{video_id}
|
||
|
||
获取成片详情。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| video_id | string | 成片 ID |
|
||
|
||
**响应** `200 OK`: 返回成片详情
|
||
|
||
---
|
||
|
||
### PATCH /{video_id}/review
|
||
|
||
更新成片审核状态。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| video_id | string | 成片 ID |
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"review_status": "pending_review | approved | rejected"
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`: 返回更新后的成片对象
|
||
|
||
---
|
||
|
||
### GET /{video_id}/download-url
|
||
|
||
获取成片下载链接。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| video_id | string | 成片 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"video_id": "成片ID",
|
||
"download_url": "https://oss.example.com/..."
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 13. 标题库 (TitleLibrary)
|
||
|
||
**基础路径**: `/api/v1/titles`
|
||
|
||
### GET /
|
||
|
||
获取标题列表。
|
||
|
||
**认证**: 是
|
||
|
||
**查询参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| category | string | 否 | 按分类筛选 |
|
||
| skip | integer | 否 | 跳过数量(默认 0) |
|
||
| limit | integer | 否 | 返回数量(默认 50,最大 200) |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"items": [
|
||
{
|
||
"id": "标题ID",
|
||
"user_id": "用户ID",
|
||
"name": "标题名称",
|
||
"text": "标题文本内容",
|
||
"category": "default",
|
||
"description": "描述",
|
||
"tags": ["标签1", "标签2"],
|
||
"usage_count": 5,
|
||
"is_active": true,
|
||
"created_at": "2024-01-01T00:00:00Z",
|
||
"updated_at": "2024-01-01T00:00:00Z"
|
||
}
|
||
],
|
||
"total": 100
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET /{title_id}
|
||
|
||
获取标题详情。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| title_id | string | 标题 ID |
|
||
|
||
**响应** `200 OK`: 返回标题详情
|
||
|
||
---
|
||
|
||
### POST /
|
||
|
||
创建标题。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"name": "标题名称",
|
||
"text": "标题文本内容",
|
||
"category": "default",
|
||
"description": "描述",
|
||
"tags": ["标签1", "标签2"]
|
||
}
|
||
```
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| name | string | 是 | 标题名称(1-255字符) |
|
||
| text | string | 是 | 标题文本(1-500字符) |
|
||
| category | string | 否 | 分类(默认 default) |
|
||
| description | string | 否 | 描述 |
|
||
| tags | array | 否 | 标签列表 |
|
||
|
||
**响应** `201 Created`: 返回创建的标题对象
|
||
|
||
**配额限制**:
|
||
- free: 10 条
|
||
- standard: 50 条
|
||
- pro: 200 条
|
||
- enterprise: 无限制
|
||
|
||
---
|
||
|
||
### PUT /{title_id}
|
||
|
||
更新标题。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| title_id | string | 标题 ID |
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"name": "新标题名称",
|
||
"text": "新标题文本",
|
||
"category": "new_category",
|
||
"description": "新描述",
|
||
"tags": ["新标签"]
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`: 返回更新后的标题对象
|
||
|
||
---
|
||
|
||
### DELETE /{title_id}
|
||
|
||
删除标题。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| title_id | string | 标题 ID |
|
||
|
||
**响应** `204 No Content`
|
||
|
||
---
|
||
|
||
## 14. 配音库 (VoiceLibrary)
|
||
|
||
**基础路径**: `/api/v1/voices`
|
||
|
||
### GET /
|
||
|
||
获取配音列表。
|
||
|
||
**认证**: 是
|
||
|
||
**查询参数**:
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| status | string | 否 | 按状态筛选 |
|
||
| skip | integer | 否 | 跳过数量(默认 0) |
|
||
| limit | integer | 否 | 返回数量(默认 50,最大 200) |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"items": [
|
||
{
|
||
"id": "配音ID",
|
||
"user_id": "用户ID",
|
||
"name": "配音名称",
|
||
"text": "配音文本",
|
||
"voice_provider": "elevenlabs",
|
||
"voice_id": "voice_xxx",
|
||
"voice_name": "中文男声",
|
||
"audio_url": "https://...",
|
||
"duration": 10.5,
|
||
"file_size": 102400,
|
||
"status": "completed",
|
||
"project_id": null,
|
||
"tags": ["旁白"],
|
||
"created_at": "2024-01-01T00:00:00Z",
|
||
"updated_at": "2024-01-01T00:00:00Z"
|
||
}
|
||
],
|
||
"total": 20
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET /{voice_id}
|
||
|
||
获取配音详情。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| voice_id | string | 配音 ID |
|
||
|
||
**响应** `200 OK`: 返回配音详情
|
||
|
||
---
|
||
|
||
### POST /
|
||
|
||
创建配音。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"name": "配音名称",
|
||
"text": "配音文本内容",
|
||
"voice_provider": "elevenlabs",
|
||
"voice_id": "voice_xxx",
|
||
"voice_name": "中文男声",
|
||
"audio_url": "https://...",
|
||
"duration": 10.5,
|
||
"file_size": 102400,
|
||
"status": "completed",
|
||
"project_id": null,
|
||
"tags": ["旁白"]
|
||
}
|
||
```
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| name | string | 是 | 配音名称(1-255字符) |
|
||
| text | string | 否 | 配音文本 |
|
||
| voice_provider | string | 否 | 语音服务商 |
|
||
| voice_id | string | 否 | 语音 ID |
|
||
| voice_name | string | 否 | 语音名称 |
|
||
| audio_url | string | 否 | 音频 URL |
|
||
| duration | float | 否 | 时长(秒) |
|
||
| file_size | integer | 否 | 文件大小 |
|
||
| status | string | 否 | 状态(默认 completed) |
|
||
| project_id | string | 否 | 关联项目 ID |
|
||
| tags | array | 否 | 标签列表 |
|
||
|
||
**响应** `201 Created`: 返回创建的配音对象
|
||
|
||
---
|
||
|
||
### PUT /{voice_id}
|
||
|
||
更新配音。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| voice_id | string | 配音 ID |
|
||
|
||
**请求 Body**: 同创建(所有字段可选)
|
||
|
||
**响应** `200 OK`: 返回更新后的配音对象
|
||
|
||
---
|
||
|
||
### DELETE /{voice_id}
|
||
|
||
删除配音。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| voice_id | string | 配音 ID |
|
||
|
||
**响应** `204 No Content`
|
||
|
||
---
|
||
|
||
## 15. 查重 (Duplication)
|
||
|
||
**基础路径**: `/api/v1/duplication`
|
||
|
||
### POST /upload
|
||
|
||
上传视频进行查重检测。
|
||
|
||
**认证**: 是
|
||
|
||
**请求**: multipart/form-data
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| file | file | 是 | 视频文件 |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "查重记录ID",
|
||
"status": "pending",
|
||
"message": "文件 \"video.mp4\" 已上传,正在查重中..."
|
||
}
|
||
```
|
||
|
||
**限制**:
|
||
- 仅支持视频文件: `mp4`, `mpeg`, `mov`, `avi`, `webm`, `mkv`, `3gp`
|
||
- 最大文件大小: 100MB
|
||
|
||
---
|
||
|
||
### GET /records
|
||
|
||
获取查重记录列表。
|
||
|
||
**认证**: 是
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
[
|
||
{
|
||
"id": "记录ID",
|
||
"filename": "video.mp4",
|
||
"file_size": 5242880,
|
||
"duration_seconds": 30.0,
|
||
"status": "completed",
|
||
"duplicate_rate": 0.15,
|
||
"duplicate_count": 2,
|
||
"created_at": "2024-01-01T00:00:00Z",
|
||
"updated_at": "2024-01-01T00:01:00Z"
|
||
}
|
||
]
|
||
```
|
||
|
||
---
|
||
|
||
### GET /records/{record_id}
|
||
|
||
获取查重记录详情(含重复片段)。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| record_id | string | 查重记录 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "记录ID",
|
||
"filename": "video.mp4",
|
||
"file_size": 5242880,
|
||
"duration_seconds": 30.0,
|
||
"status": "completed",
|
||
"duplicate_rate": 0.15,
|
||
"duplicate_count": 2,
|
||
"created_at": "2024-01-01T00:00:00Z",
|
||
"updated_at": "2024-01-01T00:01:00Z",
|
||
"segments": [
|
||
{
|
||
"id": "片段ID",
|
||
"source_start": 5.0,
|
||
"source_end": 10.5,
|
||
"matched_video_id": "视频ID",
|
||
"matched_video_name": "匹配视频名称",
|
||
"matched_start": 0.0,
|
||
"matched_end": 5.5,
|
||
"similarity": 0.95
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### DELETE /records/{record_id}
|
||
|
||
删除查重记录。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| record_id | string | 查重记录 ID |
|
||
|
||
**响应** `204 No Content`
|
||
|
||
---
|
||
|
||
### POST /records/{record_id}/retry
|
||
|
||
重新提交查重。
|
||
|
||
**认证**: 是
|
||
|
||
**路径参数**:
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| record_id | string | 查重记录 ID |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "记录ID",
|
||
"status": "pending",
|
||
"message": "已重新提交查重"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 16. 订阅 (Subscription)
|
||
|
||
**基础路径**: `/api/v1/subscription`
|
||
|
||
### GET /current
|
||
|
||
获取当前订阅信息。
|
||
|
||
**认证**: 是
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"id": "sub-xxx",
|
||
"plan_id": "pro",
|
||
"plan_name": "专业版",
|
||
"status": "active",
|
||
"billing_cycle": "monthly",
|
||
"current_period_start": "2024-01-01T00:00:00Z",
|
||
"current_period_end": "2024-02-01T00:00:00Z",
|
||
"amount": 299.0,
|
||
"auto_renew": true,
|
||
"created_at": "2024-01-01T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET /billing-records
|
||
|
||
获取账单记录列表。
|
||
|
||
**认证**: 是
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
[]
|
||
```
|
||
|
||
---
|
||
|
||
### POST /change-plan
|
||
|
||
变更订阅套餐(升级/降级)。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"target_plan_id": "pro",
|
||
"billing_cycle": "monthly"
|
||
}
|
||
```
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| target_plan_id | string | 是 | 目标套餐: `free`, `standard`, `pro`, `enterprise` |
|
||
| billing_cycle | string | 是 | 计费周期: `monthly`, `yearly` |
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "套餐已成功变更为 专业版",
|
||
"new_subscription": { ... }
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /cancel
|
||
|
||
取消订阅。
|
||
|
||
**认证**: 是
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "订阅已取消,当前周期结束后停止服务"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### POST /toggle-auto-renew
|
||
|
||
切换自动续费。
|
||
|
||
**认证**: 是
|
||
|
||
**请求 Body**:
|
||
```json
|
||
{
|
||
"enabled": false
|
||
}
|
||
```
|
||
|
||
**响应** `200 OK`:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "已关闭自动续费"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 附录 A: 套餐配额
|
||
|
||
| 套餐 | 最大项目数 | 存储空间 | 标题库配额 | 配音库配额 |
|
||
|------|-----------|----------|-----------|-----------|
|
||
| free | 3 | 10 GB | 10 条 | 5 条 |
|
||
| standard | 10 | 50 GB | 50 条 | 20 条 |
|
||
| pro | 无限制 | 100 GB | 200 条 | 100 条 |
|
||
| enterprise | 无限制 | 1000 GB | 无限制 | 无限制 |
|
||
|
||
---
|
||
|
||
## 附录 B: 套餐价格
|
||
|
||
| 套餐 | 月付 | 年付 |
|
||
|------|------|------|
|
||
| free | ¥0 | ¥0 |
|
||
| standard | ¥99 | ¥999 |
|
||
| pro | ¥299 | ¥2999 |
|
||
| enterprise | ¥999 | ¥9999 |
|
||
|
||
---
|
||
|
||
*文档版本: v0.1.88 | 更新于: 2026-06-29*
|