← 返回目录
📁 API Reference › Accounts › Posts

将公开视频帖子发布到自有账号

此接口可用于将公开视频帖子发布到自有 TikTok 账号。

你需要指定要发布的视频,并可以选择传入视频说明文字,以及是否启用不同形式的用户互动(评论/拼接/合拍)。

如需了解可订阅的帖子发布 Webhook 事件,参见帖子发布事件。若想为你的开发者应用配置 Webhook 回调 URL,需使用 Webhook API 接口 /business/webhook/update/。

注意

  • 为鼓励真实分享,防止滥发帖子,TikTok 限制了通过该接口为每个 TikTok 账号发布视频帖子的数量:每分钟最多发布 6 个视频帖子,每天最多发布 15 个视频帖子。
  • 将视频发布到你的 TikTok 账号后,你可能会发现,在账号主页查看或下载帖子时,其分辨率和比特率与原视频文件相比有所降低。这是因为在视频转码的过程中,设备显示能力和网络状况等因素会导致分辨率和比特率发生变化。

v1.2 与 v1.3 接口对比

下表概述了 v1.2 接口与 v1.3 接口之间的差异。

|变更{30%}|v1.2{35%}|v1.3{35%}|
|---|---|---|
|接口路径| /v1.2/business/videos/publish/| /v1.3/business/video/publish/|
| 新增请求参数 |/|`thumbnail_offset`<br>`is_brand_organic`<br>`is_branded_content`<br>`is_ai_generated`<br>`upload_to_draft`<br>`tto_invite_link` <br>`is_ads_only`<br>`custom_thumbnail_url`<br>`music_sound_info`<br>`music_sound_id`<br>`music_sound_volume`<br>`music_sound_start`<br>`music_sound_end`<br>`video_original_sound_volume`<br>`location_id`<br>`location_name` |

请求

地址 https://business-api.tiktok.com/open_api/v1.3/business/video/publish/

方法 POST

Header

|字段{30%}|类型{15%}|描述{55%}|
|---|---|---|
|Access-Token {必填}|string|经 TikTok 达人授权的访问令牌。<br>若想获取访问令牌,需使用 [/tt_user/oauth2/token/](1833997638479041.html) 接口。 |
|Content-Type {必填}|string|请求信息类型。<br>允许格式:`application/json`。  |

参数

|字段{35%}|类型{10%}| 参数位置{10%}|描述{45%}|
|--- |--- |--- |--- |
| business_id {必填} | string | Body | TikTok 账号的开发者应用唯一识别 ID。<br>需将 [/tt_user/oauth2/token/](1833997638479041.html) 接口返回的 `open_id` 字段值传入本字段。|
| video_url{必填} | string | Body | 用于发布视频内容的可公开访问 HTTP(s) URL,建议 TTL 至少为 30 分钟。<br><br><strong>视频限制</strong>: <ul><li> 音视频内容必须采用 .mp4、.mov 或 .webm 格式。 </li><li> 视频大小上限为 1 GB。 </li><li> 视频时长不得少于 3 秒,不得超过 600 秒。 <ul><li>若想查询允许 TikTok 账号发布的最大视频时长,需使用 [/business/video/settings/](1816387951979521.html) 接口,并查看返回的 `max_video_post_duration_sec`。</li></ul></li><li> 视频高度和宽度不得低于 360 px。</li><li> 视频帧率不得低于 23 FPS,不得高于 60 FPS。</li></ul><strong>示例</strong>:https://www.example.com/tiktok-videos/video.mp4<br><br><p><span style="color:darkred"><b>重要说明</b></span>: <ul><li>自 2023 年 11 月 16 日起,你无法再使用未经验证的视频 URL 发布视频。为确保顺利集成 API,建议你尽快验证 URL 资源的所有权,并指定已手动或自动验证所有权的 URL。<br>若想手动验证 URL 资源的所有权,请按照[管理 URL 资源](https://ads.tiktok.com/marketing_api/docs?id=1769324038780930)中所述的步骤操作。</li><li>2023 年 11 月 16 日之后,如果你想通过 [/business/video/publish/](1762228496095234.html) 接口使用无需验证的测试视频 URL 发布测试视频,可使用[测试 URL ](https://sf16-va.tiktokcdn.com/obj/eden-va2/uvpapzpbxjH-aulauvJ-WV[[/ljhwZthlaukjlkulzlp/3min.mp4)`https://sf16-va.tiktokcdn.com/obj/eden-va2/uvpapzpbxjH-aulauvJ-WV&#91;&#91;/ljhwZthlaukjlkulzlp/3min.mp4`。</li><li>请注意,如果你是开发者或广告主,且在 2023 年 4 月 7 日之前曾使用 [/business/video/publish/](1762228496095234.html) 接口发布过视频,我们已将通过 `video_url` 参数指定的视频 URL 对应的域自动设置为“已验证”状态。因此,建议你使用 [/business/property/list/](1769325368603650.html) 接口,确认用于存放视频的域是否已通过自动验证。</li></ul> |
| custom_thumbnail_url | string | Body| 用作视频封面图片的自定义图片的可公开访问 HTTP(s) URL。<br><br>图片限制: <ul><li>最高分辨率:1080 x 1920 px 或 1920 x 1080 px。</li><li>最低分辨率:360 x 360 px。</li><li>文件大小:不超过 20 MB。</li><li>文件类型:JPG、JPEG、WebP 或 PNG。</li></ul> <br>示例:`https://www.example.com/tiktok-images/image.png`。<br> <br>当指定 `custom_thumbnail_url` 时,`thumbnail_offset` 将被忽略。 <br><br><p><span style="color:darkred"><b>注意</b></span>:指定已手动或自动验证所有权的 URL。若想手动验证 URL 资源的所有权,请按照[管理 URL 资源](1769324038780930.html)中所述的步骤操作。|
| post_info {必填} | object | Body | 帖子相关信息。<br><br>此为必填字段,即使你不想使用 `post_info` 中的其他任何参数,包括 `caption`、`is_brand_organic`、`is_branded_content`、`disable_comment`、`disable_duet`、`disable_stitch`、`thumbnail_offset`、`is_ai_generated`、`upload_to_draft`、`tto_invite_link`、`location_id`、`location_name` 和 `is_ads_only`。在这一情况下,将此字段设置为空对象 (`{}`)。 |
#| caption | string |  | 视频说明文字/描述 - 可以包含自有 TikTok 账号好友(互关)的 #hashtags 和 @mentions。<br><br>  你可以使用“\n”作为换行符,在 TikTok 手机应用中将视频说明文字分成多行显示。为了能够有效换行,说明文字必须包含足够多的字符,以便在当前手机的显示设置和操作系统下触发文本截断。截断的文本会在末尾添加省略号 (...) 和单词“more”(更多),用户可点击展开,查看完整说明文字。<br>如果说明文字过短,无法触发截断,“\n”字符将被忽略,说明文字将以单行显示,无任何换行。<br>请注意,在 TikTok 网页版应用中,“\n”将被忽略。<br><br>长度限制:2,200 个字符(UTF-16 编码),最多提及 30 条。<br><br><strong>示例</strong>:Me and me casa 🏠 #cat #kitten #britishshorthair<br><p><span style="color:darkred"><b>注意</b></span>:视频说明文字中包含的任何话题和提及将会在 TikTok 应用中显示为纯文本格式。|
#| is_brand_organic {必填} | boolean | | 是否为视频启用品牌自然流量内容开关。<br><br>如果将此字段设置为 `true`,视频将被标记为品牌自然流量内容,表示你在推广自己的品牌或业务。视频将添加“推广内容”标签。 <br><br><p><span style="color:darkred"><b>注意</b></span>: <ul><li>如果将 `is_brand_organic` 和 `is_branded_content` 都设置为 `true`,`is_brand_organic` 将被忽略,视频将被标记为品牌内容。</li></ul> |
#| is_branded_content {必填}| boolean|    | 是否为视频启用[品牌内容](https://creatormarketplace.tiktok.com/help#/doc/9493/10008169)开关。<br><br>  如果将此字段设置为 `true`,视频将被标记为品牌内容,表示你与品牌存在付费合作关系。视频将添加“品牌内容”标签。 <br><br><p><span style="color:darkred"><b>注意</b></span>:<ul><li> 如果将 `is_brand_organic` 和 `is_branded_content` 都设置为 `true`,`is_brand_organic` 将被忽略,视频将被标记为品牌内容。</li></ul> |
#| tto_invite_link | string | |仅当同时满足以下条件时生效:<ul><li>`is_branded_content` 设置为 `true`。</li><li>TikTok 账号(达人)已受邀加入 TikTok One (TTO) Creator Marketplace 营销活动。</li><li>TikTok 账号已加入营销活动。若想加入营销活动,可以使用 [/tto/creator/campaign/join/](1836584318657537.html) 接口。</li></ul><br>TTO Creator Marketplace 营销活动的邀请链接。<br><br>如果指定此字段,视频将发布并关联到邀请链接对应的 TTO Creator Marketplace 营销活动。<br><br>品牌可使用 [/tto/tcm/campaign/](1815693562720258.html) 接口获取 TTO Creator Marketplace 营销活动的邀请链接。|
#| disable_comment | boolean | | 是否禁用已发布的视频帖子的“允许评论”设置。<br><br>支持的值: <ul><li>`false`:启用该设置。</li><li>`true`:禁用该设置。</li></ul><br>若想确定 TikTok 账号帖子的允许的值,需使用 [/business/video/settings/](1816387951979521.html) 接口,并查看返回的 `comment_disabled`。<ul><li>如果 `comment_disabled` 为 `true`,只能将此字段设置为 `true`。</li><li>如果 `comment_disabled` 为 `false`,可将此字段设置为 `true` 或 `false`。</li></ul><br><strong>示例</strong>:`false`<br><br><strong>默认值</strong>:`false` |
#| disable_duet | boolean | |是否禁用已发布的视频帖子的“允许合拍”设置。<br><br>支持的值: <ul><li>`false`:启用该设置。</li><li>`true`:禁用该设置。</li></ul><br>若想确定 TikTok 账号帖子的允许的值,需使用 [/business/video/settings/](1816387951979521.html) 接口,并查看返回的 `duet_disabled`。 <ul><li> 如果 `duet_disabled` 为 `true`,只能将此字段设置为 `true`。</li><li>如果 `duet_disabled` 为 `false`,可将此字段设置为 `true` 或 `false`。</li></ul><br><strong>示例</strong>:`false`<br><br><strong>默认值</strong>:`false` |
#| disable_stitch | boolean | |是否禁用已发布的视频帖子的“允许拼接”设置。<br><br>支持的值: <ul><li>`false`:启用该设置。</li><li>`true`:禁用该设置。 </li></ul><br>若想确定 TikTok 账号帖子的允许的值,需使用 [/business/video/settings/](1816387951979521.html) 接口,并查看返回的 `stitch_disabled`。 <ul><li>如果 `stitch_disabled` 为 `true`,只能将此字段设置为 `true`。</li><li>如果 `stitch_disabled` 为 `false`,可将此字段设置为 `true` 或 `false`。 </li></ul><br><strong>示例</strong>:`false`<br><br><strong>默认值</strong>:`false` |
#| thumbnail_offset | integer | | 用于选择已发布视频中的一帧作为封面图片的设置,格式为时间戳(单位:毫秒)。<br><br><strong>示例</strong>:8000。<br><br><strong>默认值</strong>:0。<br><br><p><span style="color:darkred"><b>注意</b></span>: <ul><li>当指定 `custom_thumbnail_url` 时,`thumbnail_offset` 将被忽略。</li><li> 如果传入的时间戳超过视频时长,系统将发送失败的 Webhook,并且该视频不会被发布。 </li><li> 你传入的时间戳将四舍五入,以获取最近的一帧。例如,如果视频的时长为 1 秒,帧率为每秒 2 帧,那么传入时间戳 499(毫秒)时会返回第 1 帧,传入时间戳 500(毫秒)时会返回第 2 帧。 </li></ul>|
#| is_ai_generated | boolean |  |是否为视频帖子启用 AI 生成内容开关。<br>如果启用该开关,视频发布后将添加<b>创作者标记为 AI 生成</b>标签,并且无法更改。“创作者标记为 AI 生成”标签表示内容完全由 AI 生成或经过 AI 大幅修改。<br><br>支持的值:`true`、`false`。<br>默认值:`false`。 <br><br><p><span style="color:darkred"><b>注意</b></span>:只要不违反 TikTok [社区守则](https://www.tiktok.com/community-guidelines/en/),启用 AI 生成内容设置不会影响视频的投放。 |
#| upload_to_draft | boolean |  | 是否将帖子上传为草稿。<br><br>支持的值:`true`、`false`。默认值:`false`。<br><br>如果将此字段设置为 `true`,`post_info` 内的其他所有字段将被忽略。<br><br>将帖子成功上传为草稿后,你可以通过 TikTok 应用的收件箱通知找到该草稿。<br><br><p><span style="color:darkred"><b>注意</b></span>:如果你想使用此参数将帖子上传为草稿,需按照[授权](1738083939371009.html)和[获取访问令牌](1738084387220481.html)中的步骤,获取具有 `video.upload` 权限的 TikTok 账号访问令牌,以及该 TikTok 账号的开发者应用唯一识别 ID。<ul><li>若想确认 TikTok 账号访问令牌是否具有 `video.upload` 权限,需使用 [/tt_user/token_info/get/](1765927978092545.html) 接口并查看返回的 `scope`。如果访问令牌没有 `video.upload` 权限,请按照[授权](1738083939371009.html)工作流程,向 TikTok 账号所有者申请上传草稿的权限。 </li></ul>|
#|location_id|string||地域标签 ID。<br><br>当发布带有地域标签(包含 `location_id` 和 `location_name`)的帖子时,相关地域将添加到帖子中,并在帖子中显示。添加地域标签有助于当地受众以及搜索该地区的用户发现你的帖子。此外,这还能让你的内容与附近地区的用户更相关,进而提升互动率。<br><br>若想获取 TikTok 账号的可用地域标签列表,需使用 [/business/publish/location/](https://business-api.tiktok.com/portal/docs/get-the-location-tags-for-a-tiktok-account/v1.3) 接口。|
#|location_name {+条件必填}|string||指定 `location_id` 时必填。<br><br>地域名称。|
#| is_ads_only | boolean | |是否将视频发布为“仅在广告中显示”的视频。<br><br>支持的值:<ul><li>`true`:将视频发布为广告,不公开显示在你的主页中。</li><li>`false`:不将视频发布为广告。</li></ul><br>默认值:`false`。 <br><br><p><span style="color:darkred"><b>注意</b></span>:如果将“仅在广告中显示”的视频投放为 Spark Ads,可通过 [/business/video/list/](1762228421622786.html) 接口查看这些视频的详细信息。 |
#| music_sound_info | object | | 要用于视频的商用音乐(曲目)的信息。 |
##| music_sound_id {+条件必填} | object | | 使用 `music_sound_info` 时,此为必填字段。<br>要用于视频的商用音乐 ID。<br>你可以使用 [/discovery/cml/trending_list/](1825119063013505.html) 接口获取此 ID。 |
##| music_sound_volume {+条件必填}| integer | | 使用 `music_sound_info` 时,此为必填字段。<br>商用音乐的音量。<br>默认值:0。<br>值范围:0-100。<br><br><p><span style="color:darkred"><b>注意</b></span>:使用 TikTok 应用时,默认音量为 50。 |
##| music_sound_start | integer |  |视频所用音乐的起始时间点,单位为毫秒。<br>例如,如果输入的值为 2,000,商用音乐将从 `0:02`(第 2 秒)的时间点开始播放。<br>如果未提供,此字段默认设置为 `0`(曲目的开头)。|
##| music_sound_end | integer |  | 视频所用音乐的结束时间点,单位为毫秒。<br>如果未提供,此字段默认设置为视频的完整时长,单位为毫秒。<br>例如,如果视频时长为 2 秒,商用音乐时长为 10 秒(10,000 毫秒),且 `music_sound_start` 和 `music_sound_end` 字段均未设置,那么只有商用音乐的前 2,000 毫秒会被添加到视频中。|
##| video_original_sound_volume | integer |  | 原视频的背景音量。<br>默认值:0。<br>值范围:0-100。<br><br><p><span style="color:darkred"><b>注意</b></span>:使用 TikTok 应用时,默认音量为 50。 |

示例

(code curl http)
curl -L -X POST 'https://business-api.tiktok.com/open_api/v1.3/business/video/publish/' \
-H 'Content-Type: application/json' \
-H 'Access-Token: 1234a16d2e08c3f17d1984a1be07d00406p3LIAF7vEpxliox8GRpCINv70x' \
--data-raw '{
  "business_id": "20f5994f-4a67-44d4-a48f-2ce494a853b8",
  "video_url": "https://s3.amazonaws.com/tiktok-videos/video.mp4",
  "post_info": {
      "caption": "Me and me casa 🏠 #cat #kitten #britishshorthair",
      "disable_comment": false,
      "disable_duet": false,
      "disable_stitch": false
      }
}'
(/code)

返回

Header

这些 Header 对于问题报告和排查非常重要,需要记录。下表列出了部分返回的 Header。

|字段{30%}|类型{15%}|描述{55%}|
|---|---|---|
| Date | string | 收到返回结果时的日期和时间 (GMT)。<br><strong>示例</strong>:Fri, 13 Aug 2021 08:04:42 GMT |
| X-Tt-Logid | string | API 请求的唯一识别 ID。 |

Body

|字段{30%}|类型{15%}|描述{55%}|
|-|-|-|
| request_id | string | API 请求的唯一识别 ID。<br><br>请记录所有 API 请求的唯一识别 ID。此字段对于问题报告和排查非常重要。 |
| code | Integer | 返回码。完整返回码列表及描述参见[附录 - 返回码](https://ads.tiktok.com/marketing_api/docs?id=1737172488964097)。|
|message| string | 返回信息。更多信息参见[附录 - 返回信息](https://ads.tiktok.com/marketing_api/docs?id=1737172488964097)。 |
| data | object | 返回数据。 |
#|share_id| string | 视频帖子发布任务的唯一识别 ID。<br>你可以在 [/business/publish/status/](1816387106635778.html) 接口中将此 ID 用作 `publish_id`,以查询视频帖子的发布状态。<br><br><strong>示例</strong>:v_pub_url~v1.2345123456789123456<br><br><p><span style="color:darkred"><b>注意</b></span>: <ul><li> 用于已分享视频内容的[视频发布状态 Webhook](1810515090228226.html) 将包含此开发者应用识别 ID,以监测视频上传的状态。视频发布完成后,成功运行的 Webhook 也将包含为该视频新建的唯一识别 ID,该识别 ID 可用于获取视频洞察。</li><li>若想为你的开发者应用配置 Webhook 回调 URL,需使用 Webhook API 接口 [/business/webhook/update/](1810521279479810.html)。 </li></ul>|

示例

(code Success-Response http)
HTTPS/1.1 200 OK
{
  "code": 0,
  "message": "Ok",
  "request_id": "20210817034316010245031056097316BA",
  "data": {
    "share_id": "v_pub_url~v1.2345123456789123456"
  }
}
(/code)

内容来源:TikTok API for Business 官方文档 · 本地归档

在接这个接口时卡住了?
Stuck wiring this API into production? We build ad-delivery tooling on these platforms — campaign automation, reporting pipelines, error-handling and migration between API versions.
联系我们 · Talk to us 每日平台更新简报 →