Midjourney /imagine command
October 27, 2025
Table of contents
Generate images or videos from text prompts using Midjourney’s /imagine command.
We provide full support for video generation, including all video-specific parameters such as --video, --motion low, --motion high, --raw, --loop, and --end. See official documentation for details.
Your current Midjourney Settings and Presets will be used.
https://api.useapi.net/v3/midjourney/jobs/imagine
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
API tokenis required, see Setup useapi.net for details.
Request Body
{
"prompt": "a cat in a hat --ar 16:9",
"stream": true,
"channel": "1234567890123456789",
"replyUrl": "https://your-server.com/webhook",
"replyRef": "your-reference-id"
}
Parameters
-
channelis optional. Discord channel ID to use. See GET /accounts for configured channels. If not provided, API automatically selects available channel with capacity. Specify when you want to use a specific configured channel. -
promptis required. Midjourney /imagine prompt. Maximum length 5000 characters. streamis optional (default:true).true- ReturnsContent-Type: text/event-streamwith live progress events. See SSE Streaming Guidefalse- ReturnsContent-Type: application/jsonwith initial job state. Use GET /jobs/jobidto retrieve updates and results
-
replyUrlis optional. Webhook URL for real-time job event callbacks. If channel has defaultreplyUrlconfigured, it will be used when job-specific one is not provided. All job events POST-ed to this URL as they occur.
Overrides channel-levelreplyUrlif specified.
Maximum length 1024 characters. replyRefis optional. Your reference ID stored with job.
Returned in all responses and callbacks asresponse.replyRef.
Maximum length 1024 characters.
Responses
-
Real-time SSE streaming (
stream: true)Returns
Content-Type: text/event-streamwith live events. See SSE Event Format for details. -
Job created successfully (
stream: false).
Use returnedjobidwith GET /jobs/jobidto poll status, or wait for webhook callbacks ifreplyUrlprovided.{ "jobid": "j1023141520123456789i-u12345-c1234567890123456789-bot:midjourney", "verb": "imagine", "jobType": "image", "status": "created", "created": "2025-10-23T14:15:20.123Z", "updated": "2025-10-23T14:15:20.456Z", "request": { "prompt": "a cat in a hat --ar 16:9", "stream": false, "replyUrl": "https://your-server.com/webhook", "replyRef": "your-reference-id" } } -
Validation error.
{ "error": "Parameter prompt is required" } -
{ "error": "Unauthorized" } -
{ "error": "Account has no subscription or subscription expired" } -
Channel at capacity or rate limited. Wait 10-30 seconds and retry.
{ "error": "Channel 1234567890123456789 is busy executing 3 image jobs" } -
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." }
Model
See Job Response Model for complete response structure.
Examples
-
# SSE streaming curl -N -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -X POST "https://api.useapi.net/v3/midjourney/jobs/imagine" \ -d '{"prompt":"a cat in a hat","stream":true}' # Fire-and-forget with webhook curl -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -X POST "https://api.useapi.net/v3/midjourney/jobs/imagine" \ -d '{"prompt":"a cat in a hat","stream":false,"replyUrl":"https://your-server.com/webhook"}' -
const token = 'YOUR_API_TOKEN'; // SSE streaming const response = await fetch('https://api.useapi.net/v3/midjourney/jobs/imagine', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ prompt: 'a cat in a hat', stream: true }) }); const reader = response.body.getReader(); const decoder = new TextDecoder('utf-8'); let buffer = ''; while (true) { const { done, value } = await reader.read(); if (done) break; buffer += decoder.decode(value, { stream: true }); const lines = buffer.split('\n'); buffer = lines.pop(); for (const line of lines) { if (line.startsWith('data:')) { const eventData = JSON.parse(line.slice(5)); console.log('Event:', eventData); if (eventData.status === 'completed') { console.log('Job completed!', eventData.response); } } } } -
import requests token = 'YOUR_API_TOKEN' headers = { 'Authorization': f'Bearer {token}', 'Content-Type': 'application/json' } # SSE streaming response = requests.post( 'https://api.useapi.net/v3/midjourney/jobs/imagine', headers=headers, json={'prompt': 'a cat in a hat', 'stream': True}, stream=True ) for line in response.iter_lines(): if line: line_str = line.decode('utf-8') if line_str.startswith('data:'): import json event_data = json.loads(line_str[5:]) print('Event:', event_data) if event_data.get('status') == 'completed': print('Job completed!', event_data.get('response'))