> ## Documentation Index
> Fetch the complete documentation index at: https://dripart-chore-sync-comfy-api-v2-spec.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Discover Comfy Router models

> List the Comfy Router catalog with GET /v2/models, page through it with cursors, and fetch one model's entry by its ID.

Every Router model is addressed by an ID of the form `{provider}/{model}`. Use the catalog to find that ID, then call `POST /v2/models/{provider}/{model}`.

## Discover the catalog

List models with the same API key used for generation:

```bash theme={null}
curl -H "X-API-Key: $COMFY_API_KEY" \
  "https://api.comfy.org/v2/models?limit=50"
```

An abbreviated catalog response:

```json theme={null}
{
  "data": [
    {
      "id": "bfl/flux-2-pro",
      "provider": "bfl",
      "model": "flux-2-pro",
      "billing": { "charges_on_policy_rejection": "no" }
    }
  ],
  "has_more": true,
  "next_cursor": "example-cursor",
  "limit": 50
}
```

Use `id` in the invocation path. The `billing` object contains billing facts, not a price. Read [policy-refusal billing](/development/comfy-router/billing#model-billing-facts) before relying on it.

### Pagination

* When `has_more` is `true`, pass the returned `next_cursor` as `cursor`. Stop when `has_more` is `false`, even if an earlier page was shorter than requested.
* Treat cursors as opaque. URL-encode the value, for example with cURL `--get --data-urlencode "cursor=$NEXT_CURSOR"`; do not calculate offsets or modify the cursor.
* `limit` defaults to 20 and is capped at 100. Values above the cap are clamped; zero and negative values select the default. The response reports the limit actually used.
* An invalid cursor returns `400` / `invalid_input`. It does not silently restart the list.
* A cursor can remain valid across catalog updates, but traversal is not a snapshot: a model added before your current position may not appear in that walk.

`503` / `service_unavailable` is temporary. Retry with backoff; do not treat it as an empty catalog. SDK run methods call the selected model directly.

## Read one model

Fetch a catalog entry directly when you know the model ID:

```bash theme={null}
curl -H "X-API-Key: $COMFY_API_KEY" \
  https://api.comfy.org/v2/models/bfl/flux-2-pro
```

The model detail endpoint avoids walking the entire catalog. Use the [API reference](/development/comfy-router/reference) for the complete entry fields.

## Next

* [Schemas and results](/development/comfy-router/schemas): read a model's input and output schema before calling it.
* [All models](/development/comfy-router/models): browse the catalog with a working request for each model.
