You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用免费版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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:42:12