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

Axios调用Threads API POST视频返回400错误(Postman正常)

Threads API视频发布400 Bad Request问题排查

在Node.js应用中使用Axios调用Threads API发布视频时,遇到以下问题:创建媒体容器的请求正常返回mediaID,但调用threads_publish接口时返回400 Bad Request。相同请求在Postman中可正常执行,且同一端点发布纯文本内容无异常。

代码实现

module.exports = async (title, url) => {
  try {
    // 创建媒体容器
    console.log(
      "video_url",
      url,
      "text:",
      title,
      "access_token",
      process.env.THREADS_ACCESS_TOKEN
    );
    const mediaContainer = await axios.post(
      "https://graph.threads.net/v1.0/8063816050370756/threads",
      {
        media_type: "VIDEO",
        video_url: url,
        text: title,
        access_token: process.env.THREADS_ACCESS_TOKEN, // 令牌需在2024年8月25日后60天更换
      }
    );
    const mediaID = mediaContainer.data.id;
    console.log("***** MEDIA ID *****");
    // 发布请求返回400 Bad Request
    const postId = await axios.post(
      "https://graph.threads.net/v1.0/8063816050370756/threads_publish",
      {
        creation_id: mediaID,
        access_token: process.env.THREADS_ACCESS_TOKEN,
      }
    );
    console.log(postId);
  } catch (err) {
    console.log("Error in uploading to Threads...moving on", err.message);
  }
};

关键细节

  • 调用/threads接口创建视频媒体容器,请求正常,可获取到有效的mediaID
  • 调用/threads_publish接口执行发布,返回400 Bad Request错误
  • 同一端点发布纯文本内容时,流程无异常

已尝试的排查步骤

  • 验证access_token和mediaID的有效性,确认两者均正确无误
  • 确认环境变量THREADS_ACCESS_TOKEN已正确配置且可正常读取

针对性排查方案

  1. 等待媒体容器处理完成
    Threads API处理视频需要转码时间,创建媒体容器后立即调用发布接口会因媒体未就绪导致400错误。需轮询检查媒体状态,直到status变为FINISHED:

    async function waitForMediaReady(mediaId, accessToken) {
      let status;
      do {
        const res = await axios.get(`https://graph.threads.net/v1.0/${mediaId}`, {
          params: { access_token: accessToken, fields: 'status' }
        });
        status = res.data.status;
        if (status !== 'FINISHED') await new Promise(resolve => setTimeout(resolve, 2000));
      } while (status !== 'FINISHED');
    }
    
    // 在获取mediaID后添加等待逻辑
    await waitForMediaReady(mediaID, process.env.THREADS_ACCESS_TOKEN);
    
  2. 切换请求数据格式为FormData
    Postman默认以FormData格式发送请求,而Axios默认发送JSON。尝试将发布请求改为FormData格式:

    const formData = new FormData();
    formData.append('creation_id', mediaID);
    formData.append('access_token', process.env.THREADS_ACCESS_TOKEN);
    
    const postId = await axios.post(
      "https://graph.threads.net/v1.0/8063816050370756/threads_publish",
      formData,
      { headers: formData.getHeaders() }
    );
    
  3. 捕获完整错误详情
    当前仅打印错误消息,无法获取API返回的具体错误原因。修改catch块打印完整响应数据:

    catch (err) {
      console.log("Threads上传错误详情:", err.response?.data || err.message);
    }
    
  4. 验证视频合规性
    确认视频符合Threads的官方要求:

    • 视频时长:15秒至10分钟
    • 文件大小:不超过1GB
    • 分辨率:最大1080p(1920x1080)
    • 格式:MP4或MOV

内容的提问来源于stack exchange,提问作者Emiliano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:34:53