快速开始

  1. 注册,在控制台获取 API Key(可多个,可禁用/重置)。
  2. 控制台用支付宝充值(最低 ¥50),余额长期有效。
  3. 调用 /api/v1/parse,解析成功才扣费,失败不扣。

鉴权(任选其一):请求头 Authorization: Bearer <KEY>(推荐)或 query 参数 key=<KEY>。

限流:每个 Key 默认 5 次/秒、120 次/分钟,超出返回 42901。相同链接 10 分钟内命中缓存,同样按成功计费。

解析接口

GET POST /api/v1/parse

参数必填说明
url是分享链接,或包含链接的整段分享文案(自动提取)。POST 支持 JSON 或表单。
key否API Key(未使用 Authorization 头时)

返回字段

v2 在原有字段基础上新增 videos / music / text / counts / pack,旧字段全部保留,向下兼容。

{
  "code": 0, "msg": "成功", "request_id": "c1f2…",
  "data": {
    "type": "video",            // video 视频 / images 图集 / live 实况图
    "platform": "douyin",
    "title": "标题", "desc": "描述", "cover": "封面地址",
    "video_url": "无水印视频地址(= videos[0].url)",
    "video_backup": ["备用地址"],
    "images": ["图集图片地址"],
    "live": [{"image": "封面图", "video": "实况短视频"}],
    "author": {"nickname": "", "avatar": "", "id": ""},
    // ↓ v2 新增:按内容分类
    "videos": [{"url": "", "quality": "1080p", "width": 1920, "height": 1080, "ext": "mp4"}],  // 多清晰度,首个为主
    "music": {"url": "", "title": "", "author": "", "cover": "", "duration": 15} ,             // 无背景音乐时为 null
    "text": {"title": "", "desc": "", "tags": ["话题"]},
    "audios": [{"url": "", "ext": "m4a", "abr": 128}],          // 可选参数 mode=audio 只返回音频
    "subtitles": [{"lang": "en", "ext": "vtt", "auto": false, "url": ""}],  // sub_lang=en 过滤
    // 可选参数:quality=max|1080|720|480…  mode=audio|mute  sub_lang=en|all(均不额外计费)
    "counts": {"cover": 1, "video": 1, "music": 0, "text": 1, "images": 0, "live": 0},
    "pack": {"url": "/api/v1/pack/ID?exp=..&sig=..", "expires_at": 1730000000, "count": 4, "files": 4, "max_files": 50}  // 有图集/实况时返回,否则 null
  }
}

直链有防盗链/时效,请尽快下载;失败时 data 为 null。

批量打包下载(免费)

GET data.pack.url(可追加 &sel=0,2,5 只打包选中项,序号按 images 在前、live 在后)→ 直接返回 application/zip 流。

POST /api/v1/pack(需 API Key,不扣费)请求体 {"urls":["图片直链"],"live":[{"image":"","video":""}],"title":"文件名前缀","referer":"可选"} → 返回 {"url","expires_at","count","files"}。

  • 链接带 HMAC 签名,有效期与 PROXY_TTL 相同(默认 1 小时),过期返回 40301。
  • 只允许白名单 CDN 域名;单次最多 50 个文件(实况算 2 个)、总 300MB、单文件 100MB(可配置),超限文件跳过并写入 ZIP 内的 _说明.txt。
  • 流式输出,不落盘;文件名为 序号_标题.扩展名。

批量解析

POST /api/v1/batch body {"urls":["链接1","链接2"],"quality":"可选","async":false},单次最多 20 条。

同步:逐条返回 items[i].code / data,每条独立计费,只扣成功的;汇总 success / failed / cost_li。"async":true:每条建一个异步任务,返回 task_id,结果走 Webhook 或 /api/v1/tasks/{id}。

幂等与限流响应头

POST 请求带 Idempotency-Key: 任意唯一串,24 小时内重放返回首次结果(响应头 Idempotent-Replayed: true),不会重复扣费;同 Key 不同请求体返回 40902,处理中返回 40901。

每个响应带 X-Request-Id;计费接口额外返回 X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset(秒),429 时带 Retry-After。

公开状态:/status 页面、GET /api/v1/status;错误码表:GET /api/v1/errors;按 Key / 平台用量:GET /api/v1/usage?days=30&by=key。

Key 权限与消费上限

控制台可给每个 Key 设权限 parse, batch, tasks, transcript, read(默认全部)、每日消费上限(厘)和 IP 白名单。越权返回 40304,超上限返回 40305。建议线上服务只给 parse,统计脚本只给 read。

错误码

codeHTTP含义扣费
0200成功是
40001400参数错误(缺少 url / 不含链接)否
40101401API Key 缺失、无效或已禁用否
40201402余额不足否
40401404不支持的平台 / 平台已下线否
40303403调用 IP 不在 Key 白名单否
40304403Key 无此接口权限否
40305403Key 今日消费达上限否
40901409同一幂等请求正在处理否
40902409幂等 Key 被用于不同请求否
42901429请求过于频繁(限流)否
50001502解析失败(链接失效/已删除/风控)否

控制台「调用记录」会显示失败原因:不支持 / 需 Cookie / 风控 / 已删除 / 超时 / 签名失效等。

额度查询 / 用量统计(免费)

GET /api/v1/quota → {"balance_li":50000,"balance_yuan":50.0,"price_li":1,"remaining_calls":50000}

GET /api/v1/usage?days=7 → 今日/累计调用、成功、消费,及按天明细。

GET /api/v1/platforms(无需鉴权)→ 平台列表、状态、单价。

金额单位“厘”:1 元 = 1000 厘。

支持平台及状态

加载中…

异步任务 + Webhook

POST /api/v1/tasks body {"kind":"parse"|"transcript","url":"分享链接","webhook_url":"可选"} → 立即返回 {"task_id":"…","status":"queued"}。

GET /api/v1/tasks/{task_id} → status:queued / running / success / failed;成功时 result 与同步接口的 data 相同,cost_li 为实际扣费(失败不扣费)。GET /api/v1/tasks 分页列出自己的任务。

Webhook:任务结束后向 webhook_url(请求里指定,或控制台设置的账户默认地址)发送 POST,body 为 {"event":"task.success|task.failed","task":{…同 GET 返回…}}。非 2xx 或超时按 10s / 1min / 5min / 30min 重试。仅允许公网 http(s) 地址。

验签:请求头 X-Nowm-Timestamp、X-Nowm-Signature: sha256=…,签名 = HMAC_SHA256(webhook_secret, timestamp + "." + 原始 body),密钥在控制台「预警 / Webhook」。建议同时校验时间戳在 5 分钟内。

import hmac, hashlib, time
def verify(secret, headers, raw_body: bytes):
    ts = headers["X-Nowm-Timestamp"]; sig = headers["X-Nowm-Signature"].split("=", 1)[1]
    exp = hmac.new(secret.encode(), ts.encode() + b"." + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(sig, exp) and abs(time.time() - int(ts)) < 300

提取文案(语音转文字)

GET/POST /api/v1/summary AI 摘要(目前免费):传 url,或 title + text(如转写文案);输出语言随 Accept-Language / ?lang=。也可在 /api/v1/parse 加 summary=1。返回 summary、provider、degraded(额度不足时为简版)。

POST /api/v1/transcript body {"url":"分享链接或音视频直链","language":"可选,如 zh / en","webhook_url":"可选"} → 返回 task_id(异步),用 GET /api/v1/tasks/{task_id} 取结果。

流程:先解析分享链接拿到音频/视频 → 下载 → 语音识别。结果字段:text 全文、segments(start/end/text)、duration 秒、language、engine、minutes_billed、platform、title。

计费:按音频分钟,不足 1 分钟按 1 分钟,成功才扣费。单条上限见服务端配置(默认 60 分钟 / 200MB)。

SDK / OpenAPI

OpenAPI 3 规范:/openapi.json,Swagger UI:/swagger(运营方可关闭)。

轻量 SDK(零依赖,见源码 sdk/ 目录):

# Python(sdk/python/nowm.py,仅用标准库)
from nowm import Nowm
c = Nowm("YOUR_KEY", base="https://api.example.com")
d = c.parse("https://x.com/SpaceX/status/1732824684683784516")
print(d["video_url"], d["balance"], d["low_balance"])
t = c.transcript("分享链接", wait=True)       # 异步任务 + 轮询
print(t["result"]["text"])

// JavaScript(sdk/js/nowm.mjs,Node 18+ / 浏览器,基于 fetch)
import { Nowm } from "./nowm.mjs";
const c = new Nowm("YOUR_KEY", { base: "https://api.example.com" });
const d = await c.parse("分享链接");

多语言与多货币

请求头 Accept-Language(或 ?lang=)决定错误信息 msg 的语言,支持 zh-Hans, zh-Hant, en, ja, ko, de, fr, es, pt, ru, ar, hi, id, it,未识别时返回简体中文;code 不随语言变化,请以 code 判断。GET /api/v1/i18n 返回语言列表。

GET /api/v1/fx(免费、无需鉴权)→ 展示汇率(1 CNY = x 外币),支持 CNY, USD, EUR, GBP, JPY, KRW, HKD, AUD,每日更新,可手动覆盖。余额与扣费均按人民币厘结算,仅支持支付宝充值,外币仅为参考换算。

价格

成功解析 ¥0.001 / 次,失败不扣费。按量付费,无月费,余额长期有效。

支付宝充值,最低 ¥50(≈ 50000 次)。个别平台单价以平台表为准。

代码示例

在线调试

登录后自动填充“在线调试”专用 Key(可在控制台禁用/删除)。

// 返回结果