PixMind Docs
API 接入指南

工具 API

使用现有 API 密钥调用视频净化、分镜提示词和文字转语音。

基础地址为 https://aihub-admin.aimix.pro/api-platform/v1,请求头使用 Authorization: Bearer YOUR_API_KEY。视频工具需要密钥的视频权限,TTS 需要音频权限;原有不限制权限的密钥可直接调用。网站积分与 API 积分使用独立余额。

工具创建接口查询接口计费单位
去字幕 / 指定区域去水印POST /video/remove-subtitles 或 /video/remove-watermark创建返回的 statusUrl每 30 秒向上取整
视频转提示词POST /video-to-promptGET /tasks/{taskId}每 30 秒向上取整
文字转语音POST /tts/synthesize同步返回每 100 字符向上取整

GET /tools 返回当前配置的 API 单位价格、规格、cleanupAvailability 与 ttsAvailability。可用状态检查配置及价格,不代表实时供应商健康检查。未配置的引擎 / 服务在在线调试中禁用,调用时在扣费前返回 503。原 GET /pricing 保留。视频净化由后端探测真实时长,例如 31 秒按两个单位计费;PRO 按选中矩形尺寸分档,未指定区域时按原视频尺寸分档。微软 TTS 沿用现有零积分规则。

成功响应为 {code:1000,message,data}。同时检查 HTTP 状态与 code。400 表示参数错误,401 为密钥问题,402 为 API 余额不足,403 为权限不足,409 为幂等冲突,429 为限流,503 为服务配置缺失。

视频净化与 TTS 支持可选 Idempotency-Key(1–128 个可打印字符)。同一用户、应用、租户、接口、键及参数,在 24 小时内返回已完成的原响应;参数不一致或原请求仍在执行 / 状态不确定时返回 409。丢失响应后不要自动换键重试付费 POST。视频转提示词保留原有提交行为,不支持这次新增的幂等功能。

本地视频使用临时媒体上传:先获取预签名地址,再 PUT 文件,把返回的 fileUrl 作为 videoUrl。视频净化会将临时素材绑定到任务,现有清理任务处理终态素材及过期未使用上传。

每 5–10 秒查询一次,直到 ready 或 failed。净化接口返回的是作品任务 ID,内部映射到 common_task;查询校验用户、应用与租户归属。查询不会再次扣费。停止客户端轮询不会取消后台任务,可用原任务 ID 继续查询。

const origin = "https://aihub-admin.aimix.pro";
const url = new URL(created.data.statusUrl, origin);
if (url.origin !== origin) throw new Error("Invalid status URL");
for (;;) {
  const response = await fetch(url, {headers: {Authorization: `Bearer ${process.env.PIXMIND_API_KEY}`}});
  const result = await response.json();
  if (!response.ok || result.code !== 1000) throw new Error(result.message);
  if (result.data.status === "failed") throw new Error(result.data.error?.message);
  if (result.data.status === "ready") { console.log(result.data); break; }
  await new Promise(resolve => setTimeout(resolve, 5000));
}
import os, time, requests

headers = {"Authorization": "Bearer " + os.environ["PIXMIND_API_KEY"]}
url = "https://aihub-admin.aimix.pro/api-platform/v1/video/cleanup/tasks/123"
for _ in range(1440):
    response = requests.get(url, headers=headers, timeout=30)
    response.raise_for_status()
    result = response.json()
    if result["code"] != 1000: raise RuntimeError(result["message"])
    task = result["data"]
    if task["status"] == "failed": raise RuntimeError(task["error"]["message"])
    if task["status"] == "ready":
        print(task)
        break
    time.sleep(5)