# Recommendations

## List Models

**get** `/recommendations/models`

List recommended models matching the given filters

### Query Parameters

- `capabilities: optional array of "txt2img" or "txt2img_ip_adapter" or "txt2img_texture" or 30 more`

  Filter models by capabilities. Multiple values comma-separated. Can be any of the following values: txt2img, txt2img_ip_adapter, txt2img_texture, img2img, img2img_ip_adapter, img2img_texture, inpaint, outpaint, inpaint_ip_adapter, controlnet, controlnet_ip_adapter, reference, reference_texture, controlnet_reference, controlnet_img2img, controlnet_inpaint, controlnet_inpaint_ip_adapter, controlnet_texture, img23d, txt23d, video23d, 3d23d, img2video, txt2video, video2video, video2img, txt2audio, audio2audio, audio2video, video2audio, txt2txt, img2txt, audio2txt.
  Examples: `txt2img`, `img2img`. Also accepts prefixes or suffixes values such as `txt2`, `img2`, `inpaint`, `control`. Default: no filter

  - `"txt2img"`

  - `"txt2img_ip_adapter"`

  - `"txt2img_texture"`

  - `"img2img"`

  - `"img2img_ip_adapter"`

  - `"img2img_texture"`

  - `"inpaint"`

  - `"outpaint"`

  - `"inpaint_ip_adapter"`

  - `"controlnet"`

  - `"controlnet_ip_adapter"`

  - `"reference"`

  - `"reference_texture"`

  - `"controlnet_reference"`

  - `"controlnet_img2img"`

  - `"controlnet_inpaint"`

  - `"controlnet_inpaint_ip_adapter"`

  - `"controlnet_texture"`

  - `"img23d"`

  - `"txt23d"`

  - `"video23d"`

  - `"3d23d"`

  - `"img2video"`

  - `"txt2video"`

  - `"video2video"`

  - `"video2img"`

  - `"txt2audio"`

  - `"audio2audio"`

  - `"audio2video"`

  - `"video2audio"`

  - `"txt2txt"`

  - `"img2txt"`

  - `"audio2txt"`

- `excludeModelIds: optional string`

  Exclude specific models by their IDs. Multiple IDs comma-separated. Example: `model1,model2,model3`. Default: no exclusions

- `excludeTypes: optional string`

  Exclude models by type. Multiple types comma-separated. Example: `flux.1,flux.1-lora`. Default: no exclusions

- `limit: optional number`

  The maximum number of models to return. Default: `10`, Maximum: `30`

- `nextToken: optional string`

  Pagination token to retrieve the next page of results. Use the `nextToken` from the previous response. Default: first page

- `originalAssets: optional boolean`

  If set to true, returns the original asset without transformation

- `privacy: optional "private" or "public"`

  Filter models by privacy level.
  Default: `private`. Values: `private`, `public`

  - `"private"`

  - `"public"`

- `projectId: optional string`

  The projectId used for ownership resource management. Either to assert ownership or to set the owner of the resource(s)

- `tags: optional string`

  Filter models by tags. Multiple tags comma-separated.
  Example: `anime,portrait,style`. Default: no filter

- `type: optional "flux.1" or "flux.1-lora" or "flux.1-kontext-dev" or 28 more`

  Filter models by type.
  Examples: `flux.1`, `flux.1-lora`, etc. Default: no filter

  - `"flux.1"`

  - `"flux.1-lora"`

  - `"flux.1-kontext-dev"`

  - `"flux.1-krea-dev"`

  - `"flux.1-kontext-lora"`

  - `"flux.1-krea-lora"`

  - `"flux.1-composition"`

  - `"flux.1-pro"`

  - `"flux1.1-pro"`

  - `"flux.1.1-pro-ultra"`

  - `"flux.2-dev-lora"`

  - `"flux.2-dev-edit-lora"`

  - `"flux.2-klein-4b-lora"`

  - `"flux.2-klein-9b-lora"`

  - `"flux.2-klein-base-4b-lora"`

  - `"flux.2-klein-base-9b-lora"`

  - `"flux.2-klein-4b-edit-lora"`

  - `"flux.2-klein-9b-edit-lora"`

  - `"flux.2-klein-base-4b-edit-lora"`

  - `"flux.2-klein-base-9b-edit-lora"`

  - `"gpt-image-1"`

  - `"qwen-image-lora"`

  - `"qwen-image-2512-lora"`

  - `"qwen-image-edit-lora"`

  - `"qwen-image-edit-2509-lora"`

  - `"qwen-image-edit-2511-lora"`

  - `"zimage-lora"`

  - `"zimage-turbo-lora"`

  - `"zimage-de-turbo-lora"`

  - `"custom"`

  - `"elevenlabs-voice"`

### Returns

- `models: array of object { id, capabilities, collectionIds, 37 more }`

  - `id: string`

    The model ID (example: "model_eyVcnFJcR92BxBkz7N6g5w")

  - `capabilities: array of "3d23d" or "audio2audio" or "audio2txt" or 30 more`

    List of model capabilities (example: ["txt2img", "img2img", "txt2img_ip_adapter", ...])

    - `"3d23d"`

    - `"audio2audio"`

    - `"audio2txt"`

    - `"audio2video"`

    - `"controlnet"`

    - `"controlnet_img2img"`

    - `"controlnet_inpaint"`

    - `"controlnet_inpaint_ip_adapter"`

    - `"controlnet_ip_adapter"`

    - `"controlnet_reference"`

    - `"controlnet_texture"`

    - `"img23d"`

    - `"img2img"`

    - `"img2img_ip_adapter"`

    - `"img2img_texture"`

    - `"img2txt"`

    - `"img2video"`

    - `"inpaint"`

    - `"inpaint_ip_adapter"`

    - `"outpaint"`

    - `"reference"`

    - `"reference_texture"`

    - `"txt23d"`

    - `"txt2audio"`

    - `"txt2img"`

    - `"txt2img_ip_adapter"`

    - `"txt2img_texture"`

    - `"txt2txt"`

    - `"txt2video"`

    - `"video23d"`

    - `"video2audio"`

    - `"video2img"`

    - `"video2video"`

  - `collectionIds: array of string`

    A list of CollectionId this model belongs to

  - `createdAt: string`

    The model creation date as an ISO string (example: "2023-02-03T11:19:41.579Z")

  - `custom: boolean`

    Whether the model is a custom model and can be used only with POST /generate/custom/{modelId} endpoint

  - `exampleAssetIds: array of string`

    List of all example asset IDs setup by the model owner

  - `privacy: "private" or "public" or "unlisted"`

    The privacy of the model (default: private)

    - `"private"`

    - `"public"`

    - `"unlisted"`

  - `source: "civitai" or "huggingface" or "other" or "scenario"`

    The source of the model

    - `"civitai"`

    - `"huggingface"`

    - `"other"`

    - `"scenario"`

  - `status: "copying" or "failed" or "new" or 3 more`

    The model status

    - `"copying"`

    - `"failed"`

    - `"new"`

    - `"trained"`

    - `"training"`

    - `"training-canceled"`

  - `tags: array of string`

    The associated tags (example: ["sci-fi", "landscape"])

  - `trainingImagesNumber: number`

    The total number of training images

  - `type: "custom" or "elevenlabs-voice" or "flux.1" or 28 more`

    The model type (example: "flux.1-lora")

    - `"custom"`

    - `"elevenlabs-voice"`

    - `"flux.1"`

    - `"flux.1-composition"`

    - `"flux.1-kontext-dev"`

    - `"flux.1-kontext-lora"`

    - `"flux.1-krea-dev"`

    - `"flux.1-krea-lora"`

    - `"flux.1-lora"`

    - `"flux.1-pro"`

    - `"flux.1.1-pro-ultra"`

    - `"flux.2-dev-edit-lora"`

    - `"flux.2-dev-lora"`

    - `"flux.2-klein-4b-edit-lora"`

    - `"flux.2-klein-4b-lora"`

    - `"flux.2-klein-9b-edit-lora"`

    - `"flux.2-klein-9b-lora"`

    - `"flux.2-klein-base-4b-edit-lora"`

    - `"flux.2-klein-base-4b-lora"`

    - `"flux.2-klein-base-9b-edit-lora"`

    - `"flux.2-klein-base-9b-lora"`

    - `"flux1.1-pro"`

    - `"gpt-image-1"`

    - `"qwen-image-2512-lora"`

    - `"qwen-image-edit-2509-lora"`

    - `"qwen-image-edit-2511-lora"`

    - `"qwen-image-edit-lora"`

    - `"qwen-image-lora"`

    - `"zimage-de-turbo-lora"`

    - `"zimage-lora"`

    - `"zimage-turbo-lora"`

  - `updatedAt: string`

    The model last update date as an ISO string (example: "2023-02-03T11:19:41.579Z")

  - `accessRestrictions: optional 0 or 100 or 25 or 2 more`

    The access restrictions of the model
    0: Free plan
    25: Starter plan
    50: Pro plan
    75: Max plan
    100: Enterprise plan

    - `0`

    - `100`

    - `25`

    - `50`

    - `75`

  - `authorId: optional string`

    The author user ID (example: "user_VFhihHKMRZyDDnZAJwLb2Q")

  - `class: optional object { category, conceptPrompt, modelId, 5 more }`

    The class of the model

    - `category: string`

      The category slug of the class (example: "art-style")

    - `conceptPrompt: string`

      The concept prompt of the class (example: "a sks character design")

    - `modelId: string`

      The model ID of the class. Only available for legacy models.

    - `name: string`

      The class name (example: "Character Design")

    - `prompt: string`

      The class prompt (example: "a character design")

    - `slug: string`

      The class slug (example: "art-style-character-design")

    - `status: "published" or "unpublished"`

      The class status (only published classes are listed, but unpublished classes can still appear in existing models)

      - `"published"`

      - `"unpublished"`

    - `thumbnails: array of string`

      Some example images URLs to showcase the class

  - `compliantModelIds: optional array of string`

    List of base model IDs compliant with the model (example: ["flux.1-dev", "flux.1-schnell"])
    This attribute is mainly used for Flux LoRA models

  - `concepts: optional array of object { modelId, scale, modelEpoch }`

    The concepts is required for the type model: composition

    - `modelId: string`

      The model ID (example: "model_eyVcnFJcR92BxBkz7N6g5w")

    - `scale: number`

      The scale of the model (example: 1.0)
      For Flux Kontext Prompt Editing, the scale is between 0 and 2.

    - `modelEpoch: optional string`

      The epoch of the model (example: "000001")
      Only available for Flux Lora Trained models

  - `disableRefund: optional boolean`

    When true, credits spent on a generation with this model are not
    automatically refunded if the generation fails. Absent or false means
    failed generations are refunded as usual.

  - `epoch: optional string`

    The epoch of the model. Only available for Flux Lora Trained models.
    If not set, uses the final model epoch (latest)

  - `epochs: optional array of object { epoch, assets }`

    The epochs of the model. Only available for Flux Lora Trained models.

    - `epoch: string`

      The epoch hash to identify the epoch

    - `assets: optional array of object { assetId, url }`

      The assets of the epoch if sample prompts as been supplied during training

      - `assetId: string`

        The AssetId of the image during training (example: "asset_GTrL3mq4SXWyMxkOHRxlpw")

      - `url: string`

        The url of the asset

  - `inputs: optional array of object { name, type, allowedValues, 24 more }`

    The inputs of the model. Only used for custom models. To retrieve this list, get it by modelId with GET /models/{modelId}

    - `name: string`

      The name that must be user to call the model through the API

    - `type: "boolean" or "file" or "file_array" or 7 more`

      The data type of the input

      - `"boolean"`

      - `"file"`

      - `"file_array"`

      - `"inputs_array"`

      - `"model"`

      - `"model_array"`

      - `"number"`

      - `"number_array"`

      - `"string"`

      - `"string_array"`

    - `allowedValues: optional array of unknown`

      The allowed values for the input. For `string` or `number` types, creates a single-select
      dropdown.
      For `string_array` type, creates a multi-select dropdown.

    - `backgroundBehavior: optional "opaque" or "transparent"`

      Specifies the background behavior for the input. Only available for `file` and `file_array`
      input types with kind `image`.

      - `"opaque"`

      - `"transparent"`

    - `color: optional boolean`

      Whether the input is a color or not. Only available for `string` input type.

    - `costImpact: optional boolean`

      Whether this input affects the model's cost calculation

    - `default: optional unknown`

      The default value for the input

    - `description: optional string`

      Help text displayed in the UI to provide additional information about the input

    - `group: optional string`

      Used to visually group inputs together in the UI. Inputs with the same group value appear
      consecutively in the UI.

    - `hint: optional string`

      Hint text displayed in the UI as a tooltip to guide the user

    - `inputs: optional array of map[unknown]`

      The list of inputs which form an object within a container array.
      All inputs are the same as the current object.
      This is only available for type inputs_array inputs.

    - `kind: optional "3d" or "audio" or "document" or 5 more`

      The asset kind of the input. Only taken into account for `file` and `file_array` input types.
      If model provides multiple kinds,
      the input will be not able to create the asset on the flight on API side with dataurl without data:kind, prefix
      `file` and `file_array` inputs always expose a kind: when a model does not declare one,
      `image` is returned, which is the kind used at generation time.

      - `"3d"`

      - `"audio"`

      - `"document"`

      - `"image"`

      - `"image-hdr"`

      - `"json"`

      - `"text"`

      - `"video"`

    - `label: optional string`

      The label displayed in the UI for this input

    - `maskFrom: optional string`

      The name of the file input field to use as the mask source

    - `max: optional number`

      The maximum allowed value. Only available for `number` and `array` input types.

    - `maxDuration: optional number`

      The maximum allowed media duration in seconds. Only applies to `file` and `file_array` input types
      for video and audio assets. Validated against `asset.properties.duration` at job creation time.

    - `maxLength: optional number`

      The maximum allowed length for `string` and `model` inputs, in characters.
      For the array types (`string_array`, `model_array`) it bounds the NUMBER OF
      ITEMS instead — the length of each item is not constrained.

    - `maxSize: optional number`

      The maximum allowed file size in bytes. Only applies to `file` and `file_array` input types.
      Validated against `asset.properties.size` at job creation time.

    - `min: optional number`

      The minimum allowed value. Only available for `number` and array input types.

    - `minLength: optional number`

      The minimum allowed length for `string` and `model` inputs, in characters.
      For the array types (`string_array`, `model_array`) it bounds the NUMBER OF
      ITEMS instead — the length of each item is not constrained.

    - `modelTypes: optional array of "custom" or "elevenlabs-voice" or "flux.1" or 28 more`

      The allowed model types for this input. Example: `["flux.1-lora"]`.
      Only available for `model_array` input type.

      - `"custom"`

      - `"elevenlabs-voice"`

      - `"flux.1"`

      - `"flux.1-composition"`

      - `"flux.1-kontext-dev"`

      - `"flux.1-kontext-lora"`

      - `"flux.1-krea-dev"`

      - `"flux.1-krea-lora"`

      - `"flux.1-lora"`

      - `"flux.1-pro"`

      - `"flux.1.1-pro-ultra"`

      - `"flux.2-dev-edit-lora"`

      - `"flux.2-dev-lora"`

      - `"flux.2-klein-4b-edit-lora"`

      - `"flux.2-klein-4b-lora"`

      - `"flux.2-klein-9b-edit-lora"`

      - `"flux.2-klein-9b-lora"`

      - `"flux.2-klein-base-4b-edit-lora"`

      - `"flux.2-klein-base-4b-lora"`

      - `"flux.2-klein-base-9b-edit-lora"`

      - `"flux.2-klein-base-9b-lora"`

      - `"flux1.1-pro"`

      - `"gpt-image-1"`

      - `"qwen-image-2512-lora"`

      - `"qwen-image-edit-2509-lora"`

      - `"qwen-image-edit-2511-lora"`

      - `"qwen-image-edit-lora"`

      - `"qwen-image-lora"`

      - `"zimage-de-turbo-lora"`

      - `"zimage-lora"`

      - `"zimage-turbo-lora"`

    - `parent: optional boolean`

      Whether this input represents a parent asset to assign to the produced assets.
      Only available for `file` and `file_array` input types.

      For `file_array`, the parent asset is the first item in the array.

    - `placeholder: optional string`

      Placeholder text for the input. Only available for 'string' input type.

    - `prompt: optional boolean`

      Whether the input is a prompt. When true, displays as a text area with prompt spark feature.
      Only available for `string` input type.

    - `promptSpark: optional boolean`

      Whether the input is used with prompt spark. Only available for `string` input type.

    - `required: optional object { always, conditional, ifDefined, ifNotDefined }`

      Set of rules that describes when this input is required:

      - `always`: Input is always required
      - `ifNotDefined`: Input is required when another specified input is not defined
      - `ifDefined`: Input is required when another specified input is defined
      - `conditional`: Input is required when other inputs have specific values

      By default, the input is not required.

      - `always: optional boolean`

        Whether the input is always required

      - `conditional: optional object { values, operator }`

        Makes this input required when other inputs have one of the listed values

        - `values: unknown`

          The conditions to check:

          - Key: name of the input to check
          - Value: values of that input that satisfy the condition

        - `operator: optional "and" or "or"`

          How the conditions combine: `and` (all must match) or `or` (any must match)

          - `"and"`

          - `"or"`

      - `ifDefined: optional unknown`

        Makes this input required when another input is defined:

        - Key: name of the input that must be defined
        - Value: message to display when this input is required

      - `ifNotDefined: optional unknown`

        Makes this input required when another input is not defined:

        - Key: name of the input that must be undefined
        - Value: message to display when this input is required

    - `step: optional number`

      The step increment for numeric inputs. Only available for `number` input type.

  - `jobId: optional string`

    The ID of the job that trained the model, returned to the model owner only
    (example: "job_ocZCnG1Df35XRL1QyCZSRxAG8")

  - `modelKeyword: optional string`

    The model keyword, this is a legacy parameter, please use conceptPrompt in parameters

  - `name: optional string`

    The model name (example: "Cinematic Realism")

  - `negativePromptEmbedding: optional string`

    Fine-tune the model's inferences with negative prompt embedding

  - `ownerId: optional string`

    The owner ID (example: "team_VFhihHKMRZyDDnZAJwLb2Q")

  - `parameters: optional object { age, batchSize, classPrompt, 29 more }`

    The parameters of the model

    - `age: optional string`

      Age group of the voice (for professional cloning)

      Only available for ElevenLabs voice training

    - `batchSize: optional number`

      The batch size
      Less steps, and will increase the learning rate

      Only available for Flux LoRA training

    - `classPrompt: optional string`

      The prompt to specify images in the same class as provided instance images

      Deprecated legacy training parameter.

    - `cloneType: optional string`

      Type of voice cloning: "instant" (fast) or "professional" (higher quality, requires captcha)

      Only available for ElevenLabs voice training

    - `conceptPrompt: optional string`

      The prompt with identifier specifying the instance (or subject) of the class (example: "a daiton dog")

      Default value varies depending on the model type. For Flux LoRA, the default is an empty string.

    - `gender: optional string`

      Gender of the voice (for professional cloning)

      Only available for ElevenLabs voice training

    - `language: optional string`

      Language of the audio samples (ISO 639-1 code)

      Only available for ElevenLabs voice training

    - `learningRate: optional number`

      Initial learning rate (after the potential warmup period)

      Default value varies depending on the model type. For Flux LoRA, the default is 0.0001.

    - `learningRateTextEncoder: optional number`

      Initial learning rate (after the potential warmup period) for the text encoder

      Maximum [Flux LoRA: 0.001]
      Default [Flux LoRA: 0.00001]
      Minimum [Flux LoRA: 0.000001]

    - `learningRateUnet: optional number`

      Initial learning rate (after the potential warmup period) for the UNet

      Deprecated legacy training parameter.

    - `lrScheduler: optional "constant" or "constant-with-warmup" or "cosine" or 3 more`

      The scheduler type to use (default: "constant")

      Deprecated legacy training parameter.

      - `"constant"`

      - `"constant-with-warmup"`

      - `"cosine"`

      - `"cosine-with-restarts"`

      - `"linear"`

      - `"polynomial"`

    - `maxTrainSteps: optional number`

      Maximum number of training steps to execute (default: varies depending on the model type)

      Default value varies depending on the model type:

      - For Flux: number of training images * 100

      Maximum value varies depending on the model type:

      - For Flux: [0, 10000]

    - `nbEpochs: optional number`

      The number of epochs to train for

      Only available for Flux LoRA training

    - `nbRepeats: optional number`

      The number of times to repeat the training

      Only available for Flux LoRA training

    - `numTextTrainSteps: optional number`

      The number of training steps for the text encoder

      Deprecated legacy training parameter.

    - `numUNetTrainSteps: optional number`

      The number of training steps for the UNet

      Deprecated legacy training parameter.

    - `optimizeFor: optional "likeness"`

      Optimize the model training task for a specific type of input images. The available values are:

      - "likeness": optimize training for likeness or portrait (targets specific transformer blocks)
      - "all": train all transformer blocks
      - "none": train no specific transformer blocks

      This parameter controls which double and single transformer blocks are trained
      during the LoRA training process.

      Only available for Flux LoRA training

      - `"likeness"`

    - `priorLossWeight: optional number`

      The weight of prior preservation loss

      Deprecated legacy training parameter.

    - `randomCrop: optional boolean`

      Whether to random crop or center crop images before resizing to the working resolution

      Deprecated legacy training parameter.

    - `randomCropRatio: optional number`

      Ratio of random crops

      Deprecated legacy training parameter.

    - `randomCropScale: optional number`

      Scale of random crops

      Deprecated legacy training parameter.

    - `rank: optional number`

      The dimension of the LoRA update matrices

      Only available for Flux LoRA and Musubi training

      Default value varies depending on the model type:

      - For Flux: 16
      - For Musubi: 64

      Each trainer enforces its own tighter limit (Flux LoRA: [2; 64], Musubi: [2; 128])

    - `removeBackgroundNoise: optional boolean`

      Whether to remove background noise from audio samples before cloning.
      When enabled, each sample must be at least 5 seconds long.

      Only available for ElevenLabs voice training

    - `samplePrompts: optional array of string`

      The prompts to use for each epoch
      Only available for Flux LoRA training

    - `sampleSourceImages: optional array of string`

      The sample prompt images (AssetIds) paired with samplePrompts
      Only available for Flux LoRA training
      Must be the same length as samplePrompts

    - `scaleLr: optional boolean`

      Whether to scale the learning rate

      Note: Legacy parameter, will be ignored

      Deprecated legacy training parameter.

    - `seed: optional number`

      Used to reproduce previous results. Default: randomly generated number.

      Deprecated legacy training parameter.

    - `textEncoderTrainingRatio: optional number`

      Whether to train the text encoder or not

      Example: For 100 steps and a value of 0.2, it means that the text encoder will be trained for 20 steps and then the UNet for 80 steps

      Note: Legacy parameter, please use `numTextTrainSteps` and `numUNetTrainSteps`

      Deprecated legacy training parameter.

    - `validationFrequency: optional number`

      Validation frequency. Cannot be greater than maxTrainSteps value

      Deprecated legacy training parameter.

    - `validationPrompt: optional string`

      Validation prompt

      Deprecated legacy training parameter.

    - `voiceDescription: optional string`

      Description of the voice characteristics

      Only available for ElevenLabs voice training

    - `wandbKey: optional string`

      The Weights And Bias key to use for logging. The maximum length is 40 characters

  - `parentModelId: optional string`

    The id of the parent model

  - `performanceStats: optional object { variants, default }`

    Aggregated performance stats

    - `variants: array of object { capability, computedAt, variantKey, 9 more }`

      Performance metrics per variant

      - `capability: string`

        The generation capability (example: "txt2img", "img2video", "txt2audio")

      - `computedAt: string`

        When these stats were last computed (ISO date)

      - `variantKey: string`

        Unique variant identifier (example: "txt2img:1K", "img2video:2K", "txt2audio")

      - `arenaScore: optional object { arenaCategory, arenaModelName, fetchedAt, 5 more }`

        External quality score from arena.ai leaderboard

        - `arenaCategory: string`

          Arena category (example: "text_to_image", "image_to_video")

        - `arenaModelName: string`

          Model name on arena.ai

        - `fetchedAt: string`

          When this score was last fetched (ISO date)

        - `rank: number`

          Rank in the arena category

        - `rating: number`

          ELO rating

        - `ratingLower: number`

          ELO rating confidence interval lower bound

        - `ratingUpper: number`

          ELO rating confidence interval upper bound

        - `votes: number`

          Number of human votes

      - `costPerAssetMaxCU: optional number`

        Maximum cost per output asset (CU)

      - `costPerAssetMinCU: optional number`

        Minimum cost per output asset (CU)

      - `costPerAssetP50CU: optional number`

        Median cost per output asset (CU)

      - `inferenceLatencyP50Sec: optional number`

        Inference latency P50 per output asset (seconds)

      - `inferenceLatencyP75Sec: optional number`

        Inference latency P75 per output asset (seconds)

      - `resolution: optional string`

        The resolution bucket (example: "0.5K", "1K", "2K", "4K")

      - `totalLatencyP50Sec: optional number`

        Total latency P50 per output asset, including queue time (seconds)

      - `totalLatencyP75Sec: optional number`

        Total latency P75 per output asset, including queue time (seconds)

    - `default: optional string`

      Default variant key for quick model comparison

  - `promptEmbedding: optional string`

    Fine-tune the model's inferences with prompt embedding

  - `shortDescription: optional string`

    The model short description (example: "This model generates highly detailed cinematic scenes.")

  - `softDeletionOn: optional string`

    The date when the model will be soft deleted (only for Free plan)

  - `thumbnail: optional object { assetId, url }`

    A thumbnail for your model

    - `assetId: string`

      The AssetId of the image used as a thumbnail for your model (example: "asset_GTrL3mq4SXWyMxkOHRxlpw")

    - `url: string`

      The url of the image used as a thumbnail for your model

  - `trainingImagePairs: optional array of object { instruction, sourceId, targetId }`

    Array of training image pairs

    - `instruction: optional string`

      The instruction for the image pair, source to target

    - `sourceId: optional string`

      The source asset ID (must be a training asset)

    - `targetId: optional string`

      The target asset ID (must be a training asset)

  - `trainingImages: optional array of object { id, automaticCaptioning, createdAt, 3 more }`

    The URLs of the first 3 training images of the model. To retrieve the full set of images, get it by modelId

    - `id: string`

      The training image ID (example: "asset_GTrL3mq4SXWyMxkOHRxlpw")

    - `automaticCaptioning: string`

      Automatic captioning of the image

    - `createdAt: string`

      The training image upload date as an ISO string (example: "2023-02-03T11:19:41.579Z")

    - `description: string`

      Description for the image

    - `downloadUrl: string`

      The URL of the image

    - `name: string`

      The original file name of the image (example: "my-training-image.jpg")

  - `trainingProgress: optional object { stage, updatedAt, captchaImageUrl, 6 more }`

    Additional information about the training progress of the model

    - `stage: "pending" or "pending-captcha" or "queued-for-train" or 3 more`

      The stage of the request

      - `"pending"`

      - `"pending-captcha"`

      - `"queued-for-train"`

      - `"ready-for-captcha"`

      - `"running-train"`

      - `"starting-train"`

    - `updatedAt: number`

      Timestamp in milliseconds of the last time the training progress was updated

    - `captchaImageUrl: optional string`

      Signed URL of the captcha image to read aloud during PVC voice cloning.
      Only present when stage === 'pending-captcha'. Overwritten on each retry.

    - `position: optional number`

      Position of the job in the queue (ie. the number of job in the queue before this one)

    - `progress: optional number`

      The progress of the job

    - `remainingTimeMs: optional number`

      The remaining time in milliseconds

    - `retryableError: optional string`

      Last recoverable failure message during PVC. Present when the model has
      bounced back to stage === 'ready-for-captcha' after a step 2 or step 3
      failure (e.g. captcha rejected, time limit exceeded). Surface above the
      retry button so the user understands why they're back here.

    - `retryCount: optional number`

      Number of consecutive PVC step 2 / step 3 failures on this voice model.
      The model is marked Failed when this reaches the platform's max retries.

    - `startedAt: optional number`

      The timestamp in millisecond marking the start of the process

  - `trainingStats: optional object { endedAt, queueDuration, startedAt, trainDuration }`

    Additional information about the model's training

    - `endedAt: optional string`

      The training end time as an ISO date string

    - `queueDuration: optional number`

      The training queued duration in seconds

    - `startedAt: optional string`

      The training start time as an ISO date string

    - `trainDuration: optional number`

      The training duration in seconds

  - `uiConfig: optional object { inputProperties, lorasComponent, outputProperties, 4 more }`

    The UI configuration for the model

    - `inputProperties: optional map[object { collapsed } ]`

      Configuration for the input properties

      - `collapsed: optional boolean`

    - `lorasComponent: optional object { label, modelInput, scaleInput, modelIdInput }`

      Configuration for the loras component

      - `label: string`

        The label of the component

      - `modelInput: string`

        The input name of the model (model_array)

      - `scaleInput: string`

        The input name of the scale (number_array)

      - `modelIdInput: optional string`

        The input model id (example: a composition or a single LoRA modelId)
        If specified, the model id will be attached to the output asset as a metadata
        If the model-decomposer parser is specified on it, modelInput and scaleInput will be automatically populated

    - `outputProperties: optional map[object { label } ]`

      Configuration for the provider outputs exposed by `exposeOutput`

      - `label: string`

    - `presets: optional array of object { fields, presets }`

      Configuration for the presets

      - `fields: array of string`

      - `presets: unknown`

    - `resolutionComponent: optional object { heightInput, label, presets, widthInput }`

      Configuration for the resolution component

      - `heightInput: string`

        The input name of the height

      - `label: string`

        The label of the component

      - `presets: array of object { height, label, width }`

        The resolution presets

        - `height: number`

        - `label: string`

        - `width: number`

      - `widthInput: string`

        The input name of the width

    - `selects: optional map[unknown]`

      Configuration for the selects

    - `triggerGenerate: optional object { label, after, position }`

      Configuration for the trigger generate button

      - `label: string`

      - `after: optional string`

        The 'name' of the input where the trigger generate button will be displayed (after the input).
        Do not specify both position and after.

      - `position: optional "bottom" or "top"`

        The position of the trigger generate button. If position specified, the button will be displayed at the specified position.
        Do not specify both position and after.

        - `"bottom"`

        - `"top"`

  - `userId: optional string`

    (Deprecated) The user ID (example: "user_VFhihHKMRZyDDnZAJwLb2Q")

- `nextToken: optional string`

  A token to query the next page of recommendations

### Example

```http
curl https://api.cloud.scenario.com/v1/recommendations/models \
    -u "$SCENARIO_SDK_API_KEY:SCENARIO_SDK_API_SECRET"
```

#### Response

```json
{
  "models": [
    {
      "id": "id",
      "capabilities": [
        "3d23d"
      ],
      "collectionIds": [
        "string"
      ],
      "createdAt": "createdAt",
      "custom": true,
      "exampleAssetIds": [
        "string"
      ],
      "privacy": "private",
      "source": "civitai",
      "status": "copying",
      "tags": [
        "string"
      ],
      "trainingImagesNumber": 0,
      "type": "custom",
      "updatedAt": "updatedAt",
      "accessRestrictions": 0,
      "authorId": "authorId",
      "class": {
        "category": "category",
        "conceptPrompt": "conceptPrompt",
        "modelId": "modelId",
        "name": "name",
        "prompt": "prompt",
        "slug": "slug",
        "status": "published",
        "thumbnails": [
          "string"
        ]
      },
      "compliantModelIds": [
        "string"
      ],
      "concepts": [
        {
          "modelId": "modelId",
          "scale": -2,
          "modelEpoch": "modelEpoch"
        }
      ],
      "disableRefund": true,
      "epoch": "epoch",
      "epochs": [
        {
          "epoch": "epoch",
          "assets": [
            {
              "assetId": "assetId",
              "url": "url"
            }
          ]
        }
      ],
      "inputs": [
        {
          "name": "name",
          "type": "boolean",
          "allowedValues": [
            {}
          ],
          "backgroundBehavior": "opaque",
          "color": true,
          "costImpact": true,
          "default": {},
          "description": "description",
          "group": "group",
          "hint": "hint",
          "inputs": [
            {
              "foo": "bar"
            }
          ],
          "kind": "3d",
          "label": "label",
          "maskFrom": "maskFrom",
          "max": 0,
          "maxDuration": 0,
          "maxLength": 0,
          "maxSize": 0,
          "min": 0,
          "minLength": 0,
          "modelTypes": [
            "custom"
          ],
          "parent": true,
          "placeholder": "placeholder",
          "prompt": true,
          "promptSpark": true,
          "required": {
            "always": true,
            "conditional": {
              "values": {},
              "operator": "and"
            },
            "ifDefined": {},
            "ifNotDefined": {}
          },
          "step": 1
        }
      ],
      "jobId": "jobId",
      "modelKeyword": "modelKeyword",
      "name": "name",
      "negativePromptEmbedding": "negativePromptEmbedding",
      "ownerId": "ownerId",
      "parameters": {
        "age": "age",
        "batchSize": 1,
        "classPrompt": "classPrompt",
        "cloneType": "cloneType",
        "conceptPrompt": "conceptPrompt",
        "gender": "gender",
        "language": "language",
        "learningRate": 1,
        "learningRateTextEncoder": 0.0005,
        "learningRateUnet": 1,
        "lrScheduler": "constant",
        "maxTrainSteps": 0,
        "nbEpochs": 1,
        "nbRepeats": 1,
        "numTextTrainSteps": 0,
        "numUNetTrainSteps": 0,
        "optimizeFor": "likeness",
        "priorLossWeight": 1,
        "randomCrop": true,
        "randomCropRatio": 0,
        "randomCropScale": 0,
        "rank": 2,
        "removeBackgroundNoise": true,
        "samplePrompts": [
          "string"
        ],
        "sampleSourceImages": [
          "string"
        ],
        "scaleLr": true,
        "seed": 0,
        "textEncoderTrainingRatio": 0,
        "validationFrequency": 0,
        "validationPrompt": "validationPrompt",
        "voiceDescription": "voiceDescription",
        "wandbKey": "wandbKey"
      },
      "parentModelId": "parentModelId",
      "performanceStats": {
        "variants": [
          {
            "capability": "capability",
            "computedAt": "computedAt",
            "variantKey": "variantKey",
            "arenaScore": {
              "arenaCategory": "arenaCategory",
              "arenaModelName": "arenaModelName",
              "fetchedAt": "fetchedAt",
              "rank": 0,
              "rating": 0,
              "ratingLower": 0,
              "ratingUpper": 0,
              "votes": 0
            },
            "costPerAssetMaxCU": 0,
            "costPerAssetMinCU": 0,
            "costPerAssetP50CU": 0,
            "inferenceLatencyP50Sec": 0,
            "inferenceLatencyP75Sec": 0,
            "resolution": "resolution",
            "totalLatencyP50Sec": 0,
            "totalLatencyP75Sec": 0
          }
        ],
        "default": "default"
      },
      "promptEmbedding": "promptEmbedding",
      "shortDescription": "shortDescription",
      "softDeletionOn": "softDeletionOn",
      "thumbnail": {
        "assetId": "assetId",
        "url": "url"
      },
      "trainingImagePairs": [
        {
          "instruction": "instruction",
          "sourceId": "sourceId",
          "targetId": "targetId"
        }
      ],
      "trainingImages": [
        {
          "id": "id",
          "automaticCaptioning": "automaticCaptioning",
          "createdAt": "createdAt",
          "description": "description",
          "downloadUrl": "downloadUrl",
          "name": "name"
        }
      ],
      "trainingProgress": {
        "stage": "pending",
        "updatedAt": 0,
        "captchaImageUrl": "captchaImageUrl",
        "position": 0,
        "progress": 0,
        "remainingTimeMs": 0,
        "retryableError": "retryableError",
        "retryCount": 0,
        "startedAt": 0
      },
      "trainingStats": {
        "endedAt": "endedAt",
        "queueDuration": 0,
        "startedAt": "startedAt",
        "trainDuration": 0
      },
      "uiConfig": {
        "inputProperties": {
          "foo": {
            "collapsed": true
          }
        },
        "lorasComponent": {
          "label": "label",
          "modelInput": "modelInput",
          "scaleInput": "scaleInput",
          "modelIdInput": "modelIdInput"
        },
        "outputProperties": {
          "foo": {
            "label": "label"
          }
        },
        "presets": [
          {
            "fields": [
              "string"
            ],
            "presets": {}
          }
        ],
        "resolutionComponent": {
          "heightInput": "heightInput",
          "label": "label",
          "presets": [
            {
              "height": 0,
              "label": "label",
              "width": 0
            }
          ],
          "widthInput": "widthInput"
        },
        "selects": {
          "foo": {}
        },
        "triggerGenerate": {
          "label": "label",
          "after": "after",
          "position": "bottom"
        }
      },
      "userId": "userId"
    }
  ],
  "nextToken": "nextToken"
}
```

## Domain Types

### Recommendation List Models Response

- `RecommendationListModelsResponse object { id, capabilities, collectionIds, 37 more }`

  - `id: string`

    The model ID (example: "model_eyVcnFJcR92BxBkz7N6g5w")

  - `capabilities: array of "3d23d" or "audio2audio" or "audio2txt" or 30 more`

    List of model capabilities (example: ["txt2img", "img2img", "txt2img_ip_adapter", ...])

    - `"3d23d"`

    - `"audio2audio"`

    - `"audio2txt"`

    - `"audio2video"`

    - `"controlnet"`

    - `"controlnet_img2img"`

    - `"controlnet_inpaint"`

    - `"controlnet_inpaint_ip_adapter"`

    - `"controlnet_ip_adapter"`

    - `"controlnet_reference"`

    - `"controlnet_texture"`

    - `"img23d"`

    - `"img2img"`

    - `"img2img_ip_adapter"`

    - `"img2img_texture"`

    - `"img2txt"`

    - `"img2video"`

    - `"inpaint"`

    - `"inpaint_ip_adapter"`

    - `"outpaint"`

    - `"reference"`

    - `"reference_texture"`

    - `"txt23d"`

    - `"txt2audio"`

    - `"txt2img"`

    - `"txt2img_ip_adapter"`

    - `"txt2img_texture"`

    - `"txt2txt"`

    - `"txt2video"`

    - `"video23d"`

    - `"video2audio"`

    - `"video2img"`

    - `"video2video"`

  - `collectionIds: array of string`

    A list of CollectionId this model belongs to

  - `createdAt: string`

    The model creation date as an ISO string (example: "2023-02-03T11:19:41.579Z")

  - `custom: boolean`

    Whether the model is a custom model and can be used only with POST /generate/custom/{modelId} endpoint

  - `exampleAssetIds: array of string`

    List of all example asset IDs setup by the model owner

  - `privacy: "private" or "public" or "unlisted"`

    The privacy of the model (default: private)

    - `"private"`

    - `"public"`

    - `"unlisted"`

  - `source: "civitai" or "huggingface" or "other" or "scenario"`

    The source of the model

    - `"civitai"`

    - `"huggingface"`

    - `"other"`

    - `"scenario"`

  - `status: "copying" or "failed" or "new" or 3 more`

    The model status

    - `"copying"`

    - `"failed"`

    - `"new"`

    - `"trained"`

    - `"training"`

    - `"training-canceled"`

  - `tags: array of string`

    The associated tags (example: ["sci-fi", "landscape"])

  - `trainingImagesNumber: number`

    The total number of training images

  - `type: "custom" or "elevenlabs-voice" or "flux.1" or 28 more`

    The model type (example: "flux.1-lora")

    - `"custom"`

    - `"elevenlabs-voice"`

    - `"flux.1"`

    - `"flux.1-composition"`

    - `"flux.1-kontext-dev"`

    - `"flux.1-kontext-lora"`

    - `"flux.1-krea-dev"`

    - `"flux.1-krea-lora"`

    - `"flux.1-lora"`

    - `"flux.1-pro"`

    - `"flux.1.1-pro-ultra"`

    - `"flux.2-dev-edit-lora"`

    - `"flux.2-dev-lora"`

    - `"flux.2-klein-4b-edit-lora"`

    - `"flux.2-klein-4b-lora"`

    - `"flux.2-klein-9b-edit-lora"`

    - `"flux.2-klein-9b-lora"`

    - `"flux.2-klein-base-4b-edit-lora"`

    - `"flux.2-klein-base-4b-lora"`

    - `"flux.2-klein-base-9b-edit-lora"`

    - `"flux.2-klein-base-9b-lora"`

    - `"flux1.1-pro"`

    - `"gpt-image-1"`

    - `"qwen-image-2512-lora"`

    - `"qwen-image-edit-2509-lora"`

    - `"qwen-image-edit-2511-lora"`

    - `"qwen-image-edit-lora"`

    - `"qwen-image-lora"`

    - `"zimage-de-turbo-lora"`

    - `"zimage-lora"`

    - `"zimage-turbo-lora"`

  - `updatedAt: string`

    The model last update date as an ISO string (example: "2023-02-03T11:19:41.579Z")

  - `accessRestrictions: optional 0 or 100 or 25 or 2 more`

    The access restrictions of the model
    0: Free plan
    25: Starter plan
    50: Pro plan
    75: Max plan
    100: Enterprise plan

    - `0`

    - `100`

    - `25`

    - `50`

    - `75`

  - `authorId: optional string`

    The author user ID (example: "user_VFhihHKMRZyDDnZAJwLb2Q")

  - `class: optional object { category, conceptPrompt, modelId, 5 more }`

    The class of the model

    - `category: string`

      The category slug of the class (example: "art-style")

    - `conceptPrompt: string`

      The concept prompt of the class (example: "a sks character design")

    - `modelId: string`

      The model ID of the class. Only available for legacy models.

    - `name: string`

      The class name (example: "Character Design")

    - `prompt: string`

      The class prompt (example: "a character design")

    - `slug: string`

      The class slug (example: "art-style-character-design")

    - `status: "published" or "unpublished"`

      The class status (only published classes are listed, but unpublished classes can still appear in existing models)

      - `"published"`

      - `"unpublished"`

    - `thumbnails: array of string`

      Some example images URLs to showcase the class

  - `compliantModelIds: optional array of string`

    List of base model IDs compliant with the model (example: ["flux.1-dev", "flux.1-schnell"])
    This attribute is mainly used for Flux LoRA models

  - `concepts: optional array of object { modelId, scale, modelEpoch }`

    The concepts is required for the type model: composition

    - `modelId: string`

      The model ID (example: "model_eyVcnFJcR92BxBkz7N6g5w")

    - `scale: number`

      The scale of the model (example: 1.0)
      For Flux Kontext Prompt Editing, the scale is between 0 and 2.

    - `modelEpoch: optional string`

      The epoch of the model (example: "000001")
      Only available for Flux Lora Trained models

  - `disableRefund: optional boolean`

    When true, credits spent on a generation with this model are not
    automatically refunded if the generation fails. Absent or false means
    failed generations are refunded as usual.

  - `epoch: optional string`

    The epoch of the model. Only available for Flux Lora Trained models.
    If not set, uses the final model epoch (latest)

  - `epochs: optional array of object { epoch, assets }`

    The epochs of the model. Only available for Flux Lora Trained models.

    - `epoch: string`

      The epoch hash to identify the epoch

    - `assets: optional array of object { assetId, url }`

      The assets of the epoch if sample prompts as been supplied during training

      - `assetId: string`

        The AssetId of the image during training (example: "asset_GTrL3mq4SXWyMxkOHRxlpw")

      - `url: string`

        The url of the asset

  - `inputs: optional array of object { name, type, allowedValues, 24 more }`

    The inputs of the model. Only used for custom models. To retrieve this list, get it by modelId with GET /models/{modelId}

    - `name: string`

      The name that must be user to call the model through the API

    - `type: "boolean" or "file" or "file_array" or 7 more`

      The data type of the input

      - `"boolean"`

      - `"file"`

      - `"file_array"`

      - `"inputs_array"`

      - `"model"`

      - `"model_array"`

      - `"number"`

      - `"number_array"`

      - `"string"`

      - `"string_array"`

    - `allowedValues: optional array of unknown`

      The allowed values for the input. For `string` or `number` types, creates a single-select
      dropdown.
      For `string_array` type, creates a multi-select dropdown.

    - `backgroundBehavior: optional "opaque" or "transparent"`

      Specifies the background behavior for the input. Only available for `file` and `file_array`
      input types with kind `image`.

      - `"opaque"`

      - `"transparent"`

    - `color: optional boolean`

      Whether the input is a color or not. Only available for `string` input type.

    - `costImpact: optional boolean`

      Whether this input affects the model's cost calculation

    - `default: optional unknown`

      The default value for the input

    - `description: optional string`

      Help text displayed in the UI to provide additional information about the input

    - `group: optional string`

      Used to visually group inputs together in the UI. Inputs with the same group value appear
      consecutively in the UI.

    - `hint: optional string`

      Hint text displayed in the UI as a tooltip to guide the user

    - `inputs: optional array of map[unknown]`

      The list of inputs which form an object within a container array.
      All inputs are the same as the current object.
      This is only available for type inputs_array inputs.

    - `kind: optional "3d" or "audio" or "document" or 5 more`

      The asset kind of the input. Only taken into account for `file` and `file_array` input types.
      If model provides multiple kinds,
      the input will be not able to create the asset on the flight on API side with dataurl without data:kind, prefix
      `file` and `file_array` inputs always expose a kind: when a model does not declare one,
      `image` is returned, which is the kind used at generation time.

      - `"3d"`

      - `"audio"`

      - `"document"`

      - `"image"`

      - `"image-hdr"`

      - `"json"`

      - `"text"`

      - `"video"`

    - `label: optional string`

      The label displayed in the UI for this input

    - `maskFrom: optional string`

      The name of the file input field to use as the mask source

    - `max: optional number`

      The maximum allowed value. Only available for `number` and `array` input types.

    - `maxDuration: optional number`

      The maximum allowed media duration in seconds. Only applies to `file` and `file_array` input types
      for video and audio assets. Validated against `asset.properties.duration` at job creation time.

    - `maxLength: optional number`

      The maximum allowed length for `string` and `model` inputs, in characters.
      For the array types (`string_array`, `model_array`) it bounds the NUMBER OF
      ITEMS instead — the length of each item is not constrained.

    - `maxSize: optional number`

      The maximum allowed file size in bytes. Only applies to `file` and `file_array` input types.
      Validated against `asset.properties.size` at job creation time.

    - `min: optional number`

      The minimum allowed value. Only available for `number` and array input types.

    - `minLength: optional number`

      The minimum allowed length for `string` and `model` inputs, in characters.
      For the array types (`string_array`, `model_array`) it bounds the NUMBER OF
      ITEMS instead — the length of each item is not constrained.

    - `modelTypes: optional array of "custom" or "elevenlabs-voice" or "flux.1" or 28 more`

      The allowed model types for this input. Example: `["flux.1-lora"]`.
      Only available for `model_array` input type.

      - `"custom"`

      - `"elevenlabs-voice"`

      - `"flux.1"`

      - `"flux.1-composition"`

      - `"flux.1-kontext-dev"`

      - `"flux.1-kontext-lora"`

      - `"flux.1-krea-dev"`

      - `"flux.1-krea-lora"`

      - `"flux.1-lora"`

      - `"flux.1-pro"`

      - `"flux.1.1-pro-ultra"`

      - `"flux.2-dev-edit-lora"`

      - `"flux.2-dev-lora"`

      - `"flux.2-klein-4b-edit-lora"`

      - `"flux.2-klein-4b-lora"`

      - `"flux.2-klein-9b-edit-lora"`

      - `"flux.2-klein-9b-lora"`

      - `"flux.2-klein-base-4b-edit-lora"`

      - `"flux.2-klein-base-4b-lora"`

      - `"flux.2-klein-base-9b-edit-lora"`

      - `"flux.2-klein-base-9b-lora"`

      - `"flux1.1-pro"`

      - `"gpt-image-1"`

      - `"qwen-image-2512-lora"`

      - `"qwen-image-edit-2509-lora"`

      - `"qwen-image-edit-2511-lora"`

      - `"qwen-image-edit-lora"`

      - `"qwen-image-lora"`

      - `"zimage-de-turbo-lora"`

      - `"zimage-lora"`

      - `"zimage-turbo-lora"`

    - `parent: optional boolean`

      Whether this input represents a parent asset to assign to the produced assets.
      Only available for `file` and `file_array` input types.

      For `file_array`, the parent asset is the first item in the array.

    - `placeholder: optional string`

      Placeholder text for the input. Only available for 'string' input type.

    - `prompt: optional boolean`

      Whether the input is a prompt. When true, displays as a text area with prompt spark feature.
      Only available for `string` input type.

    - `promptSpark: optional boolean`

      Whether the input is used with prompt spark. Only available for `string` input type.

    - `required: optional object { always, conditional, ifDefined, ifNotDefined }`

      Set of rules that describes when this input is required:

      - `always`: Input is always required
      - `ifNotDefined`: Input is required when another specified input is not defined
      - `ifDefined`: Input is required when another specified input is defined
      - `conditional`: Input is required when other inputs have specific values

      By default, the input is not required.

      - `always: optional boolean`

        Whether the input is always required

      - `conditional: optional object { values, operator }`

        Makes this input required when other inputs have one of the listed values

        - `values: unknown`

          The conditions to check:

          - Key: name of the input to check
          - Value: values of that input that satisfy the condition

        - `operator: optional "and" or "or"`

          How the conditions combine: `and` (all must match) or `or` (any must match)

          - `"and"`

          - `"or"`

      - `ifDefined: optional unknown`

        Makes this input required when another input is defined:

        - Key: name of the input that must be defined
        - Value: message to display when this input is required

      - `ifNotDefined: optional unknown`

        Makes this input required when another input is not defined:

        - Key: name of the input that must be undefined
        - Value: message to display when this input is required

    - `step: optional number`

      The step increment for numeric inputs. Only available for `number` input type.

  - `jobId: optional string`

    The ID of the job that trained the model, returned to the model owner only
    (example: "job_ocZCnG1Df35XRL1QyCZSRxAG8")

  - `modelKeyword: optional string`

    The model keyword, this is a legacy parameter, please use conceptPrompt in parameters

  - `name: optional string`

    The model name (example: "Cinematic Realism")

  - `negativePromptEmbedding: optional string`

    Fine-tune the model's inferences with negative prompt embedding

  - `ownerId: optional string`

    The owner ID (example: "team_VFhihHKMRZyDDnZAJwLb2Q")

  - `parameters: optional object { age, batchSize, classPrompt, 29 more }`

    The parameters of the model

    - `age: optional string`

      Age group of the voice (for professional cloning)

      Only available for ElevenLabs voice training

    - `batchSize: optional number`

      The batch size
      Less steps, and will increase the learning rate

      Only available for Flux LoRA training

    - `classPrompt: optional string`

      The prompt to specify images in the same class as provided instance images

      Deprecated legacy training parameter.

    - `cloneType: optional string`

      Type of voice cloning: "instant" (fast) or "professional" (higher quality, requires captcha)

      Only available for ElevenLabs voice training

    - `conceptPrompt: optional string`

      The prompt with identifier specifying the instance (or subject) of the class (example: "a daiton dog")

      Default value varies depending on the model type. For Flux LoRA, the default is an empty string.

    - `gender: optional string`

      Gender of the voice (for professional cloning)

      Only available for ElevenLabs voice training

    - `language: optional string`

      Language of the audio samples (ISO 639-1 code)

      Only available for ElevenLabs voice training

    - `learningRate: optional number`

      Initial learning rate (after the potential warmup period)

      Default value varies depending on the model type. For Flux LoRA, the default is 0.0001.

    - `learningRateTextEncoder: optional number`

      Initial learning rate (after the potential warmup period) for the text encoder

      Maximum [Flux LoRA: 0.001]
      Default [Flux LoRA: 0.00001]
      Minimum [Flux LoRA: 0.000001]

    - `learningRateUnet: optional number`

      Initial learning rate (after the potential warmup period) for the UNet

      Deprecated legacy training parameter.

    - `lrScheduler: optional "constant" or "constant-with-warmup" or "cosine" or 3 more`

      The scheduler type to use (default: "constant")

      Deprecated legacy training parameter.

      - `"constant"`

      - `"constant-with-warmup"`

      - `"cosine"`

      - `"cosine-with-restarts"`

      - `"linear"`

      - `"polynomial"`

    - `maxTrainSteps: optional number`

      Maximum number of training steps to execute (default: varies depending on the model type)

      Default value varies depending on the model type:

      - For Flux: number of training images * 100

      Maximum value varies depending on the model type:

      - For Flux: [0, 10000]

    - `nbEpochs: optional number`

      The number of epochs to train for

      Only available for Flux LoRA training

    - `nbRepeats: optional number`

      The number of times to repeat the training

      Only available for Flux LoRA training

    - `numTextTrainSteps: optional number`

      The number of training steps for the text encoder

      Deprecated legacy training parameter.

    - `numUNetTrainSteps: optional number`

      The number of training steps for the UNet

      Deprecated legacy training parameter.

    - `optimizeFor: optional "likeness"`

      Optimize the model training task for a specific type of input images. The available values are:

      - "likeness": optimize training for likeness or portrait (targets specific transformer blocks)
      - "all": train all transformer blocks
      - "none": train no specific transformer blocks

      This parameter controls which double and single transformer blocks are trained
      during the LoRA training process.

      Only available for Flux LoRA training

      - `"likeness"`

    - `priorLossWeight: optional number`

      The weight of prior preservation loss

      Deprecated legacy training parameter.

    - `randomCrop: optional boolean`

      Whether to random crop or center crop images before resizing to the working resolution

      Deprecated legacy training parameter.

    - `randomCropRatio: optional number`

      Ratio of random crops

      Deprecated legacy training parameter.

    - `randomCropScale: optional number`

      Scale of random crops

      Deprecated legacy training parameter.

    - `rank: optional number`

      The dimension of the LoRA update matrices

      Only available for Flux LoRA and Musubi training

      Default value varies depending on the model type:

      - For Flux: 16
      - For Musubi: 64

      Each trainer enforces its own tighter limit (Flux LoRA: [2; 64], Musubi: [2; 128])

    - `removeBackgroundNoise: optional boolean`

      Whether to remove background noise from audio samples before cloning.
      When enabled, each sample must be at least 5 seconds long.

      Only available for ElevenLabs voice training

    - `samplePrompts: optional array of string`

      The prompts to use for each epoch
      Only available for Flux LoRA training

    - `sampleSourceImages: optional array of string`

      The sample prompt images (AssetIds) paired with samplePrompts
      Only available for Flux LoRA training
      Must be the same length as samplePrompts

    - `scaleLr: optional boolean`

      Whether to scale the learning rate

      Note: Legacy parameter, will be ignored

      Deprecated legacy training parameter.

    - `seed: optional number`

      Used to reproduce previous results. Default: randomly generated number.

      Deprecated legacy training parameter.

    - `textEncoderTrainingRatio: optional number`

      Whether to train the text encoder or not

      Example: For 100 steps and a value of 0.2, it means that the text encoder will be trained for 20 steps and then the UNet for 80 steps

      Note: Legacy parameter, please use `numTextTrainSteps` and `numUNetTrainSteps`

      Deprecated legacy training parameter.

    - `validationFrequency: optional number`

      Validation frequency. Cannot be greater than maxTrainSteps value

      Deprecated legacy training parameter.

    - `validationPrompt: optional string`

      Validation prompt

      Deprecated legacy training parameter.

    - `voiceDescription: optional string`

      Description of the voice characteristics

      Only available for ElevenLabs voice training

    - `wandbKey: optional string`

      The Weights And Bias key to use for logging. The maximum length is 40 characters

  - `parentModelId: optional string`

    The id of the parent model

  - `performanceStats: optional object { variants, default }`

    Aggregated performance stats

    - `variants: array of object { capability, computedAt, variantKey, 9 more }`

      Performance metrics per variant

      - `capability: string`

        The generation capability (example: "txt2img", "img2video", "txt2audio")

      - `computedAt: string`

        When these stats were last computed (ISO date)

      - `variantKey: string`

        Unique variant identifier (example: "txt2img:1K", "img2video:2K", "txt2audio")

      - `arenaScore: optional object { arenaCategory, arenaModelName, fetchedAt, 5 more }`

        External quality score from arena.ai leaderboard

        - `arenaCategory: string`

          Arena category (example: "text_to_image", "image_to_video")

        - `arenaModelName: string`

          Model name on arena.ai

        - `fetchedAt: string`

          When this score was last fetched (ISO date)

        - `rank: number`

          Rank in the arena category

        - `rating: number`

          ELO rating

        - `ratingLower: number`

          ELO rating confidence interval lower bound

        - `ratingUpper: number`

          ELO rating confidence interval upper bound

        - `votes: number`

          Number of human votes

      - `costPerAssetMaxCU: optional number`

        Maximum cost per output asset (CU)

      - `costPerAssetMinCU: optional number`

        Minimum cost per output asset (CU)

      - `costPerAssetP50CU: optional number`

        Median cost per output asset (CU)

      - `inferenceLatencyP50Sec: optional number`

        Inference latency P50 per output asset (seconds)

      - `inferenceLatencyP75Sec: optional number`

        Inference latency P75 per output asset (seconds)

      - `resolution: optional string`

        The resolution bucket (example: "0.5K", "1K", "2K", "4K")

      - `totalLatencyP50Sec: optional number`

        Total latency P50 per output asset, including queue time (seconds)

      - `totalLatencyP75Sec: optional number`

        Total latency P75 per output asset, including queue time (seconds)

    - `default: optional string`

      Default variant key for quick model comparison

  - `promptEmbedding: optional string`

    Fine-tune the model's inferences with prompt embedding

  - `shortDescription: optional string`

    The model short description (example: "This model generates highly detailed cinematic scenes.")

  - `softDeletionOn: optional string`

    The date when the model will be soft deleted (only for Free plan)

  - `thumbnail: optional object { assetId, url }`

    A thumbnail for your model

    - `assetId: string`

      The AssetId of the image used as a thumbnail for your model (example: "asset_GTrL3mq4SXWyMxkOHRxlpw")

    - `url: string`

      The url of the image used as a thumbnail for your model

  - `trainingImagePairs: optional array of object { instruction, sourceId, targetId }`

    Array of training image pairs

    - `instruction: optional string`

      The instruction for the image pair, source to target

    - `sourceId: optional string`

      The source asset ID (must be a training asset)

    - `targetId: optional string`

      The target asset ID (must be a training asset)

  - `trainingImages: optional array of object { id, automaticCaptioning, createdAt, 3 more }`

    The URLs of the first 3 training images of the model. To retrieve the full set of images, get it by modelId

    - `id: string`

      The training image ID (example: "asset_GTrL3mq4SXWyMxkOHRxlpw")

    - `automaticCaptioning: string`

      Automatic captioning of the image

    - `createdAt: string`

      The training image upload date as an ISO string (example: "2023-02-03T11:19:41.579Z")

    - `description: string`

      Description for the image

    - `downloadUrl: string`

      The URL of the image

    - `name: string`

      The original file name of the image (example: "my-training-image.jpg")

  - `trainingProgress: optional object { stage, updatedAt, captchaImageUrl, 6 more }`

    Additional information about the training progress of the model

    - `stage: "pending" or "pending-captcha" or "queued-for-train" or 3 more`

      The stage of the request

      - `"pending"`

      - `"pending-captcha"`

      - `"queued-for-train"`

      - `"ready-for-captcha"`

      - `"running-train"`

      - `"starting-train"`

    - `updatedAt: number`

      Timestamp in milliseconds of the last time the training progress was updated

    - `captchaImageUrl: optional string`

      Signed URL of the captcha image to read aloud during PVC voice cloning.
      Only present when stage === 'pending-captcha'. Overwritten on each retry.

    - `position: optional number`

      Position of the job in the queue (ie. the number of job in the queue before this one)

    - `progress: optional number`

      The progress of the job

    - `remainingTimeMs: optional number`

      The remaining time in milliseconds

    - `retryableError: optional string`

      Last recoverable failure message during PVC. Present when the model has
      bounced back to stage === 'ready-for-captcha' after a step 2 or step 3
      failure (e.g. captcha rejected, time limit exceeded). Surface above the
      retry button so the user understands why they're back here.

    - `retryCount: optional number`

      Number of consecutive PVC step 2 / step 3 failures on this voice model.
      The model is marked Failed when this reaches the platform's max retries.

    - `startedAt: optional number`

      The timestamp in millisecond marking the start of the process

  - `trainingStats: optional object { endedAt, queueDuration, startedAt, trainDuration }`

    Additional information about the model's training

    - `endedAt: optional string`

      The training end time as an ISO date string

    - `queueDuration: optional number`

      The training queued duration in seconds

    - `startedAt: optional string`

      The training start time as an ISO date string

    - `trainDuration: optional number`

      The training duration in seconds

  - `uiConfig: optional object { inputProperties, lorasComponent, outputProperties, 4 more }`

    The UI configuration for the model

    - `inputProperties: optional map[object { collapsed } ]`

      Configuration for the input properties

      - `collapsed: optional boolean`

    - `lorasComponent: optional object { label, modelInput, scaleInput, modelIdInput }`

      Configuration for the loras component

      - `label: string`

        The label of the component

      - `modelInput: string`

        The input name of the model (model_array)

      - `scaleInput: string`

        The input name of the scale (number_array)

      - `modelIdInput: optional string`

        The input model id (example: a composition or a single LoRA modelId)
        If specified, the model id will be attached to the output asset as a metadata
        If the model-decomposer parser is specified on it, modelInput and scaleInput will be automatically populated

    - `outputProperties: optional map[object { label } ]`

      Configuration for the provider outputs exposed by `exposeOutput`

      - `label: string`

    - `presets: optional array of object { fields, presets }`

      Configuration for the presets

      - `fields: array of string`

      - `presets: unknown`

    - `resolutionComponent: optional object { heightInput, label, presets, widthInput }`

      Configuration for the resolution component

      - `heightInput: string`

        The input name of the height

      - `label: string`

        The label of the component

      - `presets: array of object { height, label, width }`

        The resolution presets

        - `height: number`

        - `label: string`

        - `width: number`

      - `widthInput: string`

        The input name of the width

    - `selects: optional map[unknown]`

      Configuration for the selects

    - `triggerGenerate: optional object { label, after, position }`

      Configuration for the trigger generate button

      - `label: string`

      - `after: optional string`

        The 'name' of the input where the trigger generate button will be displayed (after the input).
        Do not specify both position and after.

      - `position: optional "bottom" or "top"`

        The position of the trigger generate button. If position specified, the button will be displayed at the specified position.
        Do not specify both position and after.

        - `"bottom"`

        - `"top"`

  - `userId: optional string`

    (Deprecated) The user ID (example: "user_VFhihHKMRZyDDnZAJwLb2Q")
