内容
发布预检
对一份文案 + 媒体做逐平台、逐账号的预检,不写库、不外发:文本长度、媒体规格、账号授权状态、24 小时频控、TikTok / YouTube 必填项。口径与真实发布完全一致 —— ok=true 才值得走发布流程。手动渠道只给 warning,不阻断。
POST
/api/v1/posts/precheckposts:read读档限流只读
鉴权与护栏
- 请求头
Authorization: Bearer <长期凭证>,凭证在设置页「接入外部系统 → 长期凭证」签发,见 鉴权与权限。 - 凭证需带 scope
posts:read;签发者在工作区里的角色也要允许该动作。 - 限流:读档,每分钟 60 次(按凭证计),超出回 429 并带
Retry-After。 - 幂等:读端点,无需 Idempotency-Key。
- 只读端点:不写库、不外发。
请求体(application/json)
platformsstring[] (enum: x · youtube · instagram · tiktok · facebook · threads · douyin · xiaohongshu · wechat_mp)必填目标平台,至少一个。
contentstring必填主文案;逐渠道都给了 variants 时可留空。
titlestring可选标题(YouTube 必填)。
variantsobject[] { platform, content?, title? }可选逐平台文案覆写;预检按「覆写 ?? 主文案」量字数。
targetAccountIdsstring[]可选目标账号;不给 = 每平台全部可用账号,上限 20。
mediaobject[] { kind, url, bytes?, durationSec? }可选kind 为 image / video;url 必须是本站对象存储 URL。
tiktokOptionsobject { privacyLevel? }可选发 TikTok 时 privacyLevel 必须由人选定。
threadsOptionsobject { linkAttachment? }可选Threads 纯文字帖的链接卡片计入每帖 5 个链接的上限。
响应
成功返回 HTTP 200,信封为 { data, meta };右侧(窄屏在本页末尾)给出了各状态码的示例。所有错误都是 { error: { code, message, params }, meta },按机器码处理而不是按 message 匹配,码表见 错误码。
| 状态码 | 可能的错误码 |
|---|---|
| 400 | invalid_input |
| 401 | unauthenticated |
| 403 | forbidden / workspace_not_found |
| 404 | not_found |
| 429 | rate_limited |
| 500 | internal |
示例
请求
curl -X POST "https://popkit.loxily.com/api/v1/posts/precheck" \
-H "Authorization: Bearer popkit_it_••••••••" \
-H "Content-Type: application/json" \
-d '{
"platforms": [
"x",
"youtube"
],
"content": "本周更新速览",
"title": "本周更新速览",
"media": [
{
"kind": "video",
"url": "https://storage.googleapis.com/…/weekly.mp4",
"bytes": 48213000,
"durationSec": 62
}
]
}'响应
成功(有阻断项)
{
"data": {
"ok": false,
"platforms": [
{
"platform": "x",
"blocker": null,
"accounts": [
{
"accountId": "acc_01J8XQ5M9V2R",
"handle": "@popkit",
"textMax": 280,
"ok": true,
"error": null,
"warning": null
}
],
"expiredAccounts": []
},
{
"platform": "youtube",
"blocker": "needs_reauth",
"accounts": [],
"expiredAccounts": [
{
"accountId": "acc_01J8Z…",
"handle": "popkit 频道"
}
]
}
]
},
"meta": {
"requestId": "6a1d0c9e-2b7f-4e3a-8c5d-1f0e9b8a7c66"
}
}