tiktok

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese
Call the TikTok Content Posting API with
curl + jq
. The user's OAuth bearer token is in
$TIKTOK_TOKEN
; every call needs
Authorization: Bearer $TIKTOK_TOKEN
. Base URL:
https://open.tiktokapis.com/v2
.
Responses wrap everything in
{"data":...,"error":{"code","message","log_id"}}
error.code == "ok"
means success; otherwise show
error.message
verbatim.
401
/
access_token_invalid
= re-connect TikTok.
bash
T="https://open.tiktokapis.com/v2"; AUTH="Authorization: Bearer $TIKTOK_TOKEN"
使用
curl + jq
调用TikTok Content Posting API。用户的OAuth bearer token存储在
$TIKTOK_TOKEN
中;每次调用都需要携带
Authorization: Bearer $TIKTOK_TOKEN
请求头。基础URL:
https://open.tiktokapis.com/v2
所有响应都包裹在
{"data":...,"error":{"code","message","log_id"}}
结构中——当
error.code == "ok"
时表示请求成功;否则直接显示
error.message
的内容。若返回
401
/
access_token_invalid
,则需要重新连接TikTok账号。
bash
T="https://open.tiktokapis.com/v2"; AUTH="Authorization: Bearer $TIKTOK_TOKEN"

Profile (account card)

Profile (account card)

curl -sS -H "$AUTH" "$T/user/info/?fields=open_id,display_name,avatar_url"
| jq '.data.user'
undefined
curl -sS -H "$AUTH" "$T/user/info/?fields=open_id,display_name,avatar_url"
| jq '.data.user'
undefined

Upload a video to the user's inbox / drafts (v1)

将视频上传至用户的收件箱/草稿箱(v1版本)

The simplest path is
PULL_FROM_URL
: TikTok fetches the video from a public URL on a verified domain (AceData's
cdn.acedata.cloud
is verified for this app).
bash
VIDEO_URL="https://cdn.acedata.cloud/...mp4"   # must be on a verified domain
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" -d "$(jq -n --arg u "$VIDEO_URL" \
  '{source_info:{source:"PULL_FROM_URL", video_url:$u}}')" \
  "$T/post/publish/inbox/video/init/" | jq '{publish_id: .data.publish_id, error}'
This drops the video into the user's TikTok inbox — they open the TikTok app to add caption / sound / privacy and post. Poll status:
bash
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"publish_id":"PUBLISH_ID"}' "$T/post/publish/status/fetch/" \
  | jq '.data | {status, fail_reason}'
最简单的方式是使用
PULL_FROM_URL
:TikTok会从已验证域名上的公开URL拉取视频(AceData的
cdn.acedata.cloud
已为本应用完成验证)。
bash
VIDEO_URL="https://cdn.acedata.cloud/...mp4"   # must be on a verified domain
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" -d "$(jq -n --arg u "$VIDEO_URL" \
  '{source_info:{source:"PULL_FROM_URL", video_url:$u}}')" \
  "$T/post/publish/inbox/video/init/" | jq '{publish_id: .data.publish_id, error}'
此操作会将视频存入用户的TikTok收件箱——用户需要打开TikTok应用,添加标题、音效、设置隐私权限后发布。轮询上传状态的命令:
bash
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"publish_id":"PUBLISH_ID"}' "$T/post/publish/status/fetch/" \
  | jq '.data | {status, fail_reason}'

Gotchas

注意事项

  • v1 = inbox upload only. True "Direct Post" (set caption + privacy via API, posts immediately) needs the
    video.publish
    scope and a passed Content Posting audit — not available until then. Don't call
    creator_info
    /
    /post/publish/video/init/
    (Direct Post) here; they require that scope.
  • PULL_FROM_URL
    only works from a domain verified in the TikTok developer app. If the video isn't on a verified domain, use the chunked
    FILE_UPLOAD
    flow instead (init → PUT byte ranges → status).
  • Unaudited apps are rate-limited and may restrict visibility to
    SELF_ONLY
    .
  • v1版本仅支持上传至收件箱。真正的“直接发布”(通过API设置标题和隐私权限并立即发布)需要
    video.publish
    权限,且需通过Content Posting审核——目前暂未开放。请勿在此处调用
    creator_info
    /post/publish/video/init/
    (直接发布接口),这些接口需要上述权限。
  • PULL_FROM_URL
    仅支持从TikTok开发者应用中已验证的域名拉取视频。若视频不在已验证域名上,请改用分块的
    FILE_UPLOAD
    流程(初始化→PUT字节范围→查询状态)。
  • 未通过审核的应用会受到速率限制,且可能将可见性限制为
    SELF_ONLY