01 · 快速开始
发起解析请求
在请求头中加入 API Key,并在 JSON 请求体中提交一个公开媒体链接。
curl -X POST https://api.videotool.cc/openapi/parse \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://..."}'02 · 身份验证
使用 API Key 鉴权
接口通过 X-API-Key 请求头认证,每个账号可在控制台查看或更新密钥。
X-API-Key
YOUR_API_KEYAPI Key 应只保存在服务端,不要写入网页 JavaScript、移动端安装包或公开仓库。
03 · 接口说明
当前可用接口
POST
/openapi/parse单链接解析解析一个公开媒体链接
提交一个公开帖子或视频链接。成功获得可用资源后扣减一次额度,其他结果不扣费。
url | string · required | 公开帖子或视频链接 |
04 · 响应结构
成功响应
成功时返回 AjaxResult 包装的 ParseResult,资源按视频、图片、音频和文本分类。
{
"code": 200,
"msg": "操作成功",
"data": {
"resultCode": 0,
"hasResource": true,
"resourceType": 200,
"descList": ["..."],
"imgList": [],
"videoList": [],
"audioList": []
}
}响应字段说明
字段可能因来源平台和资源类型而为空。应先判断 code、data.resultCode 和 data.hasResource,再读取对应资源列表。
code | number | HTTP 业务状态码;200 表示本次请求成功。 |
msg | string | 请求处理提示;失败时包含可供展示的原因。 |
data.resultCode | number | 解析结果码;0 表示解析成功。 |
data.resultMsg | string | null | 解析结果说明;解析成功时通常为 null。 |
data.hasResource | boolean | 是否取得至少一项可用资源;仅为 true 时会扣减一次额度。 |
data.resourceType | number | 资源类型标识,由解析平台返回;应结合资源列表判断实际内容。 |
data.parseBy | number | null | 解析来源或方式标识;仅作展示和诊断,不应作为资源选择依据。 |
data.ffmpegCmd | string | null | 平台要求本地转码时返回的 FFmpeg 命令模板;普通浏览器播放无需执行。 |
data.headers | object | 直接请求原始媒体地址时可能需要附带的请求头;使用 webProxyUrl 时通常无需自行处理。 |
data.canWatchAd | boolean | 是否允许通过广告获取解析权益;开放接口调用方通常无需使用。 |
data.showProxy | boolean | 是否配置普通下载代理;仅与 proxyBaseUrl、普通代理签名配合使用。 |
data.proxyBaseUrl | string | null | 普通下载代理地址,不是 Web 展示代理;Web 页面优先使用 webProxyUrl。 |
data.timestamp | number | 本次解析生成的毫秒时间戳;拼接 Web 代理地址时必传。 |
data.webProxyUrl | string | null | Web 展示代理基础地址;有值时拼接 /res/dl,空值时直接使用资源 URL。 |
data.packageDownloadUrl | string | null | 普通打包下载基础地址;仅用于 /res/zip 和生成包的 /static 路径。 |
data.vipProxyBaseUrl / data.vipDownloadStatus | string | null | VIP 极速下载信息;开放接口普通解析不应依赖这些字段。 |
data.vipPackageDownloadUrl / data.vipPackageDownloadStatus | string | null | VIP 打包下载信息;开放接口普通解析不应依赖这些字段。 |
data.descList[] | string[] | null | 原帖文案、标题或补充描述列表。 |
data.author | string | null | 小红书作者昵称;其他平台或上游未提供时为空。 |
data.publishTime | string | null | 小红书发布时间,格式 yyyy-MM-dd HH:mm:ss;不做时区换算。 |
data.publishTimestamp | number | null | 小红书发布时间戳,单位为秒。 |
data.imgList[].url | string | 图片原始可访问地址;webProxyUrl 为空时可直接展示。 |
data.imgList[].origUrl | string | null | 图片原始来源地址;缺失时通常与 url 相同。 |
data.imgList[].imgHash | string | null | 普通代理图片签名;仅在 webImgHash 缺失时作为兼容回退。 |
data.imgList[].webImgHash | string | null | Web 代理图片签名;与 url、timestamp 一起拼接展示地址。 |
data.imgList[].videoUrl | string | null | 图片条目关联的视频地址,例如图文内容中的视频资源。 |
data.imgList[].videoHash / webVideoHash | string | null | 关联视频的普通 / Web 代理签名;使用规则与图片签名相同。 |
data.videoList[].id | string | null | 视频资源标识,可用于列表渲染或去重。 |
data.videoList[].url | string | 视频原始可访问地址;webProxyUrl 为空时可直接播放。 |
data.videoList[].origUrl | string | null | 视频原始来源地址;缺失时通常与 url 相同。 |
data.videoList[].width / height | string | null | 视频宽高,单位为 px;上游未提供时为空。 |
data.videoList[].webVideoHash | string | null | Web 代理视频签名;缺失时兼容使用 videoHash。 |
data.videoList[].audioUrl | string | null | 与视频分离的音频原始地址,无独立音轨时为空。 |
data.videoList[].webAudioHash | string | null | Web 代理音频签名;缺失时兼容使用 audioHash。 |
data.videoList[].desc | string | null | 该视频资源的补充说明。 |
data.audioList[].url | string | 独立音频原始地址。 |
data.audioList[].origUrl | string | null | 独立音频原始来源地址。 |
05 · 代理地址
使用 Web 展示代理地址
webProxyUrl 有值时,浏览器可将媒体地址转为代理地址,以处理跨域或来源防盗链限制;为空时直接使用资源原始地址。
const data = result.data;
const video = data.videoList[0];
const rawUrl = video.url;
const displayUrl = data.webProxyUrl
? data.webProxyUrl.replace(/\/+$/, '')
+ '/res/dl?url=' + encodeURIComponent(rawUrl)
+ '&hash=' + (video.webVideoHash || video.videoHash)
+ '×tamp=' + data.timestamp
: rawUrl;
// <video src={displayUrl} controls />签名与资源类型规则
图片使用 webImgHash(缺失时兼容 imgHash);视频使用 webVideoHash(缺失时兼容 videoHash);视频音频使用 webAudioHash(缺失时兼容 audioHash)。每次解析都必须使用本次返回的 timestamp 和 hash;不要把 webProxyUrl 用于 /res/zip 打包下载。
06 · 错误处理
业务错误码
| code | 含义 | 扣费 |
|---|---|---|
400 | url 参数为空或格式无效 | 不扣费 |
401 | API Key 缺失、无效或已停用 | 不扣费 |
403 | 剩余调用次数不足 | 不扣费 |
422 | 解析完成但没有可用资源 | 不扣费 |
500 | 解析服务异常 | 不扣费 |
07 · 计费规则
按成功结果计费
1成功并返回可用资源时扣减
0失败、异常或无资源时扣减
当前能力范围
开放接口仅提供 POST /openapi/parse 单链接解析,不提供批量、能力查询、幂等缓存或限流端点。