API 文档

RESTful JSON 接口。所有付费接口通过 Authorization: Bearer <API_KEY> 鉴权。

基础信息

Base URLhttp://kb.apimar.online
Content-Typeapplication/json
字符编码UTF-8(返回中文不转义)

鉴权

付费接口需在请求头携带用户 API Key,管理接口需携带管理员令牌。

Authorization: Bearer svt_xxxxxxxxxxxxxxxxxxxx
# 也支持:X-API-Key: svt_xxxxxxxxxxxxxxxxxxxx

调用示例

以解析一个视频链接为例(POST /v1/transcribe)。把 YOUR_API_KEY 换成你的密钥。

cURL

curl -X POST http://kb.apimar.online/v1/transcribe \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://v.douyin.com/xxxxx/"}'

Python

import requests

API_BASE = "http://kb.apimar.online"
API_KEY = "YOUR_API_KEY"

resp = requests.post(
    f"{API_BASE}/v1/transcribe",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={"url": "https://v.douyin.com/xxxxx/"},
    timeout=180,
)
data = resp.json()
if resp.ok:
    print("平台:", data["platform"])
    print("文案:", data["transcript"])
    print("本次扣费:", data["billing"]["total_credits"], "积分,余额:", data["balance"])
else:
    print("失败:", data.get("message"), "(stage:", data.get("stage"), ")")

Node.js (v18+,内置 fetch)

const API_BASE = "http://kb.apimar.online";
const API_KEY = "YOUR_API_KEY";

const res = await fetch(`${API_BASE}/v1/transcribe`, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ url: "https://v.douyin.com/xxxxx/" }),
});

const data = await res.json();
if (res.ok) {
  console.log("平台:", data.platform);
  console.log("文案:", data.transcript);
  console.log("扣费:", data.billing.total_credits, "余额:", data.balance);
} else {
  console.error("失败:", data.message, "stage:", data.stage);
}

Node.js (axios)

const axios = require("axios");

const client = axios.create({
  baseURL: "http://kb.apimar.online",
  headers: { Authorization: "Bearer YOUR_API_KEY" },
});

const { data } = await client.post("/v1/transcribe", {
  url: "https://v.douyin.com/xxxxx/",
});
console.log(data.transcript, "| 余额:", data.balance);

兑换卡密 / 查询余额

# 兑换卡密充值
curl -X POST http://kb.apimar.online/v1/redeem \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"code": "SVT-XXXX-XXXX-XXXX"}'

# 查询余额与邀请信息
curl http://kb.apimar.online/v1/balance -H "Authorization: Bearer YOUR_API_KEY"

POST /v1/transcribe 需要 API Key

解析一个视频/图文链接,返回转写正文、结构化报告与计费明细。仅在处理成功时扣费。

请求体

字段类型必填说明
urlstring公开的视频或图文链接
transcribeboolean是否执行转写/识别,默认 true。为 false 时只解析元信息

请求示例

curl -X POST http://kb.apimar.online/v1/transcribe \
  -H "Authorization: Bearer svt_your_key" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://v.douyin.com/xxxxx/"}'

成功响应 200

{
  "url": "https://v.douyin.com/xxxxx/",
  "platform": "抖音",
  "title": "示例标题",
  "author": "作者",
  "publish_time": "2026-01-01 12:00:00",
  "media_url": "https://.../audio.mp3",
  "content_type": "video",          // 或 "image_note"
  "transcript": "校对后的正文…",
  "corrected": true,
  "report_markdown": "# 视频内容解析报告\n…",
  "notes": "",
  "billing": {
    "base_credits": 1,
    "transcribe_tokens": 1200,
    "correction_tokens": 800,
    "vision_tokens": 0,
    "token_credits": 4,
    "total_credits": 5
  },
  "balance": 92
}

GET /v1/balance 需要 API Key

查询当前账户余额。

{ "balance": 92, "name": "alice" }

GET /v1/usage?limit=50 需要 API Key

查询最近的调用流水(含每次的 token 消耗与扣费)。

{ "usage": [ { "url": "...", "status": "success",
    "transcribe_tokens": 1200, "vision_tokens": 0,
    "credits_charged": 5, "balance_after": 92,
    "created_at": 1768500000.0 } ] }

GET /pricing 公开

返回当前计费费率,供客户端展示价格。

GET /health 公开

健康检查,返回当前使用的模型与解析器配置状态。

管理接口

以下接口用 Authorization: Bearer <ADMIN_TOKEN> 鉴权,用于发放密钥与充值。

POST /admin/users 管理员

创建用户并返回其 API Key。请求体:{ "name": "alice", "initial_credits": 100 }

POST /admin/credits 管理员

给指定用户充值。请求体:{ "api_key": "svt_...", "amount": 100 }

计费规则

每次成功解析的扣费 = 保底积分 + token 附加积分(向上取整)

项目费率
保底 / 次1 积分
语音转写2.0 积分 / 1K tokens(模型 gpt-4o-transcribe)
文本纠错1.0 积分 / 1K tokens
图像识别2.0 积分 / 1K tokens(多模态视觉模型)

附加积分公式:ceil(transcribe/1000×费率 + correction/1000×费率 + vision/1000×费率),与保底相加为总扣费。解析、下载或转写失败均不扣费。

错误码

HTTPerror说明
400missing_url请求体缺少 url
401missing_api_key / invalid_api_key未提供或无效的 API Key
402insufficient_credits余额不足以支付保底积分
403forbidden管理员令牌无效
502processing_failed解析/下载/转写失败(不扣费,含 stage 字段)