CyHUB
РусскийGet an API key

Midjourney Editor API

Midjourney Editor edits your picture: Midjourney redraws the transparent areas of a PNG from the description. Remove something, replace the background or an object, extend the frame, and the rest stays as it was.

Developer: MidjourneyModel key in the API: midjourney

For AI assistants:Download .mdAll documentation .mdOpen as text

Connect in three steps

  1. Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
  2. Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
  3. Run a task and collect the resultPOST /v1/tasks starts a task, GET /v1/tasks/{id} shows its status and files.

Ready-to-use code

Replace YOUR_API_KEY with your key. The code starts a task and waits for the result. In cURL, repeat the second request with the id from the first response instead of TASK_ID until status becomes succeeded.

cURL
curl -X POST "https://api.cyhub.ai/v1/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "midjourney",
  "settings": {
    "version": "edit",
    "prompt": "A sunny beach with palm trees and a turquoise sea",
    "image_url": [
      "https://example.com/portrait-transparent-background.png"
    ],
    "speed": "fast"
  }
}'

curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
import time

import requests

API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

body = {
    "model": "midjourney",
    "settings": {
        "version": "edit",
        "prompt": "A sunny beach with palm trees and a turquoise sea",
        "image_url": [
            "https://example.com/portrait-transparent-background.png",
        ],
        "speed": "fast",
    },
}

response = requests.post(f"{API}/tasks", json=body, headers=HEADERS, timeout=60)
response.raise_for_status()
task = response.json()
while task["status"] in ("queued", "running"):
    time.sleep(5)
    task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
print(task["status"], task["result"])
Node.js
const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };

const body = {
  "model": "midjourney",
  "settings": {
    "version": "edit",
    "prompt": "A sunny beach with palm trees and a turquoise sea",
    "image_url": [
      "https://example.com/portrait-transparent-background.png"
    ],
    "speed": "fast"
  }
};

async function main() {
  let response = await fetch(`${API}/tasks`, { method: "POST", headers: HEADERS, body: JSON.stringify(body) });
  if (!response.ok) throw new Error(await response.text());
  let task = await response.json();
  while (task.status === "queued" || task.status === "running") {
    await new Promise((resolve) => setTimeout(resolve, 5000));
    response = await fetch(`${API}/tasks/${task.id}`, { headers: HEADERS });
    task = await response.json();
  }
  console.log(task.status, task.result);
}

main();
Get a key

Price before the run

Prices as of 15.10.2026: from 3 ₽. POST /v1/price shows the exact price of your settings.

ModePrice
Midjourney Editorfrom 3 ₽

Send the same settings to POST /v1/price: the response shows the price of the run without charging you.

cURL
curl -X POST "https://api.cyhub.ai/v1/price" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "midjourney",
  "settings": {
    "version": "edit",
    "prompt": "A sunny beach with palm trees and a turquoise sea",
    "image_url": [
      "https://example.com/portrait-transparent-background.png"
    ],
    "speed": "fast"
  }
}'
  • amount_minor: the price of the run in minor units (kopecks for rubles)
  • currency: the wallet currency
  • available_minor: how much your balance has for new tasks right now

Midjourney Editor

Midjourney redraws the transparent areas of your picture from the description and leaves the rest as it was: remove something, replace the background or an object, extend the frame. The edit is done by version 8.2.

Value of the version field: edit

Price in this mode from 3 ₽.

Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

promptRequired

What should appear in the transparent areas of the picture. Plain text only: Midjourney parameters (--ar, --v and others), links and options in curly braces are not accepted.

Type: StringMinimum characters: 1Maximum characters: 900
image_urlRequired

One URL of the PNG picture to edit: Midjourney redraws the transparent areas from the description and leaves the rest as it was. The long side is up to 2048 pixels, both sides divide by 16.

Type: List (String, uri)Maximum items: 1
speedOptional

Speed. Relaxed is cheaper but waits in a queue, Fast is quicker and costs more. The price depends on it.

Type: StringAllowed values: relaxedfastDefault: "relaxed"

Parameters not listed here are not accepted: the response is 422 unknown_setting.

The API sets these settings itself, do not send them: plain_text = true rework_button = false

Input

  • Pictures are URLs of JPEG, PNG or WebP files up to 10 MB each, a picture for the mask edit must be a PNG. A link must open without signing in and without redirects.
  • The description and exclusions are plain text only: no Midjourney parameters, links or options in curly braces. Settings and pictures are set with fields.
  • Midjourney draws the transparent areas of the picture anew from the description. To extend the frame, add transparent margins at the edges: the result has the proportions of the picture.
  • The picture goes to Midjourney as is, without adjustments: a PNG up to 2048 pixels on the long side, both sides divide by 16 evenly, for example 1024×1024, 1456×816 or 816×1456. Any other picture is refused and nothing is charged for it.
  • The price is the same as for an image from a description at the same speed.
FieldAcceptsFormatsFilesFile size up to
image_urlImagespng110 MB
How to send files

Request example

Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

Replace the background

JSON
{
  "model": "midjourney",
  "settings": {
    "version": "edit",
    "prompt": "A sunny beach with palm trees and a turquoise sea",
    "image_url": [
      "https://example.com/portrait-transparent-background.png"
    ],
    "speed": "fast"
  }
}

Extend the frame

JSON
{
  "model": "midjourney",
  "settings": {
    "version": "edit",
    "prompt": "A wide mountain valley at sunrise, mist over the river",
    "image_url": [
      "https://example.com/photo-with-transparent-margins.png"
    ]
  }
}

The price is calculated when the task is accepted, currency RUB.

Complete generation example

Output

  • Four JPEG pictures per run, each as a separate file.
  • With Fast the result usually comes in about a minute, Relaxed waits in a queue longer.
  • Upscaling and variations of finished pictures are only available in the bot.
KindFormatsHow manyNote
imagejpg4

A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

JSON
{
  "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "status": "succeeded",
  "finished_at": "2026-10-01T12:03:41+00:00",
  "result": {
    "caption": "Caption of the result: the model and its settings",
    "texts": [],
    "files_expire_at": "2026-10-08T12:03:41+00:00",
    "files_expired": false,
    "artifacts": [
      {
        "index": 0,
        "kind": "image",
        "filename": "image.jpg",
        "size": 1843200,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
      },
      {
        "index": 1,
        "kind": "image",
        "filename": "image.jpg",
        "size": 1843200,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/1"
      },
      {
        "index": 2,
        "kind": "image",
        "filename": "image.jpg",
        "size": 1843200,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/2"
      },
      {
        "index": 3,
        "kind": "image",
        "filename": "image.jpg",
        "size": 1843200,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/3"
      }
    ]
  }
}
How to read the result and download files

See also

Try Midjourney Editor through the API

One key opens every CyHUB model. Payment in rubles, and you see the price before the run.

Get an API key