{
  "openapi": "3.1.0",
  "info": {
    "title": "Midjourney API",
    "version": "2026-10-17",
    "description": "Staged versioned contract. Live end-to-end acceptance and activation are pending. Failed requests are not charged."
  },
  "servers": [
    {
      "url": "https://api.seedrouter.ai"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/v1/images/generations": {
      "post": {
        "operationId": "createMidjourneyTask",
        "summary": "Create a Midjourney image operation",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MidjourneyRequest"
              },
              "example": {
                "model": "midjourney-v8.2",
                "prompt": "A red paper boat on a calm pond at sunrise",
                "speed": "fast",
                "size": "16:9",
                "raw": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Accepted task. Keep the task ID and poll for completion.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MidjourneyTask"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unavailable parameter combination."
          },
          "401": {
            "description": "Authentication required."
          },
          "403": {
            "description": "Task or model access denied."
          },
          "503": {
            "description": "Model not currently available."
          }
        }
      }
    },
    "/v1/tasks/{task_id}": {
      "get": {
        "operationId": "getMidjourneyTask",
        "summary": "Read an owned task",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Task status and any completed output.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MidjourneyTask"
                }
              }
            }
          },
          "404": {
            "description": "Task not found."
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    },
    "schemas": {
      "MidjourneyRequest": {
        "type": "object",
        "required": [
          "model"
        ],
        "additionalProperties": true,
        "description": "Staged contract: live end-to-end acceptance and activation are pending. Unknown JSON fields are discarded. Known fields must not be null. Structured fields override extra flags, which override prompt flags. Unsupported native flags, quoted known control flags, and conflicting duplicates within one source are errors. All numeric parameters stay within the JSON/JavaScript safe magnitude 9007199254740991. Valid model syntax can still be unavailable; unsupported combinations fail before submission.",
        "oneOf": [
          {
            "title": "midjourney-v8.2",
            "type": "object",
            "required": [
              "model"
            ],
            "description": "V8.2: Relax/Fast/Turbo standard generation; quality 0.25/0.5/1/2 and character/style/depth references are documented inputs, with version effects still unverified. Draft requires a compatible Fast path without the extra content check. Stop/profile also need that narrower path, which cannot accept quality or character reference. HD+Turbo is unpriced. Real upscale semantics are unverified.",
            "properties": {
              "model": {
                "const": "midjourney-v8.2"
              },
              "version": {
                "const": "8.2"
              },
              "niji": {
                "const": false
              },
              "speed": {
                "enum": [
                  "relax",
                  "fast",
                  "turbo"
                ]
              },
              "iw": {
                "type": "number",
                "minimum": 0,
                "maximum": 3
              },
              "quality": {
                "anyOf": [
                  {
                    "type": "number",
                    "enum": [
                      0.25,
                      0.5,
                      1,
                      2
                    ]
                  },
                  {
                    "type": "string",
                    "description": "Numeric string parsed as one of 0.25, 0.5, 1, 2."
                  }
                ]
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "oref"
                  ]
                },
                {
                  "required": [
                    "ow"
                  ]
                }
              ]
            }
          },
          {
            "title": "midjourney-v8.1",
            "type": "object",
            "required": [
              "model"
            ],
            "description": "V8.1: same current request bounds as V8.2, with an independent model ID and validation. Each version/parameter combination still needs live verification.",
            "properties": {
              "model": {
                "const": "midjourney-v8.1"
              },
              "version": {
                "const": "8.1"
              },
              "niji": {
                "const": false
              },
              "speed": {
                "enum": [
                  "relax",
                  "fast",
                  "turbo"
                ]
              },
              "iw": {
                "type": "number",
                "minimum": 0,
                "maximum": 3
              },
              "quality": {
                "anyOf": [
                  {
                    "type": "number",
                    "enum": [
                      0.25,
                      0.5,
                      1,
                      2
                    ]
                  },
                  {
                    "type": "string",
                    "description": "Numeric string parsed as one of 0.25, 0.5, 1, 2."
                  }
                ]
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "oref"
                  ]
                },
                {
                  "required": [
                    "ow"
                  ]
                }
              ]
            }
          },
          {
            "title": "midjourney-v7",
            "type": "object",
            "required": [
              "model"
            ],
            "description": "V7: quality 0.25/0.5/1/2/4, iw 0–3, Draft and conditional Omni Reference. Omni+Draft has no approved price; quality 4 with Omni is accepted. HD is a documented no-op with no HD surcharge. Character/depth references and Omni/profile have different compatible request paths.",
            "properties": {
              "model": {
                "const": "midjourney-v7"
              },
              "version": {
                "const": "7"
              },
              "niji": {
                "const": false
              },
              "speed": {
                "enum": [
                  "relax",
                  "fast",
                  "turbo"
                ]
              },
              "iw": {
                "type": "number",
                "minimum": 0,
                "maximum": 3
              },
              "quality": {
                "anyOf": [
                  {
                    "type": "number",
                    "enum": [
                      0.25,
                      0.5,
                      1,
                      2,
                      4
                    ]
                  },
                  {
                    "type": "string",
                    "description": "Numeric string parsed as one of 0.25, 0.5, 1, 2, 4."
                  }
                ]
              }
            }
          },
          {
            "title": "midjourney-v6.1",
            "type": "object",
            "required": [
              "model"
            ],
            "description": "V6.1: quality 0.25/0.5/1/2/4; character/style/depth references; stop 10–100; explicit profile on compatible non-Relax requests. HD is a standard-output no-op; no Draft or Omni Reference.",
            "properties": {
              "model": {
                "const": "midjourney-v6.1"
              },
              "version": {
                "const": "6.1"
              },
              "niji": {
                "const": false
              },
              "speed": {
                "enum": [
                  "relax",
                  "fast",
                  "turbo"
                ]
              },
              "iw": {
                "type": "number",
                "minimum": 0,
                "maximum": 3
              },
              "quality": {
                "anyOf": [
                  {
                    "type": "number",
                    "enum": [
                      0.25,
                      0.5,
                      1,
                      2,
                      4
                    ]
                  },
                  {
                    "type": "string",
                    "description": "Numeric string parsed as one of 0.25, 0.5, 1, 2, 4."
                  }
                ]
              },
              "draft": {
                "const": false
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "oref"
                  ]
                },
                {
                  "required": [
                    "ow"
                  ]
                }
              ]
            }
          },
          {
            "title": "midjourney-v6",
            "type": "object",
            "required": [
              "model"
            ],
            "description": "V6: Fast/Turbo generation, Fast parent actions. Quality 0.25/0.5/1/2/4; integer ratios at most 14:1; numeric seed 0–4294967295. Character/style reference and explicit profile supported; depth and extra nsfw_check unavailable. HD is a no-op.",
            "properties": {
              "model": {
                "const": "midjourney-v6"
              },
              "version": {
                "const": "6"
              },
              "niji": {
                "const": false
              },
              "speed": {
                "enum": [
                  "fast",
                  "turbo"
                ]
              },
              "iw": {
                "type": "number",
                "minimum": 0,
                "maximum": 3
              },
              "quality": {
                "anyOf": [
                  {
                    "type": "number",
                    "enum": [
                      0.25,
                      0.5,
                      1,
                      2,
                      4
                    ]
                  },
                  {
                    "type": "string",
                    "description": "Numeric string parsed as one of 0.25, 0.5, 1, 2, 4."
                  }
                ]
              },
              "draft": {
                "const": false
              },
              "seed": {
                "type": "number",
                "minimum": 0,
                "maximum": 4294967295
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "oref"
                  ]
                },
                {
                  "required": [
                    "ow"
                  ]
                },
                {
                  "required": [
                    "dref"
                  ]
                },
                {
                  "required": [
                    "dw"
                  ]
                }
              ]
            }
          },
          {
            "title": "midjourney-v5.2",
            "type": "object",
            "required": [
              "model"
            ],
            "description": "V5.2: quality 0.25/0.5/1/2, iw 0–3, character/style/depth reference and style strings in the general API contract. Seed/stylize/chaos/weird/cw/sw/stop are integer fields; sw 0–1000. No HD/Draft/Omni/profile. Real upscales use 2x/4x.",
            "properties": {
              "model": {
                "const": "midjourney-v5.2"
              },
              "version": {
                "const": "5.2"
              },
              "niji": {
                "const": false
              },
              "speed": {
                "enum": [
                  "relax",
                  "fast",
                  "turbo"
                ]
              },
              "iw": {
                "type": "number",
                "minimum": 0,
                "maximum": 3
              },
              "quality": {
                "anyOf": [
                  {
                    "type": "number",
                    "enum": [
                      0.25,
                      0.5,
                      1,
                      2
                    ]
                  },
                  {
                    "type": "string",
                    "description": "Numeric string parsed as one of 0.25, 0.5, 1, 2."
                  }
                ]
              },
              "hd": {
                "const": false
              },
              "draft": {
                "const": false
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "oref"
                  ]
                },
                {
                  "required": [
                    "ow"
                  ]
                },
                {
                  "required": [
                    "profile"
                  ]
                }
              ]
            }
          },
          {
            "title": "midjourney-v5.1",
            "type": "object",
            "required": [
              "model"
            ],
            "description": "V5.1: same current request bounds as V5.2; no unsupported model-vendor restrictions are inferred. Individual reference effects still require verification.",
            "properties": {
              "model": {
                "const": "midjourney-v5.1"
              },
              "version": {
                "const": "5.1"
              },
              "niji": {
                "const": false
              },
              "speed": {
                "enum": [
                  "relax",
                  "fast",
                  "turbo"
                ]
              },
              "iw": {
                "type": "number",
                "minimum": 0,
                "maximum": 3
              },
              "quality": {
                "anyOf": [
                  {
                    "type": "number",
                    "enum": [
                      0.25,
                      0.5,
                      1,
                      2
                    ]
                  },
                  {
                    "type": "string",
                    "description": "Numeric string parsed as one of 0.25, 0.5, 1, 2."
                  }
                ]
              },
              "hd": {
                "const": false
              },
              "draft": {
                "const": false
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "oref"
                  ]
                },
                {
                  "required": [
                    "ow"
                  ]
                },
                {
                  "required": [
                    "profile"
                  ]
                }
              ]
            }
          },
          {
            "title": "niji-v7",
            "type": "object",
            "required": [
              "model"
            ],
            "description": "Niji 7: quality 0.25/0.5/1/2 and iw 0–3. General character/style/depth inputs are documented but effects remain unverified. Integer numeric fields and sw 0–1000. No stop, HD, Draft, Omni or profile; real upscale commands unverified.",
            "properties": {
              "model": {
                "const": "niji-v7"
              },
              "version": {
                "const": "7"
              },
              "niji": {
                "const": true
              },
              "speed": {
                "enum": [
                  "relax",
                  "fast",
                  "turbo"
                ]
              },
              "iw": {
                "type": "number",
                "minimum": 0,
                "maximum": 3
              },
              "quality": {
                "anyOf": [
                  {
                    "type": "number",
                    "enum": [
                      0.25,
                      0.5,
                      1,
                      2
                    ]
                  },
                  {
                    "type": "string",
                    "description": "Numeric string parsed as one of 0.25, 0.5, 1, 2."
                  }
                ]
              },
              "hd": {
                "const": false
              },
              "draft": {
                "const": false
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "oref"
                  ]
                },
                {
                  "required": [
                    "ow"
                  ]
                },
                {
                  "required": [
                    "profile"
                  ]
                },
                {
                  "required": [
                    "stop"
                  ]
                }
              ]
            }
          },
          {
            "title": "niji-v6",
            "type": "object",
            "required": [
              "model"
            ],
            "description": "Niji 6: quality 0.25/0.5/1/2/4, iw 0–3, character/style/depth references, stop and conditional profile. No Draft or Omni. HD is a no-op. Negative prompts cannot be combined with fields that require its incompatible alternate execution path.",
            "properties": {
              "model": {
                "const": "niji-v6"
              },
              "version": {
                "const": "6"
              },
              "niji": {
                "const": true
              },
              "speed": {
                "enum": [
                  "relax",
                  "fast",
                  "turbo"
                ]
              },
              "iw": {
                "type": "number",
                "minimum": 0,
                "maximum": 3
              },
              "quality": {
                "anyOf": [
                  {
                    "type": "number",
                    "enum": [
                      0.25,
                      0.5,
                      1,
                      2,
                      4
                    ]
                  },
                  {
                    "type": "string",
                    "description": "Numeric string parsed as one of 0.25, 0.5, 1, 2, 4."
                  }
                ]
              },
              "draft": {
                "const": false
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "oref"
                  ]
                },
                {
                  "required": [
                    "ow"
                  ]
                }
              ]
            }
          }
        ],
        "allOf": [
          {
            "if": {
              "required": [
                "action"
              ],
              "properties": {
                "action": {
                  "const": "describe"
                }
              }
            },
            "then": {
              "properties": {
                "model": {
                  "enum": [
                    "midjourney-v8.2",
                    "midjourney-v8.1",
                    "midjourney-v7",
                    "midjourney-v6.1",
                    "midjourney-v6",
                    "niji-v6"
                  ]
                },
                "speed": {
                  "const": "fast"
                },
                "nsfw_check": {
                  "const": false
                }
              }
            },
            "description": "Describe is Fast only for these six model IDs; omit nsfw_check or use false. It is available through the API or administrator controls."
          },
          {
            "if": {
              "required": [
                "ow"
              ]
            },
            "then": {
              "required": [
                "oref"
              ]
            }
          },
          {
            "not": {
              "required": [
                "oref",
                "draft"
              ],
              "properties": {
                "draft": {
                  "const": true
                }
              }
            },
            "description": "Combined Omni Reference and Draft pricing is unresolved."
          },
          {
            "if": {
              "required": [
                "model"
              ],
              "properties": {
                "model": {
                  "enum": [
                    "midjourney-v8.1",
                    "midjourney-v8.2"
                  ]
                }
              }
            },
            "then": {
              "not": {
                "required": [
                  "hd",
                  "speed"
                ],
                "properties": {
                  "hd": {
                    "const": true
                  },
                  "speed": {
                    "const": "turbo"
                  }
                }
              }
            },
            "description": "HD+Turbo has no approved price."
          }
        ],
        "properties": {
          "model": {
            "type": "string",
            "enum": [
              "midjourney-v8.2",
              "midjourney-v8.1",
              "midjourney-v7",
              "midjourney-v6.1",
              "midjourney-v6",
              "midjourney-v5.2",
              "midjourney-v5.1",
              "niji-v7",
              "niji-v6"
            ]
          },
          "action": {
            "type": "string",
            "default": "imagine",
            "enum": [
              "imagine",
              "variation",
              "upscale",
              "remix-strong",
              "remix-subtle",
              "remix",
              "reroll",
              "zoom",
              "pan",
              "blend",
              "describe",
              "inpaint",
              "modal"
            ],
            "description": "remix is an alias for remix-strong. Child operations require an owned parent task of the same model. Compatible variation/pan/zoom parents accept ordinary parameter overrides; mode-changing HD/Draft/Omni overrides remain unpriced. Non-V8 Remix is unavailable pending parent-mode pricing. Blend is recognized but unavailable pending version-preserving execution."
          },
          "prompt": {
            "type": "string",
            "description": "Text and optional native --parameters. Imagine requires a text description, including when images are supplied. Leading HTTP(S) image URLs are combined with image_urls, preserving order. No permutations. Ordinary multiprompt text is preserved; compatible request combinations apply. Maximum supported serialized prompt is 8,192 characters on some execution paths."
          },
          "image_urls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri",
              "pattern": "^https?://",
              "description": "Image prompt URL."
            },
            "description": "Publicly accessible HTTP(S) image URLs. PNG/JPEG/WebP at most 12 MiB each are recommended for broad compatibility; 12 MiB is enforced by some supported requests, not a universal limit. These formats are not an exclusive enum. Describe requires exactly one; blend requires 2–5. Child operations do not accept image_urls."
          },
          "speed": {
            "type": "string",
            "enum": [
              "relax",
              "fast",
              "turbo"
            ],
            "default": "fast",
            "description": "Fast is the default. Turbo generation is supported on V8.1/V8.2 for compatible requests; V8 Draft currently requires Fast. An unavailable speed is not silently changed."
          },
          "size": {
            "type": "string",
            "description": "Aspect ratio, not pixel dimensions. Positive finite W:H; decimal ratios have narrower availability. V6 requires integer ratios up to 14:1. V8 HD has an integer-ratio path limited to 4:1 and other combinations awaiting verification."
          },
          "quality": {
            "anyOf": [
              {
                "type": "number",
                "enum": [
                  0.25,
                  0.5,
                  1,
                  2,
                  4
                ]
              },
              {
                "type": "string",
                "description": "Numeric string; the parsed number must match the selected version quality values."
              }
            ],
            "description": "0.25/0.5/1/2 across all versions. Quality 4 additionally has compatible paths for V7/V6.1/V6/Niji6. Individual version effects are not yet live verified."
          },
          "seed": {
            "type": "number",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Finite seed within the JSON safe numeric range. Whole numbers have wider availability; fractional values require the nonnegative 32-bit range. Does not guarantee identical results across sessions, versions, or speeds."
          },
          "stylize": {
            "type": "number",
            "minimum": 0,
            "maximum": 1000,
            "description": "Artistic interpretation; fractional values have narrower availability. Omission preserves the model default."
          },
          "chaos": {
            "type": "number",
            "minimum": 0,
            "maximum": 100,
            "description": "Variation across the generated image set."
          },
          "weird": {
            "type": "number",
            "minimum": 0,
            "maximum": 3000,
            "description": "Unusual aesthetics; fractional values have narrower availability."
          },
          "raw": {
            "type": "boolean",
            "description": "Use Raw mode. style: raw is accepted as an alias."
          },
          "style": {
            "type": "string",
            "description": "raw is translated to raw: true unless explicitly overridden by raw:false. Other nonempty strings have compatible documented paths; version effects await verification."
          },
          "tile": {
            "type": "boolean",
            "description": "Generate a repeatable tile."
          },
          "negative_prompt": {
            "type": "string",
            "description": "Content to exclude; maps to --no. Must not contain embedded --parameters."
          },
          "iw": {
            "type": "number",
            "minimum": 0,
            "maximum": 3,
            "description": "Image weight 0–3 for all nine versions. No undocumented image dependency is inferred."
          },
          "cref": {
            "type": "string",
            "format": "uri",
            "pattern": "^https?://",
            "description": "Character-reference URL. Documented general input; per-version effect remains to be verified."
          },
          "cw": {
            "type": "number",
            "minimum": 0,
            "maximum": 100,
            "description": "Character weight; fractional values have narrower availability."
          },
          "sref": {
            "type": "string",
            "description": "Style reference across all nine versions. Current execution supports a single HTTP(S) URL. Multiple URLs, codes, random and weights are recognized syntax but unavailable."
          },
          "sw": {
            "type": "number",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Finite style weight. Integer 0–1000 has wider availability; other values require a compatible request."
          },
          "sv": {
            "type": "number",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Recognized numeric input; execution semantics remain unverified."
          },
          "oref": {
            "type": "string",
            "format": "uri",
            "pattern": "^https?://",
            "description": "Omni Reference URL, Midjourney V7 only. Omni+Draft remains unpriced; quality 4 is accepted on a compatible path."
          },
          "ow": {
            "type": "number",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Finite Omni weight; requires oref for correct reference billing."
          },
          "draft": {
            "type": "boolean",
            "description": "Draft generation, V7 or V8. V8 draft produces a 24-image concept set where supported; do not assume four images."
          },
          "hd": {
            "type": "boolean",
            "description": "V8 high definition. Supported pre-V8 requests accept it as a standard-output no-op with no HD charge. HD+Turbo remains unpriced."
          },
          "sd": {
            "type": "boolean",
            "description": "Explicit standard definition. True is currently unavailable; false has narrower availability; omit for standard output. This is not a separate diffusion model."
          },
          "stop": {
            "type": "number",
            "minimum": 10,
            "maximum": 100,
            "description": "Stop percentage. Niji7 unavailable; V7/V8 and fractional values have narrower compatible paths."
          },
          "profile": {
            "type": "string",
            "description": "Explicit nonempty profile code on compatible non-Relax requests. No account-default profile is silently substituted."
          },
          "exp": {
            "type": "number",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Recognized numeric input; execution semantics remain unverified."
          },
          "edit": {
            "type": "string",
            "description": "Recognized HTTP(S) reference URL tokens; no established execution mapping. Not an image_urls or modal alias."
          },
          "repeat": {
            "type": "integer",
            "minimum": 2,
            "maximum": 40,
            "description": "Recognized but unavailable: repeating a request requires a separate batch contract."
          },
          "dref": {
            "type": "string",
            "format": "uri",
            "pattern": "^https?://",
            "description": "Depth-reference URL, supported on compatible requests except V6. Per-version effect remains unverified."
          },
          "dw": {
            "type": "number",
            "minimum": 0,
            "maximum": 100,
            "description": "Depth weight 0–100, except V6. No undocumented default or dref dependency is inserted."
          },
          "nsfw_check": {
            "type": "boolean",
            "description": "Additional content-check request. Availability is checked before submission; normal safety checks cannot be disabled."
          },
          "version": {
            "type": "string",
            "enum": [
              "8.2",
              "8.1",
              "7",
              "6.1",
              "6",
              "5.2",
              "5.1"
            ],
            "description": "Optional consistency check; must equal the selected model version. The model ID is authoritative."
          },
          "niji": {
            "type": "boolean",
            "description": "Optional consistency check; must agree with whether model is niji-v7 or niji-v6."
          },
          "extra": {
            "type": "string",
            "description": "Native Midjourney parameters only, with no prose. For example --ar 16:9 --s 100. Structured fields take precedence."
          },
          "metadata": {
            "type": "object",
            "description": "Client metadata retained with the task; not sent as generation parameters."
          },
          "parent_task_id": {
            "type": "string",
            "description": "Owned SeedRouter parent task ID for child operations. Same model, account and original execution context. Follow-ups cannot transfer the task or recreate its parent elsewhere; unavailable, expired or changed original contexts are rejected."
          },
          "index": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "description": "One-based parent image index, required for variation/upscale/remix/zoom/pan. Normally 1–4; V8 draft can have 24. Must not exceed the parent’s available image choices; some actions only support 1–4."
          },
          "mode": {
            "type": "string",
            "enum": [
              "subtle",
              "strong",
              "select",
              "creative",
              "2x",
              "4x"
            ],
            "description": "Variation: subtle (default) or strong. Upscale: select (default), subtle, creative, 2x or 4x; 2x/4x only V5. select retrieves an existing grid image with zero image-job usage; real upscales use one job. Remix accepts only the mode matching its action. Other actions do not accept mode."
          },
          "direction": {
            "type": "string",
            "enum": [
              "left",
              "right",
              "up",
              "down"
            ],
            "description": "Required for pan only."
          },
          "zoom_ratio": {
            "type": "number",
            "minimum": 1.1,
            "maximum": 2,
            "description": "Zoom only; defaults to 2. Values are preserved, never rounded. Some parents support only exact 1.5 or 2; compatible parents support continuous values and ordinary prompt/parameter edits."
          },
          "scale": {
            "type": "number",
            "minimum": 1.1,
            "maximum": 3,
            "description": "Pan scale, where supported. Explicit scale is required by some execution paths."
          },
          "mask_url": {
            "type": "string",
            "format": "uri",
            "pattern": "^https?://",
            "description": "PNG mask URL for a supported modal request; first start inpaint without a mask. Transparent areas are redrawn and white areas preserved. Keep the file at most 12 MiB and use parent-image dimensions for alignment. The size limit applies to this supported modal contract; matching dimensions are guidance, not a universal validation rule. No automatic mask conversion."
          }
        }
      },
      "MidjourneyTask": {
        "type": "object",
        "required": [
          "id",
          "model",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string",
            "enum": [
              "midjourney-v8.2",
              "midjourney-v8.1",
              "midjourney-v7",
              "midjourney-v6.1",
              "midjourney-v6",
              "midjourney-v5.2",
              "midjourney-v5.1",
              "niji-v7",
              "niji-v6"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "processing",
              "completed",
              "failed"
            ]
          },
          "output": {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "url"
                  ],
                  "properties": {
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "pattern": "^https?://",
                      "description": "Result image URL."
                    },
                    "index": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 24,
                      "description": "One-based image index, when present."
                    }
                  }
                }
              },
              "text": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Describe results. Count and language vary; the paid acceptance check returned one Chinese description. Do not assume four English suggestions."
              },
              "seed": {
                "type": "integer"
              },
              "grid": {
                "type": "boolean",
                "description": "True when the delivered file is a grid containing multiple image choices; one grid URL is not expanded into fabricated individual URLs."
              },
              "action": {
                "type": "string"
              },
              "awaiting_input": {
                "type": "boolean",
                "description": "True when an editing operation completed by asking for a subsequent modal operation. The input-only inpaint step has zero image-job usage; the final successful modal generation is charged once. Configured pricing is still required."
              }
            }
          },
          "created_at": {
            "type": "integer",
            "description": "Unix timestamp in seconds."
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "integer"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
