{"openapi":"3.2.0","info":{"title":"Ross Image Studio API","version":"1.3.0"},"servers":[{"url":"https://studio.ross-developers.com","description":"Production","name":"production"}],"paths":{"/v1/images/generations":{"post":{"tags":["images"],"summary":"Create a text-to-image job","operationId":"create_generation_v1_images_generations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationRequest"}}},"required":true},"responses":{"202":{"description":"Job accepted — poll `urls.get`.","content":{"application/json":{"schema":{},"example":{"id":"job_01KXQ1SEEZD37H2P2RKXQX3K30","object":"job","model":"irie","status":"queued","queue_position":0,"input":{"prompt":"a reggae sound system on a beach at sunset","steps":30,"cfg_scale":4.0,"width":1024,"height":1024,"n":1,"seed":420},"created_at":"2026-07-17T06:40:12Z","data_removed":false,"urls":{"get":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30","cancel":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30/cancel"}}}}},"200":{"description":"Finished within the `Prefer: wait=<s>` window.","content":{"application/json":{"example":{"id":"job_01KXQ1SEEZD37H2P2RKXQX3K30","object":"job","model":"irie","status":"succeeded","input":{"prompt":"a reggae sound system on a beach at sunset","steps":30,"cfg_scale":4.0,"width":1024,"height":1024,"n":1,"seed":420},"output":{"images":[{"file_id":"img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA","url":"https://studio.ross-developers.com/v1/files/img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA.png?key=isk_test_onelove","width":1024,"height":1024,"seed":420,"content_type":"image/png"}]},"metrics":{"queue_time_s":0.4,"inference_time_s":79.57},"created_at":"2026-07-17T06:40:12Z","started_at":"2026-07-17T06:40:12Z","completed_at":"2026-07-17T06:41:32Z","expires_at":"2026-07-18T06:41:32Z","data_removed":false,"urls":{"get":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30","cancel":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30/cancel"}}}}},"400":{"description":"Malformed request — undecodable base64 image (`invalid_image`), model/endpoint mismatch (`wrong_task`), or missing mask (`mask_required`).","content":{"application/json":{"example":{"error":{"type":"invalid_request_error","code":"invalid_image","message":"Not valid base64 image data.","param":"input_image"}}}}},"401":{"description":"Missing/invalid API key.","content":{"application/json":{"example":{"error":{"type":"authentication_error","code":"invalid_api_key","message":"Missing or invalid API key."}}}}},"404":{"description":"Unknown model.","content":{"application/json":{"example":{"error":{"type":"not_found_error","code":"model_not_found","message":"Unknown model 'xyz'."}}}}},"422":{"description":"Parameter out of range / resolution cap.","content":{"application/json":{"example":{"error":{"type":"invalid_request_error","code":"invalid_parameter","message":"age: must be <= 100","param":"age"}}}}},"429":{"description":"Queue full — retry after `Retry-After` seconds.","content":{"application/json":{"example":{"error":{"type":"rate_limit_error","code":"queue_full","message":"The generation queue is full. Retry later."}}}}}},"security":[{"ApiKey":[]}]}},"/v1/images/edits":{"post":{"tags":["images"],"summary":"Create an image-editing job (base64 input image)","operationId":"create_edit_v1_images_edits_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditRequest"}}},"required":true},"responses":{"202":{"description":"Job accepted — poll `urls.get`.","content":{"application/json":{"schema":{},"example":{"id":"job_01KXQ1SEEZD37H2P2RKXQX3K30","object":"job","model":"irie","status":"queued","queue_position":0,"input":{"prompt":"a reggae sound system on a beach at sunset","steps":30,"cfg_scale":4.0,"width":1024,"height":1024,"n":1,"seed":420},"created_at":"2026-07-17T06:40:12Z","data_removed":false,"urls":{"get":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30","cancel":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30/cancel"}}}}},"200":{"description":"Finished within the `Prefer: wait=<s>` window.","content":{"application/json":{"example":{"id":"job_01KXQ1SEEZD37H2P2RKXQX3K30","object":"job","model":"irie","status":"succeeded","input":{"prompt":"a reggae sound system on a beach at sunset","steps":30,"cfg_scale":4.0,"width":1024,"height":1024,"n":1,"seed":420},"output":{"images":[{"file_id":"img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA","url":"https://studio.ross-developers.com/v1/files/img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA.png?key=isk_test_onelove","width":1024,"height":1024,"seed":420,"content_type":"image/png"}]},"metrics":{"queue_time_s":0.4,"inference_time_s":79.57},"created_at":"2026-07-17T06:40:12Z","started_at":"2026-07-17T06:40:12Z","completed_at":"2026-07-17T06:41:32Z","expires_at":"2026-07-18T06:41:32Z","data_removed":false,"urls":{"get":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30","cancel":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30/cancel"}}}}},"400":{"description":"Malformed request — undecodable base64 image (`invalid_image`), model/endpoint mismatch (`wrong_task`), or missing mask (`mask_required`).","content":{"application/json":{"example":{"error":{"type":"invalid_request_error","code":"invalid_image","message":"Not valid base64 image data.","param":"input_image"}}}}},"401":{"description":"Missing/invalid API key.","content":{"application/json":{"example":{"error":{"type":"authentication_error","code":"invalid_api_key","message":"Missing or invalid API key."}}}}},"404":{"description":"Unknown model.","content":{"application/json":{"example":{"error":{"type":"not_found_error","code":"model_not_found","message":"Unknown model 'xyz'."}}}}},"422":{"description":"Parameter out of range / resolution cap.","content":{"application/json":{"example":{"error":{"type":"invalid_request_error","code":"invalid_parameter","message":"age: must be <= 100","param":"age"}}}}},"429":{"description":"Queue full — retry after `Retry-After` seconds.","content":{"application/json":{"example":{"error":{"type":"rate_limit_error","code":"queue_full","message":"The generation queue is full. Retry later."}}}}}},"security":[{"ApiKey":[]}]}},"/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Poll a job","operationId":"get_job_v1_jobs__job_id__get","security":[{"ApiKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"The job in any state (failed jobs embed `error`).","content":{"application/json":{"schema":{},"example":{"id":"job_01KXQ1SEEZD37H2P2RKXQX3K30","object":"job","model":"irie","status":"succeeded","input":{"prompt":"a reggae sound system on a beach at sunset","steps":30,"cfg_scale":4.0,"width":1024,"height":1024,"n":1,"seed":420},"output":{"images":[{"file_id":"img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA","url":"https://studio.ross-developers.com/v1/files/img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA.png?key=isk_test_onelove","width":1024,"height":1024,"seed":420,"content_type":"image/png"}]},"metrics":{"queue_time_s":0.4,"inference_time_s":79.57},"created_at":"2026-07-17T06:40:12Z","started_at":"2026-07-17T06:40:12Z","completed_at":"2026-07-17T06:41:32Z","expires_at":"2026-07-18T06:41:32Z","data_removed":false,"urls":{"get":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30","cancel":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30/cancel"}}}}},"401":{"description":"Missing/invalid API key.","content":{"application/json":{"example":{"error":{"type":"authentication_error","code":"invalid_api_key","message":"Missing or invalid API key."}}}}},"404":{"description":"Unknown job (or owned by another key).","content":{"application/json":{"example":{"error":{"type":"not_found_error","code":"job_not_found","message":"No job 'job_01K…'."}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs":{"get":{"tags":["jobs"],"summary":"List recent jobs (newest first)","operationId":"list_jobs_v1_jobs_get","security":[{"ApiKey":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Before"}}],"responses":{"200":{"description":"Newest first, scoped to your API key.","content":{"application/json":{"schema":{},"example":{"object":"list","data":[{"id":"job_01KXQ1SEEZD37H2P2RKXQX3K30","object":"job","model":"irie","status":"succeeded","input":{"prompt":"a reggae sound system on a beach at sunset","steps":30,"cfg_scale":4.0,"width":1024,"height":1024,"n":1,"seed":420},"output":{"images":[{"file_id":"img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA","url":"https://studio.ross-developers.com/v1/files/img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA.png?key=isk_test_onelove","width":1024,"height":1024,"seed":420,"content_type":"image/png"}]},"metrics":{"queue_time_s":0.4,"inference_time_s":79.57},"created_at":"2026-07-17T06:40:12Z","started_at":"2026-07-17T06:40:12Z","completed_at":"2026-07-17T06:41:32Z","expires_at":"2026-07-18T06:41:32Z","data_removed":false,"urls":{"get":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30","cancel":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30/cancel"}}],"has_more":false}}}},"401":{"description":"Missing/invalid API key.","content":{"application/json":{"example":{"error":{"type":"authentication_error","code":"invalid_api_key","message":"Missing or invalid API key."}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/cancel":{"post":{"tags":["jobs"],"summary":"Cancel a job","operationId":"cancel_job_v1_jobs__job_id__cancel_post","security":[{"ApiKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Canceled (running jobs stop at the next step).","content":{"application/json":{"schema":{},"example":{"id":"job_01KXQ1SEEZD37H2P2RKXQX3K30","object":"job","model":"irie","status":"canceled","input":{"prompt":"a reggae sound system on a beach at sunset","steps":30,"cfg_scale":4.0,"width":1024,"height":1024,"n":1,"seed":420},"output":{"images":[{"file_id":"img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA","url":"https://studio.ross-developers.com/v1/files/img_01KXQ1V0Q9GJ0Q4V6M8T2B7RNA.png?key=isk_test_onelove","width":1024,"height":1024,"seed":420,"content_type":"image/png"}]},"metrics":{"queue_time_s":0.4,"inference_time_s":79.57},"created_at":"2026-07-17T06:40:12Z","started_at":"2026-07-17T06:40:12Z","completed_at":"2026-07-17T06:41:32Z","expires_at":"2026-07-18T06:41:32Z","data_removed":false,"urls":{"get":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30","cancel":"https://studio.ross-developers.com/v1/jobs/job_01KXQ1SEEZD37H2P2RKXQX3K30/cancel"}}}}},"401":{"description":"Missing/invalid API key.","content":{"application/json":{"example":{"error":{"type":"authentication_error","code":"invalid_api_key","message":"Missing or invalid API key."}}}}},"404":{"description":"Unknown job.","content":{"application/json":{"example":{"error":{"type":"not_found_error","code":"job_not_found","message":"No job 'job_01K…'."}}}}},"409":{"description":"Job already finished.","content":{"application/json":{"example":{"error":{"type":"invalid_request_error","code":"job_already_finished","message":"Job is already succeeded."}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models":{"get":{"tags":["models"],"summary":"Model catalog (the public contract)","operationId":"list_models_v1_models_get","responses":{"200":{"description":"All 13 models with validated parameter specs, each tagged with its task — plus `tasks`, the catalog of every task the API offers: what it does, its endpoint, and the models that serve it.","content":{"application/json":{"schema":{},"example":{"object":"list","data":[{"id":"irie","name":"Irie","description":"The studio's core text-to-image model — general-purpose, prompt-faithful generation at up to ~1MP.","task":"text-to-image","family":"riddim","endpoint":"/v1/images/generations","parameters":{"steps":{"type":"integer","default":50,"minimum":1,"maximum":100},"cfg_scale":{"type":"number","default":4.0,"minimum":0.0,"maximum":15.0}},"accepts_input_image":false,"requires_input_image":false,"accepts_mask":false,"requires_mask":false,"cancelable":true},{"id":"bashment","name":"Bashment","description":"The studio's heavyweight instruction editor — strongest edit quality.","task":"image-editing","family":"dub","endpoint":"/v1/images/edits","parameters":{"steps":{"type":"integer","default":50,"minimum":1,"maximum":100}},"accepts_input_image":true,"requires_input_image":true,"accepts_mask":false,"requires_mask":false,"cancelable":true},"… 13 models total — this is the authoritative catalog"],"tasks":[{"id":"text-to-image","name":"Text to Image","description":"Generate a brand-new image from a text prompt alone — no input image involved. The prompt and the model's parameters fully determine the result.","endpoint":"/v1/images/generations","models":["irie"]},{"id":"aesthetic-alignment","name":"Aesthetic Alignment","description":"Text-to-image generation aligned with human aesthetic preference — richer color, stronger lighting and composition than the core model. Dial the strength with lora_scale (0 is off, 1.0 the tuned default, 2.5 the strongest).","endpoint":"/v1/images/generations","models":["vibes"]},{"id":"age-control","name":"Age Control","description":"Text-to-image generation that renders the subject at a chosen age. Set age (1-100); everything else follows the prompt.","endpoint":"/v1/images/generations","models":["roots"]},{"id":"brightness-adjustment","name":"Brightness Adjustment","description":"Text-to-image generation with explicit brightness control. Set scale from 0 (dark) to 1 (bright) to pin the exposure of the result.","endpoint":"/v1/images/generations","models":["sunsplash"]},{"id":"sharpness-enhancement","name":"Sharpness Enhancement","description":"Text-to-image generation with explicit sharpness control. Set scale from 0 (soft) to 1 (crisp) to pin edge definition and detail clarity.","endpoint":"/v1/images/generations","models":["criss"]},{"id":"color-adjustment","name":"Color Adjustment","description":"Text-to-image generation with a soft color grade applied. Bias the palette with the r, g and b knobs (0-1 each; 0.5 is neutral).","endpoint":"/v1/images/generations","models":["kaya"]},{"id":"panda-meme","name":"Panda Meme","description":"The studio's easter egg — panda-themed meme generation from a prompt.","endpoint":"/v1/images/generations","models":["wagwan"]},{"id":"content-reference","name":"Content Reference","description":"Generation guided by a reference image's content — the output preserves the reference's subject and identity while re-imagining it, coming out a sibling rather than a copy. scale (0-1) sets how closely it follows.","endpoint":"/v1/images/edits","models":["bredda"]},{"id":"structure-control","name":"Structure Control","description":"Generation locked to the spatial structure of a control image (edge, pose or depth map): the composition holds steady while the prompt drives the content.","endpoint":"/v1/images/edits","models":["rocksteady"]},{"id":"image-editing","name":"Image Editing","description":"Instruction-based editing — supply an image, describe the change in the prompt, and get the edited image back with the original's details preserved.","endpoint":"/v1/images/edits","models":["remix","bashment"]},{"id":"local-redrawing","name":"Local Redrawing","description":"Redraws only the masked region of an image, generating new content there that blends into the untouched surroundings. Requires an image and a mask; the prompt describes what belongs in the redrawn area.","endpoint":"/v1/images/edits","models":["patchie"]},{"id":"super-resolution","name":"Super-Resolution","description":"Enlarges a low-resolution input while reconstructing fine detail. The one task allowed past ~1MP: request output up to 2048x2048.","endpoint":"/v1/images/edits","models":["biggup"]}]}}}},"401":{"description":"Missing/invalid API key.","content":{"application/json":{"example":{"error":{"type":"authentication_error","code":"invalid_api_key","message":"Missing or invalid API key."}}}}}},"security":[{"ApiKey":[]}]}},"/v1/files/{file_name}":{"get":{"tags":["files"],"summary":"Download an output PNG","operationId":"get_file_v1_files__file_name__get","security":[{"ApiKey":[]}],"parameters":[{"name":"file_name","in":"path","required":true,"schema":{"type":"string","title":"File Name"}}],"responses":{"200":{"description":"The PNG (embeds provenance metadata: generator/model/seed/job).","content":{"application/json":{"schema":{}},"image/png":{}}},"401":{"description":"Missing/invalid API key.","content":{"application/json":{"example":{"error":{"type":"authentication_error","code":"invalid_api_key","message":"Missing or invalid API key."}}}}},"404":{"description":"Unknown file (or owned by another key).","content":{"application/json":{"example":{"error":{"type":"not_found_error","code":"file_not_found","message":"No file 'img_01K…'."}}}}},"410":{"description":"Output expired (24h TTL) — `data_removed: true` on the job.","content":{"application/json":{"example":{"error":{"type":"invalid_request_error","code":"file_expired","message":"This output has expired and was removed."}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/health":{"get":{"tags":["health"],"summary":"Liveness/readiness + per-model status (no auth)","operationId":"health_v1_health_get","responses":{"200":{"description":"Service healthy. `models[*]` is the public per-model status feed (build status pages on it — no auth required).","content":{"application/json":{"schema":{},"example":{"worker_alive":true,"status":"ok","ready":true,"queue_depth":1,"running_job":"job_01KXQ1SEEZD37H2P2RKXQX3K30","resident_family":"riddim","jobs":{"succeeded":12},"engine":"real","version":"1.3.0","models":[{"id":"irie","name":"Irie","task":"text-to-image","family":"riddim","operational":true,"state":"generating","queued":1},{"id":"biggup","name":"Biggup","task":"super-resolution","family":"riddim","operational":true,"state":"cold","queued":0},"… all 13 models. state: generating | warm (weights resident, starts instantly) | cold (loads on demand — adds a short cold start)"],"vram_used_gb":7.9}}}},"503":{"description":"Starting up or draining — retry shortly (body still included).","content":{"application/json":{"example":{"worker_alive":true,"status":"unavailable","ready":false,"queue_depth":1,"running_job":"job_01KXQ1SEEZD37H2P2RKXQX3K30","resident_family":"riddim","jobs":{"succeeded":12},"engine":"real","version":"1.3.0","models":[{"id":"irie","name":"Irie","task":"text-to-image","family":"riddim","operational":true,"state":"generating","queued":1},{"id":"biggup","name":"Biggup","task":"super-resolution","family":"riddim","operational":true,"state":"cold","queued":0},"… all 13 models. state: generating | warm (weights resident, starts instantly) | cold (loads on demand — adds a short cold start)"],"vram_used_gb":7.9}}}}}}}},"components":{"schemas":{"EditRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Public model id — discover all 13 with `GET /v1/models`. Text-to-image: `irie`, `vibes`, `roots`, `sunsplash`, `wagwan`, `criss`, `kaya`. Image editing: `bashment`, `remix`, `patchie`, `bredda`, `rocksteady`, `biggup`.","examples":["irie"]},"prompt":{"type":"string","maxLength":4000,"minLength":1,"title":"Prompt","description":"Edit instruction.","examples":["add a rainbow to the sky"]},"negative_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Negative Prompt","description":"What to steer away from.","examples":["blurry, low quality"]},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed","description":"0 – 2147483647. Omit for a server-chosen seed — the actual seed used is always echoed in the job, so results are reproducible.","examples":[42]},"steps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Steps","description":"Diffusion steps, 1 – 100 (default 50).","examples":[50]},"cfg_scale":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cfg Scale","description":"Guidance strength, 0.0 – 15.0 (default 4.0).","examples":[4.0]},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width","description":"256 – 2048, multiple of 16 (default 1024). width*height ≤ 1,048,576 px.","examples":[1024]},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height","description":"256 – 2048, multiple of 16 (default 1024). width*height ≤ 1,048,576 px.","examples":[1024]},"n":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N","description":"Images per job, 1 – 4 (default 1).","examples":[1]},"response_format":{"type":"string","enum":["url","b64_json"],"title":"Response Format","description":"`url` (hosted, 24h TTL) or `b64_json` (inline base64 in the job).","default":"url"},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"Model-specific parameters, validated against `GET /v1/models`. E.g. roots: `{\"age\": 60}` (1 – 100); sunsplash/criss: `{\"scale\": 0.7}` (0 – 1); kaya: `{\"r\": 0.8, \"g\": 0.7, \"b\": 0.5}`; vibes: `{\"lora_scale\": 1.5}` (0 – 2.5); bredda: `{\"scale\": 0.5}`.","examples":[{"age":60}]},"webhook":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook","description":"Reserved for a future release — stored, not called."},"webhook_events_filter":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Webhook Events Filter","description":"Reserved for a future release."},"input_image":{"type":"string","minLength":1,"title":"Input Image","description":"Base64 PNG/JPEG (data: URI accepted), decode cap 4MP. The server never fetches URLs.","examples":["iVBORw0KGgoAAAANSUhEUg... (base64)"]},"mask":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mask","description":"Base64 mask — required by `patchie` (white = regenerate)."}},"additionalProperties":false,"type":"object","required":["model","prompt","input_image"],"title":"EditRequest","examples":[{"input_image":"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAWUlEQVR42u3PQQ0AIBAEsYUgEHlIQhWg4h4knYyBtr1mbmpvhY+Tnp8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqO8BNvNhrRHDGj4AAAAASUVORK5CYII=","model":"bashment","prompt":"add a rainbow to the sky","seed":42},{"input_image":"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAWUlEQVR42u3PQQ0AIBAEsYUgEHlIQhWg4h4knYyBtr1mbmpvhY+Tnp8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqO8BNvNhrRHDGj4AAAAASUVORK5CYII=","model":"biggup","prompt":"a detailed cityscape"},{"input_image":"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAWUlEQVR42u3PQQ0AIBAEsYUgEHlIQhWg4h4knYyBtr1mbmpvhY+Tnp8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqO8BNvNhrRHDGj4AAAAASUVORK5CYII=","mask":"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAAAAACPAi4CAAAAMklEQVR42u3OIQ4AMAgEQcr//9yKOhzBkRl5CRsiAL5Th9u8yOkHAgICAgICAusCwBoPPAEBQiMZ9wQAAAAASUVORK5CYII=","model":"patchie","prompt":"paint a vivid rainbow into the masked sky"}]},"GenerationRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Public model id — discover all 13 with `GET /v1/models`. Text-to-image: `irie`, `vibes`, `roots`, `sunsplash`, `wagwan`, `criss`, `kaya`. Image editing: `bashment`, `remix`, `patchie`, `bredda`, `rocksteady`, `biggup`.","examples":["irie"]},"prompt":{"type":"string","maxLength":4000,"minLength":1,"title":"Prompt","description":"What to generate.","examples":["a fluffy orange cat in aviator goggles, golden hour"]},"negative_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Negative Prompt","description":"What to steer away from.","examples":["blurry, low quality"]},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed","description":"0 – 2147483647. Omit for a server-chosen seed — the actual seed used is always echoed in the job, so results are reproducible.","examples":[42]},"steps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Steps","description":"Diffusion steps, 1 – 100 (default 50).","examples":[50]},"cfg_scale":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cfg Scale","description":"Guidance strength, 0.0 – 15.0 (default 4.0).","examples":[4.0]},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width","description":"256 – 2048, multiple of 16 (default 1024). width*height ≤ 1,048,576 px.","examples":[1024]},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height","description":"256 – 2048, multiple of 16 (default 1024). width*height ≤ 1,048,576 px.","examples":[1024]},"n":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N","description":"Images per job, 1 – 4 (default 1).","examples":[1]},"response_format":{"type":"string","enum":["url","b64_json"],"title":"Response Format","description":"`url` (hosted, 24h TTL) or `b64_json` (inline base64 in the job).","default":"url"},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"Model-specific parameters, validated against `GET /v1/models`. E.g. roots: `{\"age\": 60}` (1 – 100); sunsplash/criss: `{\"scale\": 0.7}` (0 – 1); kaya: `{\"r\": 0.8, \"g\": 0.7, \"b\": 0.5}`; vibes: `{\"lora_scale\": 1.5}` (0 – 2.5); bredda: `{\"scale\": 0.5}`.","examples":[{"age":60}]},"webhook":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook","description":"Reserved for a future release — stored, not called."},"webhook_events_filter":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Webhook Events Filter","description":"Reserved for a future release."}},"additionalProperties":false,"type":"object","required":["model","prompt"],"title":"GenerationRequest","examples":[{"cfg_scale":4.0,"height":1024,"model":"irie","n":1,"prompt":"a lighthouse on a cliff at golden hour, dramatic clouds","response_format":"url","seed":42,"steps":50,"width":1024},{"model":"roots","params":{"age":60},"prompt":"portrait of a person, studio light","seed":7},{"model":"kaya","params":{"b":0.5,"g":0.7,"r":0.8},"prompt":"a quiet beach at dawn"}]},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"opaque"}}},"tags":[{"name":"images","description":"Submit generation / editing jobs."},{"name":"jobs","description":"Poll, list and cancel jobs."},{"name":"models","description":"Capability catalog — ids, parameters, limits."},{"name":"files","description":"Download outputs (hosted 24h)."},{"name":"health","description":"Liveness/readiness (no auth)."}]}