cd /news/generative-ai/midjourney-v8-2-api-async-calls-4-im… · home › topics › generative-ai › article
[ARTICLE · art-159775] src=dev.to ↗ pub= topic=generative-ai verified=true sentiment=· neutral

Midjourney v8.2 API: Async Calls, 4-Image Jobs, --ar/--hd Sizes and Per-Image Cost

HopBase has made Midjourney v8.2 (model ID midjourney-v8-2) available through its OpenAI-compatible image generation API, submitting jobs via POST /v1/images/generations and polling results through GET /v1/video/tasks/{task_id}. Each job returns a fixed 2x2 grid of four images, with aspect ratio and quality set through prompt flags (--ar and --hd for native 2K) rather than request fields, and billing at $0.0067 per 1K image or $0.0108 per 2K image. The provider rejects unsupported Midjourney parameters at submit time and returns signed image links valid for 24 hours.

by read4 min views4 publishedOct 28, 2026

Midjourney v8.2 (model ID midjourney-v8-2) is now live on HopBase, submitted over the OpenAI-compatible POST /v1/images/generations endpoint and polled for results with GET /v1/video/tasks/{task_id}. The biggest difference from most image models is that every job returns a fixed set of 4 candidate images, and aspect ratio and quality are written into the prompt (--ar sets the ratio, --hd renders at native 2K) instead of being passed as request fields. Billing follows the number of images actually returned: $0.0067 per image at 1K and $0.0108 per image at 2K. Check that your key can see it with GET /v1/models.

POST /v1/images/generations returns 202 with a task ID, then you poll GET /v1/video/tasks/{task_id}. Status moves through queued → processing → completed, and only completed and failed are terminal.midjourney-v8-2. The authoritative ID is whatever GET /v1/models returns.images field.outputs carries 4 signed links, valid for 24 hours from the moment the task completes. Polling again returns the same links without extending them, and expired links return 410, so download inside that window.usage.cost_usd, the amount actually deducted, so you can reconcile cost per job in code.

Tier How to trigger Per image Per job (4 images)
Standard Default $0.0067 $0.0267
2K Add --hd to the prompt $0.0108 $0.0433

Midjourney prices officially by GPU time (0.8 GPU minutes for a standard job, 1.3 minutes with --hd), and we convert that official rate into a per-image price. Billing follows the number of images actually returned, so a single call costs four images' worth — put that in your budget model rather than estimating from a one-image price. To compare against single-image models, multiply their per-image price by the number of candidates you would otherwise generate — see live pricing at https://hop-base.com/pricing. The console itemises the actual cost of every request.

Size is not a request field; it comes from --ar in the prompt, and adding --hd renders at native 2K. Measured values:

--ar Standard With --hd
1:1 (default) 1024 × 1024 2048 × 2048
16:9 1456 × 816 2944 × 1648
9:16 816 × 1456 1648 × 2944
4:3 1232 × 928 2544 × 1904
21:9 1680 × 720 3376 × 1440

--ar only accepts integer ratios, so --ar 1.5:1 is rejected. The ceiling is 14:1, tightened to 4:1 once --hd is on.

--ar, --hd, --s (0-1000), --c (0-100), --weird (0-3000), --iw (0-3), --sref with --sw, --no, --seed, --tile, --exp.--q/--quality, --niji, --repeat, --oref, --cref, --stealth, --stop, --draft, and :: multi-prompt weighting. We reject this set at submit time rather than forwarding it: some of these the model silently ignores (you pay and get nothing for it), and the rest only fail after the job has run for tens of seconds. The error message names the parameter and why it is not supported.

curl https://api.hop-base.com/v1/images/generations \
  -H "Authorization: Bearer sk-your-key" \
  -H "Content-Type: application/json" \
  -d '{"model":"midjourney-v8-2","prompt":"a red apple on a wooden table, studio light --ar 16:9"}'

curl https://api.hop-base.com/v1/video/tasks/YOUR_TASK_ID \
  -H "Authorization: Bearer sk-your-key"

No. Every Midjourney generation mode returns a fixed 2×2 grid of four candidate images. That is how the model itself works, not a restriction added on our side. Neither the image-count field in the request nor --repeat changes the result, which is why we do not accept any value of n other than 4 — better to say so at submit time than to silently charge you for four.

In the prompt: --ar sets the ratio and --hd renders at native 2K. The quality field in the request body has no effect on this model and is rejected if you send it. The full size table is above.

Yes — at most 1, passed in the images field, with --iw (0-3) to tune how strongly it is followed; for style references, use --sref together with --sw. Note that v8.2 does not support --oref or --cref; Midjourney has replaced them with its new editing models.

No. Only jobs that actually produce images are billed; failed jobs cost nothing. If a prompt is stopped by content moderation the response gives an explicit failure reason, so you can rewrite it and retry.

PER_IMAGE = {"1k": 0.0067, "2k": 0.0108}   # official list price, USD per returned image
def batch_cost(jobs: int, tier: str = "1k") -> float:
    return jobs * 4 * PER_IMAGE[tier]        # every job returns 4 images

print(batch_cost(500))        # 500 standard jobs -> ~$13.40
print(batch_cost(500, "2k"))  # 500 --hd jobs     -> ~$21.60

Full parameter reference and error codes: Midjourney v8.2 docs. Live list prices for every model: hop-base.com/pricing. Originally published on the HopBase blog.

── more in #generative-ai 4 stories · sorted by recency
── more on @midjourney 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/midjourney-v8-2-api-…] indexed:0 read:4min 2026-10-28 · —