What’s New in v3

October 27, 2025

Table of contents

  1. Real-time SSE Streaming
  2. Real-time Webhook Callbacks
  3. Flexible Request Formats
  4. Separate Image/Video Quotas
  5. Execute-Once Pattern
  6. Parent-Child Job Tracking
  7. Enhanced Error Handling
  8. Classic Polling Available
  9. Migration from v2

Real-time SSE Streaming

Get instant progress updates with stream: true:

  • No polling required - events arrive in real-time
  • Live progress percentages as jobs execute
  • Immediate status notifications (created → started → progress → completed/moderated/failed)
  • See SSE Streaming Guide for implementation details

Real-time Webhook Callbacks

Receive job events at your server with replyUrl:

  • Works with both stream: true and stream: false
  • All events POST-ed instantly to your webhook URL
  • Ideal for server-to-server integrations
  • No client connection required

Flexible Request Formats

Send requests as JSON or multipart/form-data:

  • Content-Type: application/json - Simple JSON payloads
  • Content-Type: multipart/form-data - File uploads (describe, blend)

Separate Image/Video Quotas

Better resource management with independent limits:

  • maxImageJobs - Concurrent image generation limit
  • maxVideoJobs - Concurrent video generation limit
  • Optimized for mixed workloads

Execute-Once Pattern

U1-U4 upscale buttons and seed retrieval can only be executed once per job:

  • Prevents accidental duplicate upscales and redundant seed requests
  • Subsequent requests return existing result immediately
  • Cleaner job tracking and efficient resource usage

Parent-Child Job Tracking

Jobs automatically track their children:

  • response.children shows all child jobs
  • Easy navigation through job hierarchies
  • Track imagine → upscale → variations workflows

Enhanced Error Handling

More specific HTTP status codes:

  • 410 - Job expired (older than 62 days)
  • 596 - Moderation/CAPTCHA required (with email notification)

Classic Polling Available

Traditional polling still supported via GET /jobs/jobid:

  • Use as fallback when SSE/webhooks unavailable
  • Returns same job data as SSE events
  • Last resort approach - prefer SSE or webhooks

Migration from v2

Important: Same Discord account cannot be used for both v2 and v3 APIs simultaneously.

To migrate:

  1. Delete your Midjourney account from v2 API
  2. Configure the account in v3 API
  3. Update your code to use v3 endpoints
  4. Enable stream: true for real-time updates (recommended)

See account management endpoints: