Midjourney support was discontinued on June 24, 2026. See the service notice for details — including how to cancel your subscription or request a prorated refund.

Midjourney V7 image generation is still available through the MiniMax API — see Midjourney V7 via MiniMax for examples and pricing.

Toggle Variability Mode

October 27, 2025 (January 5, 2026)

Table of contents

  1. Request Headers
  2. Request Body
  3. Parameters
  4. Response • JSON • stream: false
  5. Response • SSE Stream • stream: true
  6. Model
  7. Examples
  8. Try It

Toggle Midjourney Variability mode using the /settings command.

https://api.useapi.net/v3/midjourney/jobs/variability

Request Headers

Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data (required for Blob content uploads).
# Content-Type: multipart/form-data

Request Body

{
  "channel": "1234567890123456789"
}

Parameters

  • channel is optional if only one Midjourney account is configured under GET /accounts. You must specify the channel when you have multiple accounts setup and wish to use a specific account from the configured list.

  • stream is optional (default: true).
    • true - Returns Content-Type: text/event-stream with live progress events. See SSE Streaming Guide
    • false - Returns Content-Type: application/json with initial job state. Use GET /jobs/jobid to retrieve updates and results
  • replyUrl is optional. Webhook URL for real-time job event callbacks. All job events POST-ed to this URL as they occur. Maximum length 1024 characters. Callback body has the same JSON shape as GET /jobs/jobid response.

  • replyRef is optional. Your reference ID stored with job.
    Returned in all responses and callbacks as response.replyRef.
    Maximum length 1024 characters.

  • replyLevel is optional (default: all). Controls which status changes trigger webhook callbacks.
    • all - Every status change (created, started, progress, completed, failed, moderated)
    • standard - Job lifecycle only (created + final states, no progress updates)
    • minimal - Final outcome only (completed, failed, moderated)

Response • JSON • stream: false

Response with content-type: application/json.

  • 201 Created

    Job created successfully. Use returned jobid with GET /jobs/jobid to poll status, or wait for webhook callbacks if replyUrl provided.

    Variability mode setting will be available in response.settings.variability when job completes.

    {
        "jobid": "j1024172338875473191-u12345-c1234567890987654321-bot:midjourney",
        "verb": "variability",
        "status": "created",
        "created": "2025-10-24T17:23:38.875Z",
        "request": {
            "replyUrl": "https://api-callback.matthieu.leblanc.workers.dev/",
            "replyRef": "2025-10-24T17:23:37.902Z",
            "stream": false
        }
    }
    
  • 400 Bad Request

    Validation error.

    {
      "error": "Parameter prompt is required"
    }
    
  • 401 Unauthorized

    {
      "error": "Unauthorized"
    }
    
  • 402 Payment Required

    {
      "error": "Account has no subscription or subscription expired"
    }
    
  • 596 Pending Moderation

    Channel has pending moderation/CAPTCHA. Email notification sent. Log into Discord and address moderation message/CAPTCHA. Execute POST /accounts/channel/reset.

    {
      "error": "All configured Midjourney channels (2) have errors (pending moderation, CAPTCHA, etc.). Please resolve channel issues before making new requests."
    }
    

Response • SSE Stream • stream: true

Returns content-type: text/event-stream with real-time job progress events. See SSE Streaming Guide for implementation details. See Job Response Model for complete job response object structure.

data: {"event":"initialized","message":"Stream initialized","jobId":"j1024172301713382376-u12345-c1234567890987654321-bot:midjourney","seq":0,"ts":"17:23:01.728"}

data: {"event":"midjourney_created","job":{"jobid":"j1024172301713382376-u12345-c1234567890987654321-bot:midjourney","verb":"variability","status":"created","created":"2025-10-24T17:23:01.713Z","request":{"replyUrl":"https://api-callback.matthieu.leblanc.workers.dev/","replyRef":"2025-10-24T17:23:00.301Z"},"updated":"2025-10-24T17:23:02.780Z"},"seq":16,"ts":"17:23:02.794"}

data: {"event":"midjourney_progress","job":{"jobid":"j1024172301713382376-u12345-c1234567890987654321-bot:midjourney","verb":"variability","status":"progress","created":"2025-10-24T17:23:01.713Z","request":{"replyUrl":"https://api-callback.matthieu.leblanc.workers.dev/","replyRef":"2025-10-24T17:23:00.301Z"},"updated":"2025-10-24T17:23:02.973Z","response":{"webhook_id":"936929561302675456","type":20,"tts":false,"timestamp":"2025-10-24T17:23:02.917000+00:00","position":0,"pinned":false,"nonce":"1025172301713382376","mentions":[],"mention_roles":[],"mention_everyone":false,"interaction_metadata":{"user":{"username":"matthieu_leblanc_975","public_flags":0,"primary_guild":null,"id":"9876543210123456789","global_name":null,"display_name_styles":null,"discriminator":"0","collectibles":null,"clan":null,"avatar_decoration_data":null,"avatar":null},"type":2,"name":"prefer variability","id":"1431694560119095357","command_type":1,"authorizing_integration_owners":{"0":"0"}},"interaction":{"user":{"username":"matthieu_leblanc_975","public_flags":0,"primary_guild":null,"id":"9876543210123456789","global_name":null,"display_name_styles":null,"discriminator":"0","collectibles":null,"clan":null,"avatar_decoration_data":null,"avatar":null},"type":2,"name":"prefer variability","id":"1431694560119095357"},"id":"1431694560899366922","flags":192,"embeds":[],"edited_timestamp":null,"content":"","components":[],"channel_type":1,"channel_id":"1234567890987654321","author":{"username":"Midjourney Bot","public_flags":589824,"primary_guild":null,"id":"936929561302675456","global_name":null,"display_name_styles":null,"discriminator":"9282","collectibles":null,"clan":null,"bot":true,"avatar_decoration_data":null,"avatar":"b9c7b4c65e3c66f246b9a6741bd3cbe5"},"attachments":[],"application_id":"936929561302675456"}},"seq":18,"ts":"17:23:02.987"}

data: {"event":"midjourney_completed","job":{"jobid":"j1024172301713382376-u12345-c1234567890987654321-bot:midjourney","verb":"variability","status":"completed","created":"2025-10-24T17:23:01.713Z","request":{"replyUrl":"https://api-callback.matthieu.leblanc.workers.dev/","replyRef":"2025-10-24T17:23:00.301Z"},"updated":"2025-10-24T17:23:03.611Z","response":{"webhook_id":"936929561302675456","type":20,"tts":false,"timestamp":"2025-10-24T17:23:02.917000+00:00","position":0,"pinned":false,"mentions":[],"mention_roles":[],"mention_everyone":false,"interaction_metadata":{"user":{"username":"matthieu_leblanc_975","public_flags":0,"primary_guild":null,"id":"9876543210123456789","global_name":null,"display_name_styles":null,"discriminator":"0","collectibles":null,"clan":null,"avatar_decoration_data":null,"avatar":null},"type":2,"name":"prefer variability","id":"1431694560119095357","command_type":1,"authorizing_integration_owners":{"0":"0"}},"interaction":{"user":{"username":"matthieu_leblanc_975","public_flags":0,"primary_guild":null,"id":"9876543210123456789","global_name":null,"display_name_styles":null,"discriminator":"0","collectibles":null,"clan":null,"avatar_decoration_data":null,"avatar":null},"type":2,"name":"prefer variability","id":"1431694560119095357"},"id":"1431694560899366922","flags":64,"embeds":[],"edited_timestamp":null,"content":"Strong variability mode turned on! Clicking the variation buttons will now make your variations stronger! You can always turn this off by running `/prefer variability` again.","components":[],"channel_type":1,"channel_id":"1234567890987654321","author":{"username":"Midjourney Bot","public_flags":589824,"primary_guild":null,"id":"936929561302675456","global_name":null,"display_name_styles":null,"discriminator":"9282","collectibles":null,"clan":null,"bot":true,"avatar_decoration_data":null,"avatar":"b9c7b4c65e3c66f246b9a6741bd3cbe5"},"attachments":[],"application_id":"936929561302675456","settings":{"variability":true}},"code":200},"seq":21,"ts":"17:23:03.624"}

Model

See Job Response Model for complete response structure.

Variability mode setting will be available in response.settings when job completes:

settings?: {
  variability?: boolean       // Variation mode: true = High/Strong, false = Low/Subtle
}

Examples

The examples below show the JSON response format (stream: false). For real-time SSE streaming examples, see the SSE Streaming Guide.

  • curl -H "Authorization: Bearer YOUR_API_TOKEN" \
         -H "Content-Type: application/json" \
         -X POST "https://api.useapi.net/v3/midjourney/jobs/variability" \
         -d '{"stream":false}'
    
  • const response = await fetch('https://api.useapi.net/v3/midjourney/jobs/variability', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_TOKEN',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        stream: false
      })
    });
    
    const result = await response.json();
    console.log('Job created:', result.jobid);
    
    // Poll for completion using GET /jobs/jobid
    // Or use webhook with replyUrl parameter
    
  • import requests
    
    response = requests.post(
        'https://api.useapi.net/v3/midjourney/jobs/variability',
        headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
        json={'stream': False}
    )
    
    result = response.json()
    print('Job created:', result['jobid'])
    
    # Poll for completion using GET /jobs/jobid
    # Or use webhook with replyUrl parameter
    

Try It