Retrieve job status and results

December 2023 (September 1, 2025)

Table of contents

  1. Request Headers
  2. Query Parameter
  3. Responses
  4. Model
  5. Examples
  6. Try It

Use this endpoint to retrieve status and results of

If you specified optional parameter replyUrl you technically do not need to use this endpoint to retrieve results since API will call provided replyUrl once job generation completed.

Important The API checks Discord periodically - every 15 seconds (and up to 60 seconds in rare cold start cases) - to update the statuses and results of all currently running jobs. This polling interval is set for safety reasons to help prevent issues with Discord and Midjourney, such as bans or excessive request rates.

Jobs lifespan guaranteed to be at least 31 days, after that they will be expired and may be recycled.

https://api.useapi.net/v2/jobs/?jobid=jobid

Request Headers
Authorization: Bearer {API token}
Query Parameter

jobid is required, use the value returned by the following jobs:

You can also retrieve results for the jobs listed below, even though they will return the final result with the original call:

Responses
  • 200 OK

    If field status value is created, started or progress wait in a loop for at least 10..30 seconds and retry again. When completed retrieve generated image from attachments field. If you’re planning to take advantage of Discord CDN to host attachments, take a look at our Discord CDN Proxy article.

    Field content contains message generated by Midjourney reflecting current generation parameters and progress.
    Optional array embeds contains additional information.
    Optional array imageUx contains separate image URLs to the upscaled images where available.
    Optional array imageUx contains separate video URLs to the upscaled videos where available.

    To retrieve imageUx and videoUx URLs, use GET proxy/cdn-midjourney. Both URLs are behind CloudFlare, and unless you plan to display them as part of an HTML page served via a standard browser context, you will need to use the provided proxy above to download those images and videos.

    ⚠️ Security consideration when using videoUx and imageUx URLs:
    URLs in both arrays follow this format: https://cdn.midjourney.com/<GUID>/…. They contain a job GUID which can be traced back to your account and will expose your account details such as your Discord account name and email. Exercise caution when posting these URLs publicly. You may want to save the URL content locally and serve it from your own origin, or proxy the links to obfuscate the original URLs.

    {
        "jobid": "job:20250822143812123-user:12345-channel:1122334455667788990-bot:midjourney",
        "verb": "imagine",
        "status": "completed",
        "created": "2025-08-22T14:38:12.123Z",
        "updated": "2025-08-22T14:40:05.889Z",
        "prompt": "https://modern.art/abcdef/bird.webp Tweety Bird spins kettlebell with one hand around once and hurls the kettlebell directly at the camera in a slow motion --iw 2 --ar 3:2 --motion low --video",
        "replyRef": "2025-08-22T14:38:10.456Z",
        "replyUrl": "https://webhook.site/b4d8e1a0-5c6f-4a3b-9e1d-f8c7b6a5d4e3",
        "channel": "1122334455667788990",
        "maxJobs": 3,
        "discord": "NDE...secured...ABC",
        "messageId": "1522889900112233445",
        "content": "**<https://s.mj.run/aBcDeF-ghIj> https://fluxpro.ai/abcdef/bird.webp Tweety Bird spins kettlebell with one hand around once and hurls the kettlebell directly at the camera in a slow motion --iw 2 --ar 3:2 --motion low --video 1** - <@987654321098765432> [(Open on website for full quality)](<https://midjourney.com/jobs/b4d8e1a0-5c6f-4a3b-9e1d-f8c7b6a5d4e3>) (fast)",
        "timestamp": "2025-08-22T14:39:55.777000+00:00",
        "attachments": [
            {
                "proxy_url": "https://media.discordapp.net/attachments/….webp?ex=…&is=…&hm=…&",
                "height": 768,
                "content_type": "image/webp",
                "placeholder": "…",
                "placeholder_version": 1,
                "filename": "….webp",
                "size": 3105492,
                "url": "https://cdn.discordapp.com/attachments/….webp?ex=…&is=…&hm=…&",
                "width": 512,
                "flags": 32,
                "content_scan_version": 2,
                "id": "1522889900112233445"
            }
        ],
        "buttons": [
            "U1",
            "U2",
            "U3",
            "U4",
            "🔄"
        ],
        "videoUx": [
            {
                "id": 1,
                "url": "https://cdn.midjourney.com/video/b4d8e1a0-5c6f-4a3b-9e1d-f8c7b6a5d4e3/0.mp4"
            },
            {
                "id": 2,
                "url": "https://cdn.midjourney.com/video/b4d8e1a0-5c6f-4a3b-9e1d-f8c7b6a5d4e3/1.mp4"
            },
            {
                "id": 3,
                "url": "https://cdn.midjourney.com/video/b4d8e1a0-5c6f-4a3b-9e1d-f8c7b6a5d4e3/2.mp4"
            },
            {
                "id": 4,
                "url": "https://cdn.midjourney.com/video/b4d8e1a0-5c6f-4a3b-9e1d-f8c7b6a5d4e3/3.mp4"
            }
        ],
        "code": 200
    }
    
  • 400 Bad Request

    {
        "error": "Query param jobid not provided",
        "code": 400
    }
    
  • 401 Unauthorized

    {
        "error": "Unauthorized",
        "code": 401
    }
    
  • 402 Payment Required

    {
        "error": "Account has no subscription or subscription expired",
        "code": 402
    }
    
  • 404 Not Found

    {
        "error": "Unable to locate job <jobid>",
        "code": 404
    }
    
  • 410 Gone

    {
        "error": "Job has expired",
        "code": 410
    }
    
Model

To learn more about status: moderated, see Midjourney moderation system.

{ // TypeScript, all fields are optional
  jobid: string,
  parentJobId: string,
  verb: 'imagine' | 'button' | 'blend' | 'describe' | 
        'info' | 'relax' | 'fast' | 'turbo' | 'variability' | 'remix' | 'seed' | 'seed_async',
  status: 'created' | 'started' | 'moderated' | 'progress' | 
          'completed' | 'failed' | 'cancelled',
  seed: { 
    value: number, // Parsed seed number
    content: string, // Original content message returned by Midjourney for a seed request
    attachments: {  // Seed images
      id: string,
      content_type: string,
      filename: string,
      url: string,
      proxy_url: string,
      size: number,
      width: number,
      height: number 
    }[]
  },          
  created: string, // YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
  updated: string, // YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
  prompt: string,
  blendUrls: string[],
  blendDimensions: 'Portrait' | 'Square' | 'Landscape',    
  describeUrl: string,
  button: 'U1' | 'U2' | 'U3' | 'U4' | 'V1' | 'V2' | 'V3' | 'V4' |
            '⬅️' | '➡️' | '⬆️' | '⬇️' | '🔄' |
            'Vary (Region)' | 'Vary (Strong)' | 'Vary (Subtle)' | 'Zoom Out 1.5x' | 'Zoom Out 2x' | 'Make Square' |
            'Upscale (2x)' | 'Upscale (4x)' | 'Upscale (Subtle)' | 'Upscale (Creative)' |
            'Redo Upscale (2x)' | 'Redo Upscale (4x)' | 'Redo Upscale (Subtle)' | 'Redo Upscale (Creative)' |
            'Make Variations' | 'Remaster' | 'Custom Zoom' | 
            'Animate (Low motion)' | 'Animate (High motion)' | // Added July 28, 2025
            'Extend (Low motion)' | 'Extend (High motion)', // Added July 28, 2025
  children: {
    messageId: string,
    button: 'U1' | 'U2' | 'U3' | 'U4' | 'V1' | 'V2' | 'V3' | 'V4' |
            '⬅️' | '➡️' | '⬆️' | '⬇️' | '🔄' |
            'Vary (Region)'| 'Vary (Strong)' | 'Vary (Subtle)' | 'Zoom Out 1.5x' | 'Zoom Out 2x' | 'Make Square' |
            'Upscale (2x)' | 'Upscale (4x)' | 'Upscale (Subtle)' | 'Upscale (Creative)' |
            'Redo Upscale (2x)' | 'Redo Upscale (4x)' | 'Redo Upscale (Subtle)' | 'Redo Upscale (Creative)' |
            'Make Variations' | 'Remaster' | 'Custom Zoom' |
            'Animate (Low motion)' | 'Animate (High motion)' | // Added July 28, 2025
            'Extend (Low motion)' | 'Extend (High motion)', // Added July 28, 2025
    jobid: string 
  }[],
  buttons: 
  [
      'U1' | 'U2' | 'U3' | 'U4' | 'V1' | 'V2' | 'V3' | 'V4' |
      '⬅️' | '➡️' | '⬆️' | '⬇️' | '🔄' |
      'Vary (Region)'| 'Vary (Strong)' | 'Vary (Subtle)' | 'Zoom Out 1.5x' | 'Zoom Out 2x' | 'Make Square'
      'Upscale (2x)' | 'Upscale (4x)' | 'Upscale (Subtle)' | 'Upscale (Creative)' |
      'Redo Upscale (2x)' | 'Redo Upscale (4x)' | 'Redo Upscale (Subtle)' | 'Redo Upscale (Creative)' |
      'Make Variations' | 'Remaster' | 'Custom Zoom' |
      'Animate (Low motion)' | 'Animate (High motion)' | // Added July 28, 2025
      'Extend (Low motion)' | 'Extend (High motion)', // Added July 28, 2025
  ],
  imageUx: { id: number, url: string }[], // Added September 1, 2025. Upscaled image URLs for Ux buttons 
  videoUx: { id: number, url: string }[], // Added September 1, 2025. Upscaled video URLs for Ux buttons when --video is used
  discord: string, // Provided for debugging purposes only, contains the first 3 and the last 3 characters of the original value
  channel: string,
  maxJobs: number,
  messageId: string,
  content: string, // Contains message generated by Midjourney reflecting current generation parameters and progress
  timestamp: string,
  attachments: {
    id: string,
    content_type: string,
    filename: string,
    url: string,
    proxy_url: string,
    size: number,
    width: number,
    height: number 
  }[],
  embeds: {
    type: string,
    description: string,
    image: {
      url: string,
      proxy_url: string,
      width: number,
      height: number 
    } 
  }[], 
  error: string,
  errorDetails: string,
  replyUrl: string,
  replyRef: string,
  code: 200
}
Examples
  • curl https://api.useapi.net/v2/jobs/?jobid=\
       -H "Accept: application/json" \
       -H "Authorization: Bearer …" 
    
  • const token = "API token";
    const jobid = "jobid returned by jobs/imagine or jobs/button";      
    const apiUrl = `https://api.useapi.net/v2/jobs/?jobid=${jobid}`; 
    const response = await fetch(apiUrl, {
      headers: {
        "Authorization": `Bearer ${token}`,
      },
    });
    const result = await response.json();
    console.log("response", {response, result});
    
  • import requests
    token = "API token"
    jobid = "jobid returned by jobs/imagine or jobs/button"
    apiUrl = f"https://api.useapi.net/v2/jobs/?jobid={jobid}"
    headers = {
        "Content-Type": "application/json", 
        "Authorization" : f"Bearer {token}"
    }
    response = requests.get(apiUrl, headers=headers)
    print(response, response.json())
    
Try It