# Modell-API

> Die Modelle deines OpenCheese-API-Schlüssels per GET /v1/models: jedes Feld erklärt, von Modalitäten und Reasoning-Stufen bis zu Kontext- und Ausgabelimits.
>
> Webseite: https://opencheese.dev/de/docs/models/ · Alle Seiten der Doku: https://opencheese.dev/de/docs.md

`GET https://api.opencheese.dev/v1/models` listet die Modelle, die dein API-Schlüssel gerade
nutzen kann, im Listenformat von OpenAI. Was die Liste enthält, hängt von deinem Tarif, den
Modellbeschränkungen des Schlüssels und den Modellen ab, die du auf der Seite **Preise**
ausgeschaltet hast. Lies deshalb diese Liste, statt Modell-IDs aus Beispielen zu kopieren.

## Anfrage

```bash
curl https://api.opencheese.dev/v1/models \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY"
```

`x-api-key` funktioniert auch. Bei einem ungültigen Schlüssel kommt `401` mit einem JSON-Fehler
zurück.

## Antwort

Ein Textmodell (die Werte sind Beispiele):

```json
{
  "object": "list",
  "data": [
    {
      "id": "MODEL_ID",
      "object": "model",
      "created": 0,
      "owned_by": "opencheese",
      "displayName": "Example Model",
      "name": "Example Model",
      "capabilities": { "streaming": true, "tools": true },
      "pricing": { "inputRate": 0.5, "outputRate": 2, "cacheReadRate": 0.05, "cacheWriteRate": 0.6 },
      "modalities": { "input": ["text", "image"], "output": ["text"] },
      "reasoning": true,
      "reasoningEfforts": { "max": "max", "medium": "medium", "low": "low" },
      "supported_reasoning_levels": ["max", "medium", "low"],
      "efforts": ["max", "medium", "low"],
      "default_reasoning_level": "max",
      "context_window": 1000000,
      "contextWindow": 1000000,
      "max_output_tokens": 131000,
      "maxTokens": 131000,
      "maxOutputTokens": 131000
    }
  ]
}
```

## Felder

| Feld | Bedeutung |
| --- | --- |
| `id` | Die ID, die du als `model` sendest. |
| `displayName`, `name` | Der Name des Modells, wie das Dashboard ihn zeigt. |
| `capabilities` | Ob das Modell Streaming und Tool-Aufrufe unterstützt. |
| `pricing` | Deine Preise in Credits (USD) pro Million Tokens: Eingabe, Ausgabe, Lesen gecachter Eingabe und Schreiben in den Cache. Kostenlose Modelle zeigen hier Nullen. |
| `modalities` | Was das Modell liest (`input`) und erzeugt (`output`): `text`, `image`, `video`, `audio`, `pdf`. |
| `supported_reasoning_levels` | Die Reasoning-Stufen, die du senden darfst, die stärkste zuerst. `efforts` und die Schlüssel von `reasoningEfforts` wiederholen sie für Clients, die diese Namen lesen. |
| `default_reasoning_level` | Die erste und damit stärkste Stufe dieser Liste. |
| `context_window` | Die maximale Anzahl Tokens, die das Modell in einer Anfrage liest, Prompt eingeschlossen. `contextWindow` ist dieselbe Zahl. |
| `max_output_tokens` | Die längste Antwort, die das Modell schreibt. `maxTokens` und `maxOutputTokens` sind dieselbe Zahl. |

Ein Feld fehlt, wenn es nicht zutrifft: Ein Modell ohne wählbare Stufe hat keine Stufenfelder, und
ein Modell ohne bekanntes Limit hat keine Limitfelder. Sende die Stufe nur mit einem Wert aus
`supported_reasoning_levels`; [Chat Completions](https://opencheese.dev/de/docs/chat-completions.md),
[Responses](https://opencheese.dev/de/docs/responses.md) und [Messages](https://opencheese.dev/de/docs/messages.md) zeigen, wo sie hingehört.

## Bildmodelle

Modelle, deren `modalities.output` `["image"]` ist, erzeugen Bilder. Sie haben nur die oben
genannten Grundfelder; ihre Parameter (Größen, Seitenverhältnisse, Qualität, wie viele Bilder eine
Anfrage zurückgeben darf) liefert `GET /v1/images/capabilities`, beschrieben unter
[Bild-API](https://opencheese.dev/de/docs/images.md).

## Die Liste filtern

Alle Textmodelle mit `jq`:

```bash
curl -s https://api.opencheese.dev/v1/models \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY" \
  | jq -r '.data[] | select(.modalities.output | index("text")) | .id'
```

Kostenlose Modelle:

```bash
curl -s https://api.opencheese.dev/v1/models \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY" \
  | jq -r '.data[] | select(.pricing.inputRate == 0 and .pricing.outputRate == 0) | .id'
```

Auch kostenlose Modelle brauchen ein kleines Mindestguthaben auf deinem Konto; siehe die
[FAQ](https://opencheese.dev/de/faq/#free-models).

## Mit einem SDK

```python
from openai import OpenAI

client = OpenAI(base_url="https://api.opencheese.dev/v1", api_key="YOUR_OPENCHEESE_API_KEY")
for model in client.models.list():
    print(model.id)
```

Es gibt kein `GET /v1/models/{id}`: Lies das Modell aus der Liste.
