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

# Pricing Catalog

> Public pricing catalog. Single round-trip returns every active SKU across text, image, video, and audio with per-call cost detail. Cached 60s.

Public, no authentication required. Returns every **active** Kyma SKU split into two arrays:

* `text` — models billed per-token (chat / completion family). Includes `input_per_1m`, `output_per_1m`, and `cached_input_per_1m` for prompt-caching pricing.
* `media` — image / video / audio SKUs (everything non-token). Each row has `modality`, `pricing_mode`, `usd_per_call`, and a `detail` object describing the pricing shape (per-image, per-second, per-minute, per-quality, etc.).

Both arrays are sorted by `id` for stable diffs across calls. The response is `Cache-Control: public, max-age=60`.

This is the **single source of truth** for marketing surfaces, dashboard pricing tables, billing audit scripts, and the `pricing.mdx` page in these docs. If you're building a comparison page, integration tooling, or a programmatic billing audit, prefer this over scraping the docs.

```bash theme={null}
curl https://kymaapi.com/v1/pricing
```

## Response

```json theme={null}
{
  "object": "pricing.catalog",
  "text_count": 42,
  "media_count": 19,
  "text": [
    {
      "id": "deepseek-v3",
      "name": "DeepSeek V3",
      "input_per_1m": 0.27,
      "output_per_1m": 1.10,
      "cached_input_per_1m": 0.027
    }
  ],
  "media": [
    {
      "id": "veo-3",
      "name": "Veo 3",
      "modality": "video",
      "pricing_mode": "per-second",
      "usd_per_call": 0.54,
      "detail": {
        "provider_cost_per_sec": 0.40,
        "min_duration_sec": 4,
        "max_duration_sec": 8,
        "allowed_durations": [4, 6, 8]
      }
    }
  ]
}
```

<ResponseField name="object" type="string">Always `"pricing.catalog"`.</ResponseField>
<ResponseField name="text_count" type="number">Number of text/chat SKUs in the `text` array.</ResponseField>
<ResponseField name="media_count" type="number">Number of image/video/audio SKUs in the `media` array.</ResponseField>
<ResponseField name="text" type="array">Text models. Sorted alphabetically by `id`.</ResponseField>
<ResponseField name="media" type="array">Image/video/audio SKUs. Sorted alphabetically by `id`.</ResponseField>

### Text row fields

| Field                 | Type   | Meaning                                                                                                                                                                                                                   |
| --------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                  | string | Kyma model ID (e.g. `deepseek-v3`)                                                                                                                                                                                        |
| `name`                | string | Display name                                                                                                                                                                                                              |
| `input_per_1m`        | number | USD per 1M input tokens                                                                                                                                                                                                   |
| `output_per_1m`       | number | USD per 1M output tokens                                                                                                                                                                                                  |
| `cached_input_per_1m` | number | USD per 1M cached input tokens (90% discount for models that support prompt caching). For models without caching support, this number is informational — Kyma doesn't bill at the cached rate unless your client opts in. |

### Media row fields

| Field          | Type   | Meaning                                                                                                             |
| -------------- | ------ | ------------------------------------------------------------------------------------------------------------------- |
| `id`           | string | Kyma model ID                                                                                                       |
| `name`         | string | Display name                                                                                                        |
| `modality`     | string | One of `image`, `video`, `audio`                                                                                    |
| `pricing_mode` | string | One of `per-image`, `per-second`, `per-minute`, `per-quality`, `per-mp`, `per-char`, `per-song`, `per-call`         |
| `usd_per_call` | number | Representative USD cost for one typical call (e.g. 1 image at default size, 1s of video, 1 minute of audio, 1 song) |
| `detail`       | object | Shape varies by `pricing_mode`. See [pricing modes](#pricing-modes) below.                                          |

## Pricing modes

The `detail` object on `media` rows depends on the `pricing_mode`:

| `pricing_mode` | `detail` keys                                                                        | Example SKUs                                                                    |
| -------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- |
| `per-image`    | `provider_cost`, `markup`                                                            | `imagen-4`, `recraft-v4`, `nano-banana`                                         |
| `per-quality`  | `tiers` (object with low/medium/high → cost)                                         | `gpt-image-2`                                                                   |
| `per-mp`       | `base_usd`, `extra_per_mp_usd`, `markup`                                             | `flux-2-pro`                                                                    |
| `per-second`   | `provider_cost_per_sec`, `min_duration_sec`, `max_duration_sec`, `allowed_durations` | `kling-3-pro`, `veo-3`, `seedance-2-pro`                                        |
| `per-minute`   | `provider_cost_per_minute`, `markup`                                                 | `whisper-v3-turbo`, `gpt-4o-mini-transcribe-2025-12-15`, `gemini-3-flash-audio` |
| `per-char`     | `provider_cost_per_kchar`, `markup`                                                  | `eleven-multilingual-v2`, `minimax-speech-hd`                                   |
| `per-song`     | `usd_per_song`                                                                       | `minimax-music`, `minimax-music-pro`                                            |
| `per-call`     | `usd_per_call`                                                                       | `minimax-voice-clone`, `minimax-voice-design`                                   |

## Use cases

* **Marketing comparison pages**: fetch and render a model grid showing every SKU with current pricing, no scraping required.
* **Billing audit**: cross-check `request_logs.cost_usd` against this catalog to verify the gateway didn't drift from documented prices.
* **Dashboard model picker**: render pricing inline in the model selector without hardcoding rates client-side.
* **Programmatic SDK config**: agents that auto-select models can fetch live pricing for cost-aware routing.

## Caching

The endpoint sets `Cache-Control: public, max-age=60`. Hosted in front of Cloudflare so repeat requests within a minute hit CDN edge. Pricing changes propagate to the live response within 60 seconds of a deploy.

## Errors

This endpoint is public and read-only — no auth errors. The only failure modes are:

| Status | When                                                                          |
| ------ | ----------------------------------------------------------------------------- |
| `500`  | Internal error building the catalog (shouldn't happen — fail loud if it does) |

## Related

* [`GET /v1/limits/tiers`](/api-reference/limits-tiers) — companion endpoint returning the rate-limit tier matrix
* [`GET /v1/models`](/api-reference/models-list) — list models without pricing, with filtering params
* [Pricing](/pricing) — human-readable pricing page rendered from this same catalog
* [`GET /v1/credits/pricing`](/api-reference) — legacy text-only pricing endpoint (kept for backward compat; prefer this catalog)
