Midjourney /describe Command

October 27, 2025

Table of contents

  1. Request Headers
  2. Request Body
  3. Parameters
  4. Responses
  5. Model
  6. Examples
  7. 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

  • channel is 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.

  • imageUrl OR imageBlob is required (mutually exclusive).
    • imageUrl - URL to image
    • imageBlob - Image file upload, use Content-Type: multipart/form-data.
  • 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. If channel has default replyUrl configured, it will be used when job-specific one is not provided. All job events POST-ed to this URL as they occur.
    Overrides channel-level replyUrl if specified.
    Maximum length 1024 characters.

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

Responses

  • Real-time SSE streaming (stream: true)

    Returns Content-Type: text/event-stream with live events. See SSE Event Format for details.

  • 201 Created

    Job created successfully.

    {
      "jobid": "j1023...",
      "verb": "describe",
      "status": "created",
      "request": {
        "imageUrl": "https://example.com/image.jpg",
        "stream": false
      }
    }
    
  • 400 Bad Request

    {
      "error": "Either imageUrl or imageBlob 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."
    }
    

Model

See Job Response Model for complete response structure.

Examples

  • # 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":true}'
    
    # With file upload
    curl -H "Authorization: Bearer YOUR_API_TOKEN" \
         -F "[email protected]" \
         -F "stream=true" \
         "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: true
      })
    });
    
    // With file upload
    const formData = new FormData();
    formData.append('imageBlob', fileInput.files[0]);
    formData.append('stream', 'true');
    
    const response2 = await fetch('https://api.useapi.net/v3/midjourney/jobs/describe', {
      method: 'POST',
      headers: {'Authorization': 'Bearer YOUR_API_TOKEN'},
      body: formData
    });
    
  • 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': True}
    )
    
    # With file upload
    files = {'imageBlob': open('image.jpg', 'rb')}
    data = {'stream': 'true'}
    response2 = requests.post(
        'https://api.useapi.net/v3/midjourney/jobs/describe',
        headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
        files=files,
        data=data
    )
    

Try It