Source: https://docs.sogni.ai/api-reference/model-discovery/

# Model discovery and network demand

These public, rate-limited reads use `https://api.sogni.ai` and need no API key. Use them to select generation models, show current network activity, and check worker release information. For the OpenAI-compatible LLM listing, use [`/v1/models`](https://docs.sogni.ai/api-reference/llm-models/). The catalog below also covers image, video, audio, and 3D model generation.

## [#](https://docs.sogni.ai/api-reference/model-discovery/#model-catalog)Model catalog

`GET /v1/model-catalog` supports optional filters:

| Parameter | Values |
| --- | --- |
| `mediaType` | `image`, `video`, `audio`, `text`, or `model` (3D) |
| `network` | `fast` or `relaxed`; returns only models with at least one connected worker on that network |
| `include` | `parameters` to include parameter metadata in the list |

```
curl --fail-with-body 'https://api.sogni.ai/v1/model-catalog?mediaType=image&network=fast'
```

The success envelope contains `data.catalogVersion`, `updatedAt`, `count`, and `models`. Model descriptors include `id`, `sid`, `name`, `mediaType`, `tierId`, `availableNetworks`, `workerCounts`, `tags`, and attribution where available. Some metadata is nullable, and `availableNetworks` is empty when no worker is connected. Parameters are omitted from the default list.

`GET /v1/model-catalog/:modelId` returns `data.model`, including parameter metadata, with the snapshot version and update time. URL-encode the model ID. Unknown models return `404`; invalid filters return `400`. If the catalog is temporarily unavailable, the API returns `503`; retry with backoff.

The catalog is cached for 30 seconds and supports `ETag` / `If-None-Match`. A `304` has no JSON body; reuse your cached representation. Catalog presence does not reserve a worker or guarantee a particular request can run immediately.

## [#](https://docs.sogni.ai/api-reference/model-discovery/#live-model-supply-and-demand)Live model supply and demand

`GET /v1/model-demand?network=fast` returns `data.updatedAt`, `networks`, `count`, and `models`. Omit `network` to request the available network snapshots; the accepted values are `fast` and `relaxed`.

Each model has `id`, `sid`, `name`, `mediaType`, and `networks`, whose per-network entry contains:

| Counter | Meaning |
| --- | --- |
| `workersReady` | Workers advertising availability for this model. |
| `workersLoaded` | Workers with this model loaded in memory. |
| `jobsActive` | Jobs currently rendering. |
| `jobsQueued` | Jobs waiting for assignment. |

These are a snapshot, not a queue-position or completion-time guarantee. `data.networks` lists networks whose live counters were reachable: a network missing from `data.networks` means unavailable information, **not zero demand**. Within a reachable network, a model with no entry has all four counters at zero; models with no activity on any network are left out. Temporary inability to obtain a usable snapshot can return `503`.

Responses are cached for 15 seconds and support `ETag` / `If-None-Match`. Poll no faster than that cache interval, and back off on `429` or `503`.

## [#](https://docs.sogni.ai/api-reference/model-discovery/#model-sample-gallery)Model sample gallery

`GET /v1/model-gallery?modelIds=a,b` returns curated sample renders with their recipes: `data.samples` and `data.samplesByModelId`. Pass up to 200 model IDs, or omit `modelIds` for every model with samples. Samples include `modelId`, `positivePrompt`, `negativePrompt`, `stylePrompt`, `seed`, `steps`, `guidance`, `imageURL`, `isMature`, and, when set, `scheduler`, `sampler`, `width`, `height`, and `videoURL`.

`GET /v1/model-gallery/:modelId` returns `data.samples` for one model, with featured community renders first and curated samples after. These items add `source` (`ugc` or `curated`), `sharedBy`, and `mediaSlug`. An unknown model returns an empty list. Respect `isMature` when showing samples.

## [#](https://docs.sogni.ai/api-reference/model-discovery/#worker-releases)Worker releases

`GET /v1/worker/releases` returns `data.releases`, a catalog keyed by worker channel: `comfy`, `comfy-spark`, `llm`, and legacy `flux` and `sd`. Each entry has `imageType`, `latestVersion`, `digest`, `directUpgrade`, `source`, `repository`, `releasedAt`, and `stale`. A channel whose lookup fails may be omitted; if every lookup fails, the API returns `503`. It is public and cached for five minutes. Use the returned catalog and linked [worker release notes](https://docs.sogni.ai/run-a-worker/fast-worker/release-notes/comfy-worker/) to choose a release instead of hard-coding a latest version.

The image Sogni currently recommends for new installs is available as plain text (`repository:tag`, not JSON) from `GET /v1/worker-images/comfy` (add `?cuda=13` for the CUDA 13 image), `GET /v1/worker-images/comfy-spark` for DGX Spark, and `GET /v1/worker-images/llm`.

See [worker analytics](https://docs.sogni.ai/api-reference/worker-analytics/) for historical aggregate activity and [project status](https://docs.sogni.ai/api-reference/project-status/) for a single owner-authenticated generation project.
