内容

发布预检

对一份文案 + 媒体做逐平台、逐账号的预检,不写库、不外发:文本长度、媒体规格、账号授权状态、24 小时频控、TikTok / YouTube 必填项。口径与真实发布完全一致 —— ok=true 才值得走发布流程。手动渠道只给 warning,不阻断。

POST/api/v1/posts/precheck
posts: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 匹配,码表见 错误码。

状态码可能的错误码
400invalid_input
401unauthenticated
403forbidden / workspace_not_found
404not_found
429rate_limited
500internal

示例

请求
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"
  }
}