# List models

GET https://fusara.ai/api/v3/models

Browse published models without authentication. A valid API key adds checkpoint choices accessible to that account. Invalid supplied credentials are rejected. include=presentation returns the same profile schema, defaults, labels, controls and capability rules used by Workspace; execution and provider configuration are never exposed. Responses must not be stored by shared caches.

## Example request

```bash
curl 'https://fusara.ai/api/v3/models?search=qwen&limit=1'
```

## Parameters

- `search` (string): Search public model IDs and names. Empty or whitespace-only values apply no search filter. query.
- `limit` (integer): Models per page. query; Default: 20; Minimum: 1; Maximum: 100.
- `offset` (integer): Zero-based offset. query; Default: 0; Minimum: 0; Maximum: 100000.
- `include` (string): Include the profile's UI contract. Omit for the compact response. query; Values: "presentation".

## Responses

### 200

OK

#### Response headers

- `X-Request-Id` (string, required): Support/trace identifier for this HTTP request.

```json
{
  "data": [
    {
      "id": "qwen-image21-create",
      "name": "Qwen Image 2.1",
      "operation": "image_create",
      "revision": 1,
      "request_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "model",
          "prompt"
        ],
        "properties": {
          "model": {
            "type": "string",
            "const": "qwen-image21-create"
          },
          "quality": {
            "type": "string",
            "enum": [
              "fast",
              "pro",
              "ultra"
            ],
            "default": "pro"
          },
          "width": {
            "type": "integer",
            "minimum": 512,
            "maximum": 4096,
            "multipleOf": 16,
            "default": 1024
          },
          "height": {
            "type": "integer",
            "minimum": 512,
            "maximum": 4096,
            "multipleOf": 16,
            "default": 1024
          },
          "count": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4,
            "default": 1
          },
          "steps": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "description": "Defaults by preset — quality=\"fast\": 6; quality=\"pro\": 25; quality=\"ultra\": 40. Explicit values override the preset."
          },
          "prompt_enhance": {
            "type": "boolean",
            "default": false
          },
          "prompt": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1
          },
          "image_references": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "media_id": {
                  "type": "integer",
                  "minimum": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "artifact": {
                  "enum": [
                    "original",
                    "first_frame",
                    "last_frame"
                  ]
                }
              },
              "oneOf": [
                {
                  "required": [
                    "media_id"
                  ]
                },
                {
                  "required": [
                    "url"
                  ]
                }
              ]
            }
          },
          "loras": {
            "type": "array",
            "minItems": 1,
            "maxItems": 64,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "model_id": {
                  "type": "integer",
                  "minimum": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "strength": {
                  "type": "number",
                  "minimum": -10,
                  "maximum": 10,
                  "default": 0.8
                }
              },
              "oneOf": [
                {
                  "required": [
                    "model_id"
                  ]
                },
                {
                  "required": [
                    "url"
                  ]
                }
              ]
            }
          },
          "webhook_url": {
            "type": "string",
            "format": "uri",
            "maxLength": 2048,
            "description": "Optional public HTTPS callback URL; no registration required. Receives the full Run JSON, ready to save without another GET. Signature verification is optional; without it, sender authenticity is unverified."
          }
        },
        "description": "Model-specific input combinations and conditional limits are also validated by the server before acceptance.",
        "allOf": [
          {
            "if": {
              "required": [
                "quality"
              ],
              "properties": {
                "quality": {
                  "const": "fast"
                }
              }
            },
            "then": {
              "properties": {
                "steps": {
                  "default": 6
                }
              }
            }
          },
          {
            "if": {
              "required": [
                "quality"
              ],
              "properties": {
                "quality": {
                  "const": "pro"
                }
              }
            },
            "then": {
              "properties": {
                "steps": {
                  "default": 25
                }
              }
            }
          },
          {
            "if": {
              "required": [
                "quality"
              ],
              "properties": {
                "quality": {
                  "const": "ultra"
                }
              }
            },
            "then": {
              "properties": {
                "steps": {
                  "default": 40
                }
              }
            }
          }
        ]
      }
    }
  ],
  "total": 2,
  "limit": 1,
  "offset": 0
}
```

#### Response body

- `data` (object[], required): Published models matching the request.
- `data.id` (string, required): Exact public selector for requests, including any native variant suffix.
- `data.name` (string, required): Display name of the model.
- `data.operation` (string, required): Generation or analysis operation supported by this model.
- `data.revision` (integer, required): Revision of the published model contract. Format: int64.
- `data.request_schema` (object, required): Authoritative JSON Schema for the flat request: supported fields, required inputs, defaults, ranges and conditional presets. Read allOf/if/then when settings change.
- `data.presentation` (object)
- `data.presentation.icon` (string)
- `data.presentation.profile_schema` (object, required)
- `data.presentation.defaults` (object, required)
- `data.presentation.parameter_names` (object, required)
- `data.presentation.parameter_display` (object, required)
- `data.presentation.capabilities` (object, required)
- `data.presentation.parameter_presets` (object[], required)
- `data.presentation.parameter_presets.parameter` (string)
- `data.presentation.parameter_presets.value` (any JSON value)
- `data.presentation.parameter_presets.parameters` (object)
- `data.presentation.profile_key` (string, required)
- `data.presentation.default_model` (string, required)
- `data.presentation.category` (string, required): Workspace tool group: image, video, audio, text, llm or model_asset. Describes the tool's purpose, not the media it accepts.
- `data.presentation.starting_price` (object)
- `data.presentation.starting_price.amount` (string, required): Common FUZ per unit, as a decimal string rounded upward to two decimal places.
- `data.presentation.starting_price.unit` (string, required): image, video_second (generated or processed seconds), or generation when output duration is automatic.
- `data.presentation.starting_price.usd_equivalent` (object)
- `data.presentation.starting_price.usd_equivalent.amount` (string, required): USD per the same unit as the associated FUZ amount, as a decimal string.
- `data.presentation.starting_price.usd_equivalent.annual_plan_id` (string, required): Public annual plan used for the conversion.
- `data.presentation.starting_price.usd_equivalent.annual_price` (string, required): Full annual payment in USD, as a decimal string; not a monthly payment.
- `data.presentation.starting_price.usd_equivalent.monthly_credits` (string, required): Included FUZ granted each month, as an integer string. The annual conversion uses twelve monthly allowances.
- `data.presentation.image_pricing` (object)
- `data.presentation.image_pricing.generation_per_megapixel_step` (string, required): Common FUZ per megapixel per inference step, per output image, as a decimal string.
- `data.presentation.image_pricing.reference_per_image` (string, required): Common FUZ per image, style or character reference, per output image, as a decimal string.
- `data.presentation.image_pricing.prompt_enhancement_per_request` (string, required): Common FUZ once per request when prompt enhancement is enabled, as a decimal string.
- `data.presentation.image_pricing.pixels_per_megapixel` (integer, required): Number of pixels in the megapixel unit used by these rates. Format: int32.
- `data.presentation.image_prices` (object[]): Per-image prices for this selector's finite pricing choices, calculated by the shared billing engine. Optional reference charges, when present, are described by reference_surcharge. Other media-dependent, continuous or additional fees make this table unavailable.
- `data.presentation.image_prices.parameters` (object, required): Public request parameters selecting this per-image price. Empty when the version has one image price.
- `data.presentation.image_prices.amount` (string, required): Common FUZ for one output image, as a decimal string. Multiply by count for this supported fixed-per-image tariff.
- `data.presentation.image_prices.usd_equivalent` (object)
- `data.presentation.image_prices.usd_equivalent.amount` (string, required): USD per the same unit as the associated FUZ amount, as a decimal string.
- `data.presentation.image_prices.usd_equivalent.annual_plan_id` (string, required): Public annual plan used for the conversion.
- `data.presentation.image_prices.usd_equivalent.annual_price` (string, required): Full annual payment in USD, as a decimal string; not a monthly payment.
- `data.presentation.image_prices.usd_equivalent.monthly_credits` (string, required): Included FUZ granted each month, as an integer string. The annual conversion uses twelve monthly allowances.
- `data.presentation.image_prices.reference_surcharge` (object)
- `data.presentation.image_prices.reference_surcharge.included` (integer, required): Number of image references included per request. Format: int32.
- `data.presentation.image_prices.reference_surcharge.amount` (string, required): Common FUZ per additional image reference, once per request, as a decimal string.
- `total` (integer, required): Total matching models. Format: int32.
- `limit` (integer, required): Requested page size, 1 to 100; defaults to 20. Format: int32.
- `offset` (integer, required): Zero-based offset; defaults to 0. Format: int32.

### 400

invalid_header: supply only one authentication header, Authorization: Bearer or X-API-Key.

#### Response headers

- `X-Request-Id` (string, required): Support/trace identifier for this HTTP request.

#### Response body

- `error` (object, required)
- `error.code` (string, required): Machine-readable request error code.
- `error.message` (string, required): Human-readable explanation.
- `error.retryable` (boolean, required): Whether the failure is transient. For uncertain POST outcomes, preserve the original idempotency key and body.
- `error.errors` (object[]): Field errors when applicable. Omitted otherwise.
- `error.errors.pointer` (string, required): JSON Pointer to the invalid field, such as /images/0/url.
- `error.errors.code` (string, required): Machine-readable field error code.
- `error.errors.message` (string, required): How this field failed validation.

### 401

authentication_required: the API key is missing or invalid. Public methods allow omission, but reject invalid supplied credentials.

#### Response headers

- `WWW-Authenticate` (string, required): Bearer authentication challenge. Values: "Bearer".
- `X-Request-Id` (string, required): Support/trace identifier for this HTTP request.

#### Response body

- `error` (object, required)
- `error.code` (string, required): Machine-readable request error code.
- `error.message` (string, required): Human-readable explanation.
- `error.retryable` (boolean, required): Whether the failure is transient. For uncertain POST outcomes, preserve the original idempotency key and body.
- `error.errors` (object[]): Field errors when applicable. Omitted otherwise.
- `error.errors.pointer` (string, required): JSON Pointer to the invalid field, such as /images/0/url.
- `error.errors.code` (string, required): Machine-readable field error code.
- `error.errors.message` (string, required): How this field failed validation.

### 422

validation_error: correct the fields identified by error.errors[].pointer; unknown fields and query parameters are rejected.

#### Response headers

- `X-Request-Id` (string, required): Support/trace identifier for this HTTP request.

#### Response body

- `error` (object, required)
- `error.code` (string, required): Machine-readable request error code.
- `error.message` (string, required): Human-readable explanation.
- `error.retryable` (boolean, required): Whether the failure is transient. For uncertain POST outcomes, preserve the original idempotency key and body.
- `error.errors` (object[]): Field errors when applicable. Omitted otherwise.
- `error.errors.pointer` (string, required): JSON Pointer to the invalid field, such as /images/0/url.
- `error.errors.code` (string, required): Machine-readable field error code.
- `error.errors.message` (string, required): How this field failed validation.

### 429

rate_limited (retryable: true): wait for the indicated delay, then retry. Use bounded backoff if no delay is supplied.

#### Response headers

- `Retry-After` (integer): When supplied, the minimum number of seconds to wait before retrying a transient failure. Preserve the original idempotency key and body when retrying a submission. Minimum: 1.
- `X-Request-Id` (string, required): Support/trace identifier for this HTTP request.

#### Response body

- `error` (object, required)
- `error.code` (string, required): Machine-readable request error code.
- `error.message` (string, required): Human-readable explanation.
- `error.retryable` (boolean, required): Whether the failure is transient. For uncertain POST outcomes, preserve the original idempotency key and body.
- `error.errors` (object[]): Field errors when applicable. Omitted otherwise.
- `error.errors.pointer` (string, required): JSON Pointer to the invalid field, such as /images/0/url.
- `error.errors.code` (string, required): Machine-readable field error code.
- `error.errors.message` (string, required): How this field failed validation.

### 500

internal_error: unexpected server failure. Contact support if the failure persists; inspect error.retryable before retrying automatically.

#### Response headers

- `X-Request-Id` (string, required): Support/trace identifier for this HTTP request.

#### Response body

- `error` (object, required)
- `error.code` (string, required): Machine-readable request error code.
- `error.message` (string, required): Human-readable explanation.
- `error.retryable` (boolean, required): Whether the failure is transient. For uncertain POST outcomes, preserve the original idempotency key and body.
- `error.errors` (object[]): Field errors when applicable. Omitted otherwise.
- `error.errors.pointer` (string, required): JSON Pointer to the invalid field, such as /images/0/url.
- `error.errors.code` (string, required): Machine-readable field error code.
- `error.errors.message` (string, required): How this field failed validation.

