发布到 Threads 需要两次 API 调用,而不是一次:先创建一个媒体容器,再发布它。每个主页每24小时最多可通过 API 发布250条帖子,文本帖子上限为500个字符,而且你的应用使用的每一项权限都必须先通过 Meta 的应用审核,测试名单之外的任何人才能连接。
Threads API 能发布什么内容,不能发布什么内容?
单条帖子支持三种媒体类型:TEXT、IMAGE 和 VIDEO。轮播支持 IMAGE 和 VIDEO 子项,数量在2到20个之间,一个轮播在你的发布限额中只算作一条帖子。
以下规格来自 Meta 官方文档:
| 限制项 | 数值 |
|---|---|
| 文本长度 | 500个字符 |
| 轮播子项数量 | 2到20个 |
| 图片格式 | JPEG、PNG |
| 图片文件大小 | 最大8MB |
| 图片宽度 | 320到1440像素 |
| 图片宽高比 | 最大10:1 |
| 视频容器 | MOV 或 MP4 |
| 视频编码 | H264 或 HEVC 视频,AAC 音频 |
| 视频帧率 | 23到60 FPS |
| 视频时长 | 300秒(5分钟) |
| 视频文件大小 | 最大1GB |
| 视频码率 | 视频100Mbps,音频128kbps |
有一个细节常常让人意外:表情符号是按 UTF-8 字节值计入500字符上限的,而不是按单个字符计算。在你的编辑器里看起来是480个字符的文案,可能会被拒绝。如果你是在客户端计数,表情符号要按字节计算。Threads 字数限制一文和免费的 Threads 字数统计工具都已经处理好了这一点。
说明: 本文数字已对照 developers.facebook.com/docs/threads/posts 和 /docs/threads/overview 核实,截至2026年9月。各平台的这类机制可能随时无预警地变动。
鉴权模型是怎样的?
Threads 运行在 Meta 的应用基础设施上,但使用自己独立的凭据。你需要创建一个带有 Threads 用例 的 Meta 应用,该应用会颁发一组专属于 Threads 的应用 ID 和密钥,与控制面板中其他地方显示的凭据不同。用错这对凭据是新手上手时常犯的第一个错误。
权限范围划分得很细:
threads_basic(每个接口都需要)threads_content_publish(发布内容)threads_manage_replies和threads_read_repliesthreads_manage_insightsthreads_deletethreads_location_tagging
应用审核不是可选项。 每一项权限都必须通过应用审核,并且应用必须发布到生产环境,测试者之外的用户才能授权使用。在此之前,你只能向通过应用控制面板明确邀请为测试者、并已在自己的 Threads 设置中接受邀请的用户发布内容。Meta 的文档没有说明审核需要多长时间,所以我们不会去猜测。
你需要自行搭建的令牌生命周期
这一部分最终会变成一个后台任务。
- 授权窗口返回一个 code。
- 用它换取一个短期访问令牌,有效期为1小时。
- 再用它通过带有
grant_type=th_exchange_token参数的GET /access_token换取一个长期令牌,有效期为60天。 - 通过带有
grant_type=th_refresh_token参数的GET /refresh_access_token进行刷新。一个令牌必须已存在至少24小时且尚未过期才能刷新。刷新后的令牌再次有效60天。
如果一个令牌60天内都没有刷新,就会过期,用户必须重新授权。应用用户为私密主页授予的权限,有效期为90天。
说明: 本文数字已对照 developers.facebook.com/docs/threads/get-started 和 /get-started/long-lived-tokens 核实,截至2026年9月。各平台的这类机制可能随时无预警地变动。
实际的发布流程是怎样的?
对于单条帖子:
- 调用
POST /{threads-user-id}/threads,带上media_type以及你的文本或媒体 URL。这会返回一个容器 ID。 - 等待。Meta 建议在发布前平均等待30秒,让服务器完成媒体处理。
- 调用
POST /{threads-user-id}/threads_publish,带上该容器 ID。
对于轮播,需要插入一个步骤:先为每个子项创建一个容器,再创建一个引用这些子项的轮播容器,最后发布该轮播容器。
# 1. create the container
curl -X POST "https://graph.threads.net/v1.0/$USER_ID/threads" \
-d "media_type=IMAGE" \
-d "image_url=https://example.com/photo.jpg" \
-d "text=Shipping notes for this week." \
-d "access_token=$TOKEN"
# -> {"id":"1789..."}
# 2. wait ~30s for processing, then publish
curl -X POST "https://graph.threads.net/v1.0/$USER_ID/threads_publish" \
-d "creation_id=1789..." \
-d "access_token=$TOKEN"
请注意,图片和视频是通过公开 URL传递的,而不是以字节形式上传。Meta 的服务器会自行抓取它们。这意味着你的媒体文件必须公开可访问、无需鉴权,并且在抓取发生时仍然存在,这是一项大多数人事先没有规划好的托管要求。
速率限制是怎样的?
| 操作 | 限制 |
|---|---|
| 已发布帖子 | 每24小时滚动周期内250条 |
| 回复 | 每24小时1,000条 |
| 删除 | 每24小时100次 |
| 位置搜索 | 每24小时500次 |
| 常规 API 调用 | 每24小时为4800 × 曝光次数(最低按10次曝光计算) |
这条曝光量公式值得反复琢磨。你的常规调用额度会随着主页实际获得的触达量而变化,但设有一个下限。全新的主页只能拿到最低额度。
说明: 本文数字已对照 developers.facebook.com/docs/threads/overview 核实,截至2026年9月。各平台的这类机制可能随时无预警地变动。
真正会耗费你三周时间的是什么?
应用审核。 准备录屏演示、隐私政策、一条可运行的演示路径以及企业验证,然后针对被拒的情况反复迭代。审核所需时间没有公开说明,所以最好把它当作一项日程风险,而不是一个具体任务来规划。
令牌刷新任务。 长期令牌60天后过期,并且只有在存在满24小时后才能刷新。这需要一个定时任务、一个加密令牌的存储方案、刷新失败时的告警机制,以及界面中的重新连接流程。
异步失败。 容器调用返回200,并不代表你的媒体文件是有效的。真正暴露问题的是发布调用,大约30秒之后,在另一个请求中出现。你的帖子模型需要一个”处理中”状态,以及一种在用户已经关闭页面之后仍能上报失败的方式。
公开媒体托管。 由于 Meta 是通过 URL 抓取内容,你需要提供稳定的公开 URL 并配置合理的缓存行为,并规划好在抓取被限速或被 CDN 的反爬机制拦截时该怎么办。
表情符号的字节计数。 修复起来很简单,但如果在生产环境中才发现,代价就大了。
简要总结
- 发布需要两次调用:创建容器,等待大约30秒,再发布它。轮播则需要三次调用。
- 媒体通过公开 URL 传递,由 Meta 负责抓取。
- 上限为500个字符,表情符号按 UTF-8 字节计算。
- 每个主页每24小时最多通过 API 发布250条帖子。
- 短期令牌有效期1小时,长期令牌有效期60天,存在满24小时后即可刷新。
- 测试者之外的用户要连接,每项权限都必须先通过应用审核,审核时长未公开。
把 Threads 与其他平台一起排期
如果 Threads 只是你整套发布方案中的一个平台,而不是全部,那么上面这些工作大部分都要针对每个网络重复一遍,只是形式各不相同。X 使用 OAuth 2.0 PKCE 和分块字节上传。Bluesky 完全不需要应用审核。LinkedIn 则需要两个独立的应用:个人主页使用 w_member_social,企业主页使用 r_organization_social、w_organization_social 和 rw_organization_admin,分别单独审核。
BulkPublish 通过一套 REST API 覆盖15个平台,其中就包括 Threads,容器发布流程、60天刷新周期以及异步状态轮询都由服务器端统一处理。开发者文档和 REST API 参考列出了所有接口,Threads 帖子排期一文则介绍了非开发者也能使用的操作方式。