欢迎使用 Midjourney API

Midjourney API 让您能够使用 Midjourney 先进AI模型的强大功能生成高质量的AI图像。无论您是在构建应用、自动化工作流程还是创建内容,我们的API都为AI图像生成提供了简单可靠的访问方式。

身份验证

所有 API 请求都需要使用 Bearer 令牌进行身份验证。请从 API 密钥管理页面 获取您的 API 密钥。
请妥善保管您的 API 密钥,切勿公开分享。如果怀疑密钥泄露,请立即重置。

API 基础 URL

https://api.kie.ai

身份验证请求头

Authorization: Bearer YOUR_API_KEY

快速开始指南

第一步:生成您的第一个图像

从一个简单的文本转图像生成请求开始:
async function generateImage() {
  try {
    const response = await fetch('https://api.kie.ai/api/v1/mj/generate', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        taskType: 'mj_txt2img',
        prompt: '一幅日落时分雄伟的雪山风景画,山峰被夕阳映照成金色',
        speed: 'relaxed',
        aspectRatio: '16:9',
        version: '7'
      })
    });
    
    const data = await response.json();
    
    if (response.ok && data.code === 200) {
      console.log('任务已提交:', data);
      console.log('任务ID:', data.data.taskId);
      return data.data.taskId;
    } else {
      console.error('请求失败:', data.msg || '未知错误');
      return null;
    }
  } catch (error) {
    console.error('错误:', error.message);
    return null;
  }
}

generateImage();

第二步:检查任务状态

使用返回的任务ID检查生成状态:
curl -X GET "https://api.kie.ai/api/v1/mj/record-info?taskId=YOUR_TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

响应格式

成功响应:
{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "mj_task_abcdef123456"
  }
}
任务状态响应:
{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "mj_task_abcdef123456",
    "successFlag": 1,
    "resultInfoJson": {
      "resultUrls": [
        {"resultUrl": "https://example.com/image1.jpg"},
        {"resultUrl": "https://example.com/image2.jpg"},
        {"resultUrl": "https://example.com/image3.jpg"},
        {"resultUrl": "https://example.com/image4.jpg"}
      ]
    }
  }
}

生成类型

从文本描述生成图像:
{
  "taskType": "mj_txt2img",
  "prompt": "未来主义城市景观,有飞行汽车和霓虹灯光",
  "aspectRatio": "16:9",
  "version": "7"
}

生成速度

为您的需求选择合适的速度:

Relaxed

免费套餐选项生成速度较慢但对非紧急任务具有成本效益

Fast

平衡选项适用于大多数用例的标准生成速度

Turbo

优质速度适用于时间敏感应用的最快生成速度

关键参数

prompt
string
required
对所需图像的文本描述。为获得最佳结果,请具体和描述性地表达。更好提示词的技巧:
  • 包含风格描述符(如”超写实”、“水彩画”、“数字艺术”)
  • 指定构图细节(如”特写”、“广角”、“鸟瞰图”)
  • 添加光线信息(如”黄金时段”、“戏剧性光线”、“柔和自然光”)
aspectRatio
string
输出图像宽高比。可选择:
  • 1:1 - 方形(社交媒体)
  • 16:9 - 宽屏(壁纸、演示文稿)
  • 9:16 - 肖像(手机壁纸)
  • 4:3 - 标准(传统显示器)
  • 以及其他7种比例
version
string
Midjourney 模型版本:
  • 7 - 最新模型(推荐)
  • 6.1, 6 - 以前的版本
  • niji6 - 专注于动漫/插画
stylization
integer
艺术风格强度(0-1000):
  • 低值(0-100):更逼真
  • 高值(500-1000):更艺术化/风格化

完整工作流程示例

以下是一个生成图像并等待完成的完整示例:
class MidjourneyAPI {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = 'https://api.kie.ai/api/v1/mj';
  }
  
  async generateImage(options) {
    const response = await fetch(`${this.baseUrl}/generate`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${this.apiKey}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(options)
    });
    
    const result = await response.json();
    if (!response.ok || result.code !== 200) {
      throw new Error(`生成失败: ${result.msg || '未知错误'}`);
    }
    
    return result.data.taskId;
  }
  
  async waitForCompletion(taskId, maxWaitTime = 600000) { // 最长等待10分钟
    const startTime = Date.now();
    
    while (Date.now() - startTime < maxWaitTime) {
      const status = await this.getTaskStatus(taskId);
      
      switch (status.successFlag) {
        case 0:
          console.log('任务生成中,继续等待...');
          break;
          
        case 1:
          console.log('生成成功完成!');
          return status.resultInfoJson;
          
        case 2:
          const taskError = status.errorMessage || '任务生成失败';
          console.error('任务生成失败:', taskError);
          if (status.errorCode) {
            console.error('错误代码:', status.errorCode);
          }
          throw new Error(taskError);
          
        case 3:
          const generateError = status.errorMessage || '任务创建成功但生成失败';
          console.error('生成失败:', generateError);
          if (status.errorCode) {
            console.error('错误代码:', status.errorCode);
          }
          throw new Error(generateError);
          
        default:
          console.log(`未知状态: ${status.successFlag}`);
          if (status.errorMessage) {
            console.error('错误信息:', status.errorMessage);
          }
          break;
      }
      
      // 等待30秒后再次检查
      await new Promise(resolve => setTimeout(resolve, 30000));
    }
    
    throw new Error('生成超时');
  }
  
  async getTaskStatus(taskId) {
    const response = await fetch(`${this.baseUrl}/record-info?taskId=${taskId}`, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${this.apiKey}`
      }
    });
    
    const result = await response.json();
    if (!response.ok || result.code !== 200) {
      throw new Error(`查询状态失败: ${result.msg || '未知错误'}`);
    }
    
    return result.data;
  }
  
  async upscaleImage(taskId, index) {
    const response = await fetch(`${this.baseUrl}/upscale`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${this.apiKey}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        taskId,
        index
      })
    });
    
    const result = await response.json();
    if (!response.ok || result.code !== 200) {
      throw new Error(`放大失败: ${result.msg || '未知错误'}`);
    }
    
    return result.data.taskId;
  }
}

// 使用示例
async function main() {
  const api = new MidjourneyAPI('YOUR_API_KEY');
  
  try {
    // 文本转图像生成
    console.log('开始图像生成...');
    const taskId = await api.generateImage({
      taskType: 'mj_txt2img',
      prompt: '一座雄伟的古老城堡,矗立在云雾缭绕的山峰之上,夕阳西下,金光洒在城堡的石墙上',
      speed: 'fast',
      aspectRatio: '16:9',
      version: '7',
      stylization: 500
    });
    
    // 等待完成
    console.log(`任务ID: ${taskId}。等待完成...`);
    const result = await api.waitForCompletion(taskId);
    
    console.log('图像生成成功!');
    console.log('生成的图像数量:', result.resultUrls.length);
    result.resultUrls.forEach((urlInfo, index) => {
      console.log(`图像 ${index + 1}: ${urlInfo.resultUrl}`);
    });
    
    // 放大第一张图像
    console.log('\n开始放大第一张图像...');
    const upscaleTaskId = await api.upscaleImage(taskId, 1);
    
    const upscaleResult = await api.waitForCompletion(upscaleTaskId);
    console.log('图像放大成功!');
    console.log('放大后图像:', upscaleResult.resultUrls[0].resultUrl);
    
  } catch (error) {
    console.error('错误:', error.message);
  }
}

main();

使用回调的异步处理

对于生产应用,使用回调而不是轮询:
{
  "taskType": "mj_txt2img",
  "prompt": "一个宁静的禅意花园,樱花盛开",
  "callBackUrl": "https://your-app.com/webhook/mj-callback",
  "aspectRatio": "16:9"
}
当生成完成时,系统会将结果POST到您的回调URL。

了解更多关于回调

实现和处理 Midjourney API 回调的完整指南

最佳实践

状态码

200
成功
任务创建成功或请求完成
400
错误请求
无效的请求参数或格式错误的JSON
401
未授权
缺少或无效的API密钥
402
积分不足
账户没有足够的积分进行操作
429
速率限制
请求过多 - 实施退避策略
500
服务器错误
内部服务器错误 - 如果持续存在请联系支持

生成任务状态说明

successFlag: 0
生成中
任务正在处理中
successFlag: 1
成功
任务成功完成
successFlag: 2
失败
任务生成失败
successFlag: 3
生成失败
任务创建成功但生成失败

图像存储和保留

生成的图像文件在删除前保留 15天。请在此时间范围内下载并保存您的图像。
  • 图像URL在生成后15天内保持可访问
  • 规划您的工作流程以在过期前下载或处理图像
  • 考虑为生产使用实施自动下载系统

下一步

支持

需要帮助吗?我们的技术支持团队随时为您提供帮助。

准备开始生成令人惊叹的AI图像了吗?获取您的API密钥,立即开始创作!