Midjourney collaborative generation: who can see jobs on Sume?
Midjourney plans ways to generate together. On Sume, an API key reads only the jobs its own member created, so sharing takes a plan. Here are the rules.

Midjourney's 10/1/26 changelog lists "better ways to share and generate together, collaboratively" among upcoming features. If your team wants the same on the Sume image API, the first thing to know is who can read which job. Per the Sume docs, an API key reads only the jobs its own member created in the key's workspace, so a teammate's key cannot list your image jobs. Sharing needs a plan.
What Midjourney says
From the changelog.
| Date | Fact |
|---|---|
| 10/1/26 | Upcoming: better ways to share and generate together, collaboratively. |
The Sume rule
The Jobs and results docs set the access rules. A job belongs to its workspace and to the member whose key created it. Its usage is recorded against that member, and only that member can cancel it. Reads (GET /v1/jobs/:id, /status, /result, /events and the list) follow the same rule.
Everything else returns 404 not_found: other workspaces, other members' jobs, and for an API key any job its member did not create. A thread_id filter narrows a list; it never widens what a key can read.
Three workable sharing patterns
Choose one before the team starts:
- One service key: a backend holds a single key and every teammate goes through it. All jobs belong to that member, and the backend can list them all. Add your own user label in
metadata. - Per-person keys and a shared store: each person generates with their own key, and every completed result URL is written to a shared table or folder.
- Webhook to a shared channel: submit with
mode: "webhook"and post eachjob.completedevent into a team feed.
A shared table row
Whatever the pattern, record the same few fields so anyone can find a result without a key: job id, requester, prompt, model, result URL and time. The job id alone is not enough for a teammate, because their key cannot read it.
import json, time
def share_row(job_id, user, prompt, model, url, path="team-images.jsonl"):
row = {
"job": job_id, "user": user, "prompt": prompt,
"model": model, "url": url, "at": int(time.time()),
}
with open(path, "a") as f:
f.write(json.dumps(row) + "\n")
return rowCost attribution
Usage is recorded against the member whose key created the job. With one service key, your bill shows one member, so keep the requester label in your own table if you need per-person reporting. GET /v1/usage can be filtered by job_id, thread_id or run_id to total costs.
Before you roll it out
Decide who owns the key, where results live, and how long you keep them. Sume-hosted result URLs are signed, so copy anything you need long term into your own storage.
Sources
Related posts
More in Developers
- Midjourney edit history: keep an edit lineage with Sume job metadata
Midjourney added edit-history navigation and plans persistent edit history. For the Sume image API, build your own lineage with metadata and the jobs list.
- Midjourney Enhance replaces Upscale: the Sume image upscale API
Midjourney's v8.2 editor swapped its Upscale button for Enhance. To upscale from code, Sume has a dedicated image upscale route with factor 1 to 4.
- Midjourney Style Profiles tab: a style library file for Sume
Midjourney added Style Profiles and Featured tabs with detail pages. For the Sume image API, keep a small JSON style library and merge it into each request.
- Midjourney V8.1 made HD the default: which Sume image models list 2K?
Midjourney V8.1 defaults to HD at lower cost. On the Sume image API, resolution tiers are per model; this script lists which catalog models advertise 2K or 4K.
Written by Sume