---
title: "List Models"
method: GET
path: "/v1/models"
tags: ["models"]
---

# List Models

`GET /v1/models`

## Request

- Base URL: `https://api.craterview.ai`
- URL: `https://api.craterview.ai/v1/models`
- Auth: one of:
  - none
  - HTTP bearer

Every available model: what it takes, what it answers with, prices, limits, and your queue.

The one route that answers without a key. Called with none, it answers as it does for an
account that has not paid: `community` true and the community queue's limits.

**`community` and the limits are about the queue your key would use**, not about the
platform as a whole. Jobs are routed at submit by what the account has paid for: an
account that has paid runs on paid compute, which scales with demand, and one that has
not goes to the community queue, which runs on shared, free
capacity and can wait longer at busy times. So this endpoint looks up where your account stands
and answers for the queue you would land in — `community` tells you which that is, and
the limits are the ones that apply there.

How long a wait will be is answered on the job, once you have one: `eta_seconds` on
every read of it. `community` means the same thing there as here. Paying moves you
between queues, so it can change for reasons other than other people's jobs.

A model that is available is not always listed here — a model in trial, or being
retired, stays usable by name while absent from this catalog.

The reverse also happens: a model with `coming_soon` set is listed before it can be
used, and submitting to it is refused with 409 until it launches. Everything else
published about it is final, so an integration can be written against it in advance.

## Response `200`

Successful Response

- ModelInfo[]
  - `name` string, required: The value to send as `model` when submitting a job.
  - `version` string, required: Which revision of this model is in service. It changes when the results change, so record it if you need to explain an old result later.
  - `title` string, required: A short name for this model, for showing to a person.
  - `description` string, required: What this model is for, in a sentence or two, for showing to a person.
  - `accepts` string[], required: Media types this model takes. Anything else is refused at submit.
  - `produces` string, nullable, required: The media type a result is usually returned as. Advisory: a model that preserves the format you sent returns what you sent. Null on a model that returns no file at all — its answer is in the job's `result`, and there is nothing to download.
  - `coming_soon` boolean: This model is announced but not yet in service: submitting to it is refused with 409 until it launches. Everything else here is final.
  - `video_coming_soon` boolean: Video for this model is announced but not yet on, so `accepts` names no video type yet. False on a model that will not take video at all.
  - `tenure` 'fixed' | 'comet': fixed is a lasting part of the service. comet is a utility or fun experiment.
  - `max_input_bytes` integer, required: The largest file this model accepts, in bytes. Declared when you ask for somewhere to upload, and enforced by storage on the way in.
  - `max_frame_megapixels` number, required: Largest single frame this key may send, in megapixels. A still is one frame, so it applies to images too. 0 means unbounded.
  - `max_frames` number, required: Most frames this key may send in one job. A still is one frame. Divide by reference_fps for the equivalent in seconds. 0 means unbounded.
  - `max_output_megapixels` number, required: Largest single frame this key may receive back, in megapixels. For a model that enlarges, the result is the image or region you send at the size you ask for — so this and `max_input_megapixels`, and not the frame ceiling, decide whether a job is accepted: send a smaller region, or ask for less enlargement. 0 means unbounded.
  - `max_input_megapixels` number, required: Largest part of an image this key may have worked on in one job, in megapixels: the region you name with `roi`, or the whole image. A job over it is refused, whatever size of result it asks for: name a smaller region, or send a smaller image. 0 means unbounded.
  - `max_denoise_input_megapixels` number, nullable, required: Largest part of an image this key may have worked on in one job with `denoise` sent as true, in megapixels; `max_input_megapixels` applies otherwise. Null for a model that takes no `denoise`. 0 means unbounded.
  - `credits_per_image` integer, required: Credits charged for one still image. Charged when the job succeeds; a job that does not succeed costs nothing.
  - `credits_per_video_second` integer, nullable, required: Credits charged per second of video, or null for a model that takes stills only. Charged when the job succeeds, from the clip's length.
  - `reference_fps` number, required: The frame rate `max_frames` is expressed in, so a limit in frames can be read as a limit in seconds.
  - `params_schema` object, required: JSON Schema for this model's `params`: everything a job may be given, with defaults and permitted values. Validate against it rather than discovering a refusal.
  - `params_order` string[], required: Every name in `params_schema`'s `properties`, in the order a form presents them. JSON does not order an object's keys, so read the order from here.
  - `result_schema` object, required: JSON Schema for the fields a finished job of this model states under `result`, beside any files it links. Empty for a model whose whole answer is its file.
  - `community` boolean, required: Whether your key's work goes to the community queue, which runs on shared, free capacity and can wait longer at busy times. False once the account is paying, by holding credit or by subscribing, which puts its work on paid compute that scales with demand. The limits above are the ones that apply on that queue.
  - `image_only_params` string[], required: Parameters that apply to stills only. A video job that sets one is refused, so a client offering video hides them.

## Other responses

- `400`: the path, query or a JSON string in the body contains a NUL character or an unpaired surrogate; the body is not JSON encoded as UTF-8, or carries a number JSON cannot represent (NaN, Infinity, or one too large) or nesting too deep to read; or an Idempotency-Key header is longer than 255 characters or not printable ASCII. The request was not read
- `401`: missing, malformed or unrecognised API key
- `413`: the request body is larger than 1 MiB. The request was not read

---

[API](https://skmtc.dev/craterview/apis/craterview-ai-api.md) · [All operations](https://skmtc.dev/craterview/apis/craterview-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/craterview/apis/craterview-ai-api/revisions/9419a5cd27cd?raw)
