{
  "openapi": "3.1.0",
  "info": {
    "title": "Runware API - Qwen-Image Style LoRA Training",
    "summary": "Style LoRA training workflow for Qwen-Image with downloadable safetensors output",
    "description": "Qwen-Image Style LoRA Training is a Runware training workflow for producing style-focused LoRA adapters on top of the Qwen-Image architecture. It uses a zipped training dataset, a trigger word, and configurable training settings to produce a LoRA safetensors file that can either be downloaded or imported automatically into the platform for later image generation use.",
    "version": "1.0.0",
    "x-model-id": "runware-qwen-image-style-lora-training",
    "x-air-id": "runware:qwen-image@style-lora-training",
    "x-status": "coming-soon",
    "x-capabilities": [
      "train"
    ],
    "x-released-at": "2026-06-25T00:00:00Z",
    "x-cover-image": "https://assets.runware.ai/covers/runware-qwen-image-style-lora-training.jpg"
  },
  "servers": [
    {
      "url": "https://api.runware.ai/v1",
      "description": "Runware REST API"
    }
  ],
  "components": {
    "securitySchemes": {
      "apiKeyAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Runware API Key (e.g., Bearer <your-key>)"
      }
    },
    "schemas": {
      "AuthenticationTask": {
        "title": "Authentication",
        "description": "Authenticates a connection using an API key. Can be sent as the first element of the request array as an alternative to using the Authorization header.",
        "type": "object",
        "x-response-schema": "https://schemas.runware.ai/responses/utilities/authentication.json",
        "properties": {
          "taskType": {
            "$id": "https://schemas.runware.ai/requests/parameters/api/task-type.json",
            "title": "Task Type",
            "description": "Identifier for the type of task being performed",
            "type": "string",
            "const": "authentication"
          },
          "apiKey": {
            "$id": "https://schemas.runware.ai/requests/parameters/authentication/api-key.json",
            "title": "API Key",
            "description": "Your Runware API key.",
            "type": "string"
          },
          "connectionSessionUUID": {
            "$id": "https://schemas.runware.ai/requests/parameters/authentication/connection-session-uuid.json",
            "title": "Connection Session UUID",
            "description": "Optional session UUID to resume a previous connection and receive any buffered results.",
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "taskType",
          "apiKey"
        ],
        "additionalProperties": false
      },
      "RequestBody": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "model": {
              "title": "Model",
              "description": "Identifier of the model to use for generation.",
              "type": "string",
              "const": "runware:qwen-image@style-lora-training"
            },
            "inputs": {
              "title": "Inputs",
              "description": "The unified payload wrapper for complex media assets dictating image, video or audio inference constraints.",
              "type": "object",
              "properties": {
                "dataset": {
                  "title": "Dataset",
                  "description": "Training dataset as a ZIP file (UUID or URL).",
                  "type": "string"
                }
              },
              "required": [
                "dataset"
              ],
              "additionalProperties": false
            },
            "importModel": {
              "type": "object",
              "title": "Import Model",
              "description": "Configuration for the trained model that is uploaded to the platform after training completes.",
              "properties": {
                "air": {
                  "title": "AIR",
                  "description": "Artificial Intelligence Resource identifier. Format: `provider:model@version`.",
                  "type": "string",
                  "minLength": 1
                },
                "heroImageURL": {
                  "title": "Hero Image URL",
                  "description": "URL of the hero image.",
                  "type": "string",
                  "format": "uri"
                },
                "name": {
                  "title": "Name",
                  "description": "Name of the model.",
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 255
                },
                "private": {
                  "title": "Private",
                  "description": "Whether the model should be private.",
                  "type": "boolean",
                  "default": true
                },
                "shortDescription": {
                  "title": "Short Description",
                  "description": "Short description of the model.",
                  "type": "string"
                },
                "uniqueIdentifier": {
                  "title": "Unique Identifier",
                  "description": "Unique identifier for the model.",
                  "type": "string",
                  "minLength": 1
                },
                "version": {
                  "title": "Version",
                  "description": "Version of the model.",
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "air",
                "name"
              ],
              "additionalProperties": false
            },
            "learningRate": {
              "title": "Learning Rate",
              "description": "Step size applied at each training update. Lower values learn more slowly but can improve stability.",
              "type": "number",
              "default": 0.0005,
              "minimum": 0.00001,
              "maximum": 0.01
            },
            "trainingSteps": {
              "title": "Training Steps",
              "description": "Total number of optimization steps to run during training.",
              "type": "integer",
              "minimum": 10,
              "maximum": 4000,
              "default": 300
            },
            "triggerWord": {
              "title": "Trigger Word",
              "description": "Word or phrase used to activate the trained concept at inference time.",
              "type": "string",
              "minLength": 3,
              "maxLength": 100
            },
            "taskType": {
              "title": "Task Type",
              "description": "Identifier for the type of task being performed",
              "type": "string",
              "const": "training"
            },
            "taskUUID": {
              "title": "Task UUID",
              "description": "UUID v4 identifier for tracking tasks and matching async responses. Must be unique per task.",
              "type": "string",
              "format": "uuid"
            },
            "webhookURL": {
              "title": "Webhook URL",
              "description": "Specifies a webhook URL where JSON responses will be sent via HTTP POST when generation tasks complete. For batch requests with multiple results, each completed item triggers a separate webhook call as it becomes available.",
              "type": "string",
              "format": "uri"
            },
            "includeCost": {
              "title": "Include Cost",
              "description": "Include task cost in the response.",
              "type": "boolean",
              "default": false
            }
          },
          "required": [
            "inputs",
            "importModel",
            "taskType",
            "taskUUID",
            "model"
          ],
          "additionalProperties": false
        },
        "description": "You must always POST an array of task objects."
      },
      "ResponseBody": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "Unknown response structure"
            }
          }
        }
      },
      "ErrorResponse": {
        "title": "Error Response",
        "description": "Standard error response returned by the Runware API.",
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "code",
                "message"
              ],
              "additionalProperties": true,
              "properties": {
                "code": {
                  "type": "string",
                  "description": "A short identifier for the error (e.g., invalidApiKey, timeoutProvider)."
                },
                "message": {
                  "type": "string",
                  "description": "A human-readable explanation of what went wrong."
                },
                "parameter": {
                  "type": "string",
                  "description": "The request parameter related to the error, if applicable."
                },
                "taskType": {
                  "type": "string",
                  "description": "The task type of the request that failed."
                },
                "taskUUID": {
                  "type": "string",
                  "description": "The unique identifier of the failed request."
                },
                "documentation": {
                  "type": "string",
                  "description": "A link to relevant documentation."
                }
              }
            }
          }
        },
        "required": [
          "errors"
        ],
        "additionalProperties": false
      }
    }
  },
  "paths": {
    "/": {
      "post": {
        "summary": "Run Qwen-Image Style LoRA Training",
        "description": "Qwen-Image Style LoRA Training is a Runware training workflow for producing style-focused LoRA adapters on top of the Qwen-Image architecture. It uses a zipped training dataset, a trigger word, and configurable training settings to produce a LoRA safetensors file that can either be downloaded or imported automatically into the platform for later image generation use.",
        "operationId": "run_runware_qwen_image_style_lora_training",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseBody"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — Missing or invalid parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — No valid API key provided.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required — Insufficient account balance.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — The API key lacks permissions for this request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests — Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server Error — Something went wrong on Runware's end.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable — Temporarily unavailable (maintenance or capacity).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "apiKeyAuth": []
    }
  ]
}