> ## Documentation Index
> Fetch the complete documentation index at: https://docs.budgetpixel.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Models: Catalog & Pricing Reference

> List every image, video, music, and sound-effect model in the BudgetPixel API with GET /v1/models — capabilities, generation modes, and credit pricing.

Use `GET /v1/models` to discover which models are available to the API and what
they cost. Pass `?type=image`, `?type=video`, or `?type=audio` to filter.

```bash theme={null}
curl "https://api.budgetpixel.com/v1/models?type=video" \
  -H "Authorization: Bearer $BUDGETPIXEL_API_KEY"
```

```json theme={null}
{
  "data": [
    { "name": "flux-2-pro", "type": "image", "credits_per_generation": 25,
      "resolution_pricing": { "0.5MP": 15, "1MP": 25, "2MP": 50, "4MP": 80 } },
    { "name": "seedream-4.5", "type": "image", "credits_per_generation": 45 },
    { "name": "seedance-2.0-mini", "type": "video", "credits_per_generation": 0,
      "credits_per_unit": 120, "unit_type": "second",
      "resolution_pricing": { "480p": 60, "720p": 120 } },
    { "name": "seedance-2.0", "type": "video", "credits_per_generation": 0,
      "credits_per_unit": 220, "unit_type": "second",
      "resolution_pricing": { "480p": 100, "720p": 220, "1080p": 550, "4k": 1250 },
      "resolution_codecs": { "480p": "h264", "720p": "h264", "1080p": "h264", "4k": "h265" } }
  ]
}
```

## Reading the response

| Field | Meaning |
| - | - |
| `name` | The model slug. Use it in the endpoint path (`POST /v1/images/{name}`, `POST /v1/videos/{name}`, or `POST /v1/audios/{name}`). |
| `type` | `image`, `video`, or `audio` (music and sound-effect models). |
| `credits_per_generation` | Cost per **output image**, or per **track** for music. A request that returns multiple images is charged this per image — see [multiple images per request](#multiple-images-per-request). For image models priced by output size this is the **default** size's rate (see `resolution_pricing`). `0` for per-second models (video, sound effects). |
| `credits_per_unit` | Per-unit cost for metered models (e.g. per second of video). For resolution-priced models this is the **default** resolution's rate. |
| `unit_type` | The unit `credits_per_unit` applies to (e.g. `second`). |
| `resolution_pricing` | For models whose rate varies by resolution or output size, a map of `resolution → cost`: per second for video models (e.g. SeeDance 2.0), per image for image models (e.g. `flux-3-image`, keyed by its `size` values `768px` / `1K` / `1.5K` / `2K` / `4K`). Absent when pricing is flat. |
| `option_pricing` | For image models with paid on/off options, a map of `parameter → extra credits per image` when the option is enabled (e.g. `nano-banana-2.1`: `google_search` 10, `image_search` 20). Each amount is the option on its own; see [search grounding](#search-grounding) for how the two combine. Absent when the model has no paid options. |
| `resolution_codecs` | For video models where some resolution delivers H.265 (HEVC) instead of H.264, a map of `resolution → codec` (`h264` or `h265`). Absent when every resolution delivers H.264. See [video output format](#video-output-format). |
| `min_billable_seconds` | Billing floor for per-second audio models (sound effects, Sonilo Music) — cost = `credits_per_unit × max(min_billable_seconds, seconds rounded up)`; shorter clips are billed as this many seconds (`3` for sound effects, `10` for Sonilo Music). |

<Tip>
  The model catalog is the source of truth for what's available. Calling an image
  endpoint for a model that isn't API-available returns `400 model_not_available` —
  list the catalog to see current options.
</Tip>

## Multiple images per request

Some image models return more than one image from a single call:

* **seedream-4.5** and **seedream-5.0-lite** support grouped generation. Set
  `sequential_image_generation: "auto"` and `max_images` (up to 4 on seedream-4.5, up to 14
  on seedream-5.0-lite). The model returns a group of related images **up to** `max_images` and
  decides the exact count — it may return fewer (a plain prompt often yields one; a prompt
  that explicitly asks for a set yields several). Use `max_images` for this, not `num_images`.
* **seedream-5.0-pro** does **not** support grouped generation — it has no
  `sequential_image_generation` parameter. Use `num_images` (1–4) for multiple takes; each
  is generated and billed independently. It prices by output size (1K = 55, 2K = 110 credits
  per image) and bills `reference_images` beyond the first at 5 credits each — see
  [pricing & credits](/concepts/pricing-and-credits#per-model-pricing).
* **seedream-5.0-flash** has no grouped generation either: use `num_images` (1–4). It costs a
  flat 25 credits per image at `1K` or `2K`, and its `reference_images` (up to 10) are free.
* **flux-3-image** takes `num_images` (1–4); each image is generated and billed
  independently at its `size`'s price. Its `reference_images` (up to 10) are free.
* **nano-banana-2.1** takes `num_images` (1–4); each image is generated and billed
  independently at its `size`'s price, plus search grounding if you enabled it. Its
  `reference_images` (up to 9) are free.

## Grounding

**flux-3-image** takes a `grounding` parameter (`true` by default). When it is on, the model
researches the prompt with web and image search before rendering, which helps when the prompt
depends on what something real looks like. It costs nothing extra. Set `grounding: false` for
faster, self-contained generation.

```json theme={null}
{
  "prompt": "A travel poster of the Sagrada Família at golden hour",
  "size": "2K",
  "aspect_ratio": "3:4",
  "grounding": true
}
```

## Search grounding

**nano-banana-2.1** takes two optional parameters that let the model look things up before it
renders. Both are `false` by default and are **priced per image** when enabled:

| Parameter | What it does | Extra per image |
| - | - | - |
| `google_search` | Grounds the image in live Google Search results: weather, scores, recent events, current facts. | 10 credits |
| `image_search` | Looks up web images as visual reference (what a real place, product or landmark looks like). Runs a web search too. | 20 credits |

Because image search includes a web search, the two never add up: `image_search: true` costs
20 extra credits per image whether or not `google_search` is also set. `GET /v1/models` lists
both amounts under `option_pricing`, and [`POST /v1/cost`](/concepts/pricing-and-credits#estimating-cost-up-front)
quotes the exact total for a request.

```json theme={null}
{
  "prompt": "An illustrated postcard of today's weather in Tokyo, with the temperature written on it",
  "size": "1K",
  "aspect_ratio": "4:3",
  "google_search": true
}
```

That request costs `45 + 10 = 55` credits. Results generated with `image_search` are returned
as JPEG, whatever `output_format` asks for.

## Transparent backgrounds

**seedream-5.0-pro** and **seedream-5.0-flash** take a `background` parameter (`opaque`, the
default, or `transparent`). Transparent mode is for **editing a cutout**: send exactly **one**
reference image, a **PNG that already has transparent pixels** (a product cutout, sticker or
logo), and the result is a PNG that keeps the transparency. It can't make a transparent image
from text alone, and multi-reference requests must stay `opaque` — those requests are rejected
with `400` before anything is charged.

```json theme={null}
{
  "prompt": "Put a knitted red scarf on the fox",
  "reference_images": ["https://example.com/fox-cutout.png"],
  "background": "transparent",
  "size": "1K"
}
```

Billing is **per image returned**: a result with 3 images costs `3 × credits_per_generation`.
When the job starts we reserve the maximum (`max_images × credits_per_generation`) and charge
only for the images actually produced.

## Video output format

Every video comes back as an **MP4**. The codec inside depends on the model and the
resolution you ask for:

| Output | Codec |
| - | - |
| Most models and resolutions | H.264, 8-bit |
| **SeeDance 2.5** at `1080p` | H.265 (HEVC), 10-bit |
| **SeeDance 2.0** at `4k` | H.265 (HEVC), 10-bit |
| **Topaz Labs Video Upscale**, every target | H.265 (HEVC), 10-bit |

The H.265 tiers are delivered exactly as the model produced them. We don't re-encode
them to H.264, because that would cost quality at the resolutions where you are paying
for it. The job status says which codec you got:

```json theme={null}
{
  "status": "succeeded",
  "model": "seedance-2.5",
  "resolution": "1080p",
  "video_url": "https://...",
  "video_codec": "h265",
  "video_codec_note": "This video is H.265 (HEVC), 10-bit, in an MP4 container. ..."
}
```

`video_codec` is `h264` or `h265` on every finished video job (`GET /v1/videos/{id}`,
`/v1/video-upscales/{id}`, `/v1/motion-control/{id}`, `/v1/lip-sync/{id}`).
`video_codec_note` appears only with `h265`.

<Warning>
  H.265 does not play everywhere. Safari, VLC, QuickTime and most phones play it. Chrome
  and Firefox need a hardware HEVC decoder, and without one they show a **black frame with
  working audio**. The file is not corrupted.

  If your player or pipeline needs H.264, check `video_codec` and transcode:

  ```bash theme={null}
  ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p -crf 17 -c:a copy -movflags +faststart output.mp4
  ```

  Or ask for a lower resolution: SeeDance 2.5 at `480p`/`720p` and SeeDance 2.0 up to
  `1080p` deliver H.264.
</Warning>

## Video generation modes

Some video models accept different inputs for different modes.

### SeeDance 2.5 (flagship)

**SeeDance 2.5** (`seedance-2.5`) is ByteDance's flagship multimodal model. One endpoint,
three modes — there is no separate video-edit endpoint:

* **Text-to-video** — `prompt` only (`aspect_ratio` applies here; other modes are adaptive).
* **Image-to-video** — a start frame (`image`), optionally with an end frame (`end_image`).
* **Reference-to-video** — any mix of up to **15 `reference_images`** (free), up to
  **5 `reference_videos`** (each 2–15s, **30s combined**), and up to **5 `reference_audios`**
  (30s combined, free; audio-only input works). **Editing or extending an existing clip =
  passing it as a `reference_videos` entry.** Reference media can't be combined with
  start/end frames.

Output is **480p, 720p or 1080p**, any duration **4–30 seconds**, priced per second
(480p = 150, 720p = 330, 1080p = 750 credits). `reference_videos` additionally bill **per
second of input** at half the output rate (480p = 80, 720p = 160, 1080p = 375 credits per
input second) — use
[`POST /v1/cost`](/concepts/pricing-and-credits#estimating-cost-up-front) for an exact quote
(it probes your clips).

<Note>
  **1080p output is H.265 (HEVC), 10-bit.** 480p and 720p are H.264. H.265 does not play in
  every browser — see [video output format](#video-output-format).
</Note>

### SeeDance 2.0

**SeeDance 2.0** (`seedance-2.0`) supports all of these from one endpoint:

* **Text-to-video** — `prompt` only.
* **Image-to-video** — a start frame (`image`), optionally with an end frame (`end_image`)
  to interpolate between the two.
* **Reference-images-to-video** — up to 9 `reference_images` to guide the result.
* **Video-to-video** — supply a `video` to edit an existing clip. Video inputs are passed
  **by URL** (a public URL or one from [`POST /v1/uploads`](/concepts/media-inputs)), not
  inlined as base64. You can also pass `reference_images` (up to 6) and/or an `audio` track
  alongside the `video` to guide the edit.

Start/end frames (`image`/`end_image`) can't be combined with `reference_images` or a `video`.
But `reference_images` **can** accompany a `video` — that runs a reference-guided video-edit
(up to **6** reference images in that mode, vs up to **9** on their own). Pricing is **per
second, by resolution** (see `resolution_pricing`): a 5-second 1080p clip costs `5 × 550`.
The `4k` resolution is available for text/image/reference modes, not video-to-video.
**4K output is H.265 (HEVC), 10-bit**; 480p to 1080p are H.264 — see
[video output format](#video-output-format).

**Reference audio (optional):** attach an `audio` track (MP3/WAV/OGG, by public URL or one
from [`POST /v1/uploads`](/concepts/media-inputs)) to an image- or video-input request and
SeeDance 2.0 uses it in the generated video. Audio must accompany an `image`/`reference_images`
or `video` input — it can't be the only input.

**Cheaper tiers:** `seedance-2.0-fast` and `seedance-2.0-mini` support the same modes at
lower per-second rates, in **480p and 720p** (no 1080p/4k). Check each model's
`resolution_pricing` in `GET /v1/models`, or [`POST /v1/cost`](/concepts/pricing-and-credits#estimating-cost-up-front)
to price an exact request.

### MiniMax H3

**MiniMax H3** (`minimax-h3`) is a multimodal 2K model with a different reference surface:

* **Text-to-video** — `prompt` only (`aspect_ratio` applies here; other modes are adaptive).
* **Image-to-video** — a start frame (`image`), optionally with an end frame (`end_image`).
* **Reference-to-video** — mix up to **5 `reference_images`**, up to **3 `reference_videos`**
  clips, and up to **3 `reference_audios`** clips in one request. Clips are passed **by URL**
  (public or from [`POST /v1/uploads`](/concepts/media-inputs)); each clip must be 2–15s, with
  at most **15s combined per media type**.

Reference media can't be combined with start/end frames, and H3 has no video-to-video edit
mode. Output is **2K only**, any integer duration from **4 to 15 seconds**.

<Warning>
  H3 is the first model that **bills video input**: `reference_videos` cost the model's
  per-second rate on the **input** duration in addition to the output video. Reference
  images (first 5) and reference audio are free. [`POST /v1/cost`](/concepts/pricing-and-credits#estimating-cost-up-front)
  fetches and measures the clips, so its estimate includes the input component.
</Warning>

### MiniMax H3 Max

**MiniMax H3 Max** (`minimax-h3-max`) is a post-trained H3 tuned for stronger prompt
adherence and aesthetics, with native audio. One endpoint covers every mode — the inputs
decide which:

* **Text-to-video** — `prompt` only; `aspect_ratio` defaults to `16:9`. An optional `audio`
  URL pins a soundtrack (it replaces the generated audio, trimmed to the video length).
* **Image-to-video** — `image` (first frame) and/or `end_image` (last frame). An end frame
  on its own is allowed. The output follows the frame image, so `aspect_ratio` is ignored.
  `audio` works here too.
* **Reference-to-video** — up to **5 `reference_images`**, **3 `reference_videos`** (2–15s
  each, 15s combined) and **3 `reference_audios`** (2–15s each, 15s combined). Address them
  in the prompt by order: "Image 1", "Video 1", "Audio 1". `aspect_ratio` defaults to
  `adaptive` (the model picks); an explicit ratio is honored.
* **Extend** — pass a `video` (1.6–60s, ≤50MB, aspect ratio between 2:5 and 5:2) and
  describe what happens next. `length_seconds` is the new footage appended; the output is
  the source followed by the continuation. `aspect_ratio` defaults to `auto` (keep the
  source framing); any other ratio crops.

Resolutions are `480p`, `768p` (default) and `1080p`; `2k` is available only when
extending. Any integer duration from **5 to 15 seconds**. Reference media can't be
combined with start/end frames, and `video` can't be combined with any other media input.

<Warning>
  Like H3, H3 Max **bills video input**: reference videos, and the source clip of an
  extension (first 15 seconds), cost **170 credits per input second** on top of the output.
  Reference images beyond the first two add 50 credits each; reference audio and the
  soundtrack are free. [`POST /v1/cost`](/concepts/pricing-and-credits#estimating-cost-up-front)
  measures the clips, so its quote is exact.
</Warning>

### Wan 3.0

**Wan 3.0** (`wan-3.0-video`) is Alibaba's all-in-one model — one endpoint, three modes,
no separate video-edit endpoint (the SeeDance 2.5 shape):

* **Text-to-video** — `prompt` only. `aspect_ratio` is honored in **every** mode — an
  explicit ratio reframes the output even with a first frame or reference media, and the
  default `adaptive` lets the model pick a suitable ratio from the inputs and prompt.
* **Image-to-video** — a first frame (`image`), optionally with a last frame (`end_image`)
  to interpolate between the two.
* **Reference-to-video** — any mix of up to **10 `reference_images`** (free), up to
  **5 `reference_videos`** (each 2–15s, **15s combined**), and up to **5 `reference_audios`**
  (15s combined, free). **Editing, replicating the style or camera move of, or extending an
  existing clip = passing it as a `reference_videos` entry.** In the prompt you can address
  assets by their order in each type: "Image 1 hands Video 1 the guitar…". Reference media
  can't be combined with first/last frames.

Output is **480p, 720p or 1080p** at 30fps, any duration **2–30 seconds**, priced per second
of output (480p = 60, 720p = 120, 1080p = 240 credits).

<Note>
  Unlike MiniMax H3 and the SeeDance families, Wan 3.0 **never bills input media** —
  `reference_videos` clips are free, and you pay only for the output seconds you request.
  The one constraint: with a video input, the input duration plus `length_seconds` must not
  exceed **30 seconds**.
</Note>

**Need it faster?** `wan-3.0-video-prime` is the high-speed tier: the identical API
surface and modes with significantly faster end-to-end generation, at 85/170/340
credits per output second (480p/720p/1080p). Input media is free there too.

### Wan 2.7

**Wan 2.7** (`wan-2.7-video`) serves three modes from one endpoint:

* **Text-to-video** — `prompt` only.
* **Image-to-video** — a start frame (`image`), optionally with an end frame (`end_image`)
  to interpolate between the two.
* **Video editing** — supply a `video` and the model applies your `prompt` to that clip
  (restyle it, change the scene, alter a subject's action or the camera move). The video is
  passed **by URL** (public or from [`POST /v1/uploads`](/concepts/media-inputs)), not
  inlined as base64. Up to **4 `reference_images`** may accompany it to guide the edit —
  for example, supplying the person or style to apply to the clip.

`video` can't be combined with `image`/`end_image`. Output is **720p or 1080p**; text- and
image-to-video run **5, 10, or 15 seconds**.

Video editing behaves differently from the other two modes in two ways worth planning for:
the input clip must be **2–15 seconds**, and the **output length is taken from that clip**,
so `length_seconds` is ignored.

<Warning>
  Video editing bills the input clip at the **full** per-second rate, on top of the output —
  not the half rate the SeeDance families charge. Because the output length equals the input
  length, an edit costs roughly **double** what the same number of seconds costs in
  text-to-video: editing an 8.2s clip at 720p is `9 × 100 + 9 × 100 = 1800` credits.
  `reference_images` are free. [`POST /v1/cost`](/concepts/pricing-and-credits#estimating-cost-up-front)
  fetches and measures the clip, so its estimate includes the input component — send the exact
  body you plan to generate with.
</Warning>

### P-Video

**P-Video** (`p-video`) is a fast, low-cost model with three modes:

* **Text-to-video** — `prompt` only.
* **Image-to-video** — a start frame (`image`), optionally with an end frame (`end_image`)
  to interpolate between the two.
* **Audio-driven** — supply an `audio` track (MP3/WAV/FLAC) by URL and the model generates
  video to match it.

Output is **720p or 1080p** at **5 or 10 seconds**.

<Warning>
  Supplying `audio` makes the output length match the **audio**, and `length_seconds` is
  ignored. Because P-Video is billed per second, a 23-second track produces a 23-second
  charge no matter what `length_seconds` said. Send the exact body you plan to generate with
  to [`POST /v1/cost`](/concepts/pricing-and-credits#estimating-cost-up-front) first.
</Warning>

## Retired models

Model providers occasionally withdraw a model. When that happens we take it out of
`GET /v1/models` and its endpoint starts answering **`410 Gone`** with the error code
`model_retired`, naming the replacement:

```json theme={null}
{
  "error": {
    "type": "invalid_request_error",
    "code": "model_retired",
    "message": "Model 'seedance-1.5-pro' was retired by its provider on 2026-09-17 and is no longer available. Use 'seedance-2.0' instead — see GET /v1/models?type=video for its parameters and pricing."
  }
}
```

`POST /v1/cost` returns the same error rather than quoting a price you could not spend.
A `410` is permanent — retrying will not help; switch the model id in your request.

<Note>
  **Retired so far:** `seedance-1.5-pro` (2026-09-17, → `seedance-2.0`).
  Parameter schemas differ between models, so check the replacement's fields in
  `GET /v1/models` before swapping the id — and its per-second rate, which is usually
  different too.
</Note>

## Requesting a model

Image, video, music, and sound-effect models each have their own endpoint and parameter
schema — see the **API Reference** tab for each model's accepted fields.

<CodeGroup>
  ```bash Image theme={null}
  curl -X POST https://api.budgetpixel.com/v1/images/flux-2-pro \
    -H "Authorization: Bearer $BUDGETPIXEL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "prompt": "...", "num_images": 1, "size": "1MP" }'
  ```

  ```bash Video theme={null}
  curl -X POST https://api.budgetpixel.com/v1/videos/seedance-2.0 \
    -H "Authorization: Bearer $BUDGETPIXEL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "prompt": "...", "length_seconds": 5 }'
  ```

  ```bash Music theme={null}
  curl -X POST https://api.budgetpixel.com/v1/audios/mureka-v9 \
    -H "Authorization: Bearer $BUDGETPIXEL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "lyrics": "[verse]\nSun up before the rooster crows...", "prompt": "slow country, porch vibes" }'
  ```

  ```bash Music (exact length) theme={null}
  curl -X POST https://api.budgetpixel.com/v1/audios/sonilo-music \
    -H "Authorization: Bearer $BUDGETPIXEL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "prompt": "30 seconds of upbeat electronic instrumental for a product launch video, no vocals", "duration": 30 }'
  ```

  ```bash Video to music theme={null}
  curl -X POST https://api.budgetpixel.com/v1/audios/sonilo-video-music \
    -H "Authorization: Bearer $BUDGETPIXEL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "video": "https://example.com/clip.mp4", "prompt": "warm acoustic indie that builds gently, no vocals" }'
  # -> a licensed soundtrack composed for the clip, matched to its length; poll GET /v1/audios/{id} for audio_url
  ```

  ```bash Sound effect theme={null}
  curl -X POST https://api.budgetpixel.com/v1/audios/sonilo-sfx \
    -H "Authorization: Bearer $BUDGETPIXEL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "prompt": "heavy rain on a tin roof with distant thunder", "duration": 10, "format": "mp3" }'
  ```

  ```bash Video to sound effect theme={null}
  curl -X POST https://api.budgetpixel.com/v1/audios/sonilo-video-sfx \
    -H "Authorization: Bearer $BUDGETPIXEL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "video": "https://example.com/clip.mp4", "prompt": "realistic Foley and ambience, no music" }'
  # -> poll GET /v1/audios/{id}: audio_url = the SFX track, video_url = your clip with the effects mixed in
  ```
</CodeGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.