使用免费版X API通过NodeJS推特机器人发图文遇403错误求助
用X(原Twitter)免费版API实现图文推文发布的解决方案
问题核心
你碰到的403错误(代码453),本质是调用了V1.1版本的发帖接口,而免费版用户仅能访问V2 API的指定端点——官方文档提到的免费权限确实支持图文发布,但必须用对接口版本。
明确结论:免费版完全可行
已有不少开发者用免费版成功实现带单张图片的推文发布,关键是全程遵循V2 API的流程,不能混用V1.1的接口。
NodeJS实现步骤
1. 上传图片到V2媒体端点
使用POST /2/media/upload接口上传图片,必须指定media_category为tweet_image,示例代码:
const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); async function uploadImage(bearerToken, imageFilePath) { const formData = new FormData(); formData.append('media', fs.createReadStream(imageFilePath)); formData.append('media_category', 'tweet_image'); const res = await axios.post('https://api.x.com/2/media/upload', formData, { headers: { 'Authorization': `Bearer ${bearerToken}`, ...formData.getHeaders() } }); return res.data.media_id_string; }
2. 发布带图片的推文
调用POST /2/tweets接口,把上传得到的media_id_string放进请求体的media.media_ids数组里,示例代码:
async function postTweetWithImage(bearerToken, tweetText, mediaId) { const res = await axios.post('https://api.x.com/2/tweets', { text: tweetText, media: { media_ids: [mediaId] } }, { headers: { 'Authorization': `Bearer ${bearerToken}`, 'Content-Type': 'application/json' } }); return res.data; }
关键注意事项
- 权限配置:在开发者后台确认你的项目已申请
Read and write权限(免费版可申请),并确保使用的Bearer Token对应这个权限。 - 限频控制:免费版V2 API有调用次数限制,媒体上传是15次/15分钟,发帖是150次/24小时,需控制调用频率。
- 彻底放弃V1.1:V1.1的发帖接口对免费用户完全关闭,哪怕能上传媒体也没法用来发推文,全程用V2接口即可。
内容的提问来源于stack exchange,提问作者erlango3
相关产品推荐
相关产品推荐

