Midjourney /describe Command
October 27, 2025
Table of contents
- Request Headers
- Request Body
- Parameters
- Response • JSON •
stream: false - Response • SSE Stream •
stream: true - Model
- Examples
- Try It
Generate text prompts from an image using Midjourney’s /describe command. Returns 4 prompt suggestions.
https://api.useapi.net/v3/midjourney/jobs/describe
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
{
"imageUrl": "https://example.com/image.jpg",
"stream": true,
"replyUrl": "https://your-server.com/webhook"
}
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. imageUrlORimageBlobis required (mutually exclusive).imageUrl- URL to image. Maximum file size: 10 MB.imageBlob- Image file upload, useContent-Type: multipart/form-data. Maximum file size: 10 MB.
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.
Response • JSON • stream: false
Response with content-type: application/json.
-
Job created successfully. Use returned
jobidwith GET /jobs/jobidto poll status, or wait for webhook callbacks ifreplyUrlprovided.{ "jobid": "j1024182321776001078-u12345-c1234567890987654321-bot:midjourney", "verb": "describe", "status": "created", "created": "2025-10-24T18:23:21.776Z", "request": { "replyUrl": "https://api-callback.matthieu.leblanc.workers.dev/", "replyRef": "2025-10-24T18:23:19.669Z", "stream": false, "describeUrl": "blob" } } -
{ "error": "Either imageUrl or imageBlob is required" } -
{ "error": "Unauthorized" } -
{ "error": "Account has no subscription or subscription expired" } -
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":"j1024182234526029456-u12345-c1234567890987654321-bot:midjourney","seq":0,"ts":"18:22:35.843"}
data: {"event":"midjourney_created","job":{"jobid":"j1024182234526029456-u12345-c1234567890987654321-bot:midjourney","verb":"describe","status":"created","created":"2025-10-24T18:22:34.526Z","request":{"replyUrl":"https://api-callback.matthieu.leblanc.workers.dev/","replyRef":"2025-10-24T18:22:31.696Z","describeUrl":"blob"},"updated":"2025-10-24T18:22:37.785Z"},"seq":12,"ts":"18:22:37.805"}
data: {"event":"midjourney_progress","job":{"jobid":"j1024182234526029456-u12345-c1234567890987654321-bot:midjourney","verb":"describe","status":"progress","created":"2025-10-24T18:22:34.526Z","request":{"replyUrl":"https://api-callback.matthieu.leblanc.workers.dev/","replyRef":"2025-10-24T18:22:31.696Z","describeUrl":"blob"},"updated":"2025-10-24T18:22:38.704Z","response":{"content":"","components":[]}},"seq":14,"ts":"18:22:38.715"}
data: {"event":"midjourney_completed","job":{"jobid":"j1024182234526029456-u12345-c1234567890987654321-bot:midjourney","verb":"describe","status":"completed","created":"2025-10-24T18:22:34.526Z","request":{"replyUrl":"https://api-callback.matthieu.leblanc.workers.dev/","replyRef":"2025-10-24T18:22:31.696Z","describeUrl":"blob"},"updated":"2025-10-24T18:22:42.510Z","response":{"embeds":[{"description":"1️⃣ a vintage bmw motorcycle from the early showa era, with an engine visible through its side panels and two wheels on a white background. the bike is black in color, showcasing classic japanese design elements such as chrome accents and leather seats. it's positioned at eye level to highlight details like brand logos and steel frame construction. --ar 16:9\n\n2️⃣ a vintage bmw motorcycle from the early 1920s, displayed on a white background, showcasing its classic design and powerful engine. the image was created using focus stacking, a photographic technique that combines multiple images taken at different focus distances to achieve a greater depth of field. the photograph was taken with provia, a type of color reversal film known for its vivid and accurate color reproduction. --ar 16:9\n\n3️⃣ a vintage bmw motorcycle from the early 20th century, black with silver accents and a leather seat, displayed on a white background, high resolution, captured with a canon eos camera, studio lighting, product photography, minimalistic style, focusing on the intricate details of the engine and frame, side view, perspective angle. --ar 16:9\n\n4️⃣ a vintage bmw motorcycle with an engine, a black body, and chrome details on the side stands against a white background. the bike is centered in the frame, showcasing its classic design with two front wheels and one rear wheel. it has a leather seat, steel handlebar levers, and visible details from right to left, in the style of bmw. --ar 16:9"}],"content":"1️⃣ a vintage bmw motorcycle from the early showa era...[abbreviated for brevity]","components":[{"components":[{"custom_id":"MJ::Job::PicReader::1"},{"custom_id":"MJ::Job::PicReader::2"},{"custom_id":"MJ::Job::PicReader::3"},{"custom_id":"MJ::Job::PicReader::4"},{"custom_id":"MJ::Picread::Retry"}]},{"components":[{"custom_id":"MJ::Job::PicReader::all"}]}]},"code":200},"seq":17,"ts":"18:22:42.524"}
Model
See Job Response Model for complete response structure.
Examples
The examples below show the JSON response format (stream: false). For real-time SSE streaming examples, see the SSE Streaming Guide.
-
# With URL curl -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -X POST "https://api.useapi.net/v3/midjourney/jobs/describe" \ -d '{"imageUrl":"https://example.com/image.jpg","stream":false}' # With file upload curl -H "Authorization: Bearer YOUR_API_TOKEN" \ -F "[email protected]" \ -F "stream=false" \ "https://api.useapi.net/v3/midjourney/jobs/describe" -
// With URL const response = await fetch('https://api.useapi.net/v3/midjourney/jobs/describe', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_API_TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ imageUrl: 'https://example.com/image.jpg', 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 # With URL response = requests.post( 'https://api.useapi.net/v3/midjourney/jobs/describe', headers={'Authorization': 'Bearer YOUR_API_TOKEN'}, json={ 'imageUrl': 'https://example.com/image.jpg', 'stream': False } ) result = response.json() print('Job created:', result['jobid']) # Poll for completion using GET /jobs/jobid # Or use webhook with replyUrl parameter