Erste SchritteAnleitung
Erste Anfrage an CheapTokens mit HTTPie: Key in env, = und :=
Ein lesbarer http-Befehl, der eine Chat-Completion mit dem Key in einer Umgebungsvariable sendet und dann zeigt, wo die Antwort und der Token-Verbrauch stehen.

Auf dieser Seite
Du willst wissen, dass der Key funktioniert und die Modell-ID stimmt, und das in einer Zeile. HTTPies Befehl http erledigt das mit weit weniger Quoting als curl: Du tippst die Felder, er baut das JSON. Hier ist die komplette Anfrage, und der Rest des Artikels erklärt jedes Stück.
export CHEAPTOKENS_API_KEY="paste-your-key-here"
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
POST https://api.cheaptokens.dev/v1/chat/completions \
model=deepseek-ai/DeepSeek-V4-Flash-0731 \
max_tokens:=200 \
'messages:=[{"role":"user","content":"In one sentence, what is a token?"}]'Die API ist OpenAI-kompatibel, also ist die Basis-URL https:/ und Chat-Anfragen gehen an / darunter. Die Modell-ID ist die vollständige, deepseek- (der Kurzname aus Preistabellen wird nicht akzeptiert). Wenn du noch keinen Key gespeichert hast, speichere einen API-Key sicher zuerst: Die Zeile export zu tippen legt den Key in deiner Shell-History ab, also ist eine Profildatei oder ein Secrets-Manager der bessere Ort dafür.

Was = und := tatsächlich tun#
Das ist der einzige Teil von HTTPie, den du lernen musst. HTTPies JSON-Dokumentation (Version 3.2.4, datiert auf den 1. November 2024, gelesen am 9. November 2026) sagt, dass = ein String-Feld setzt und := einen rohen JSON-Wert: eine Zahl, einen Boolean, ein Array oder ein Objekt. So angegebene Felder werden standardmäßig als JSON-Body gesendet, du fügst also keinen Content-Type-Header selbst hinzu.
In unserer Anfrage ergibt das drei verschiedene Formen:
model=deepseek-ist ein String, alsoai/ DeepSeek- V4- Flash- 0731 =.max_tokens:=200ist eine Zahl, also:=. Mit=würdest du den String"200"senden.messages:=[…]ist ein Array von Objekten, also wieder:=, und der Wert steht in einfachen Anführungszeichen, damit die Shell die inneren doppelten Anführungszeichen in Ruhe lässt.
Die Doku sagt außerdem, dass ein Body von stdin nicht mit Kommandozeilen-Feldern kombiniert werden kann, also wähle einen Stil. Für einen ersten Test sind die Felder kürzer und leichter zu bearbeiten.
Kurzer Check
Was sendet max_tokens=200 (mit einem einfachen =)?
Antwort anzeigen
Antwort: Den String "200"
= erzeugt immer einen String. Für eine Zahl brauchst du :=, also schreibe max_tokens:=200.
Wo die Antwort steht#
Die Antwort folgt dem OpenAI-Chat-Completions-Format. Du suchst drei Dinge, und sie stehen an verschiedenen Stellen:
{
"choices": [
{
"message": { "role": "assistant", "content": "…the answer text…" },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": …, "completion_tokens": …, "total_tokens": … }
}Der Antworttext ist choices[0].. finish_reason steht daneben in derselben Choice, und usage steht auf der obersten Ebene. usage zeigt, wie viele Tokens du gesendet hast (prompt_tokens) und wie viele das Modell geschrieben hat (completion_), was praktisch ist, um die Kosten einer Anfrage abzuschätzen.

Wenn du nur den Text willst, pipe den Body an jq:
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
POST https://api.cheaptokens.dev/v1/chat/completions \
model=deepseek-ai/DeepSeek-V4-Flash-0731 \
max_tokens:=200 \
'messages:=[{"role":"user","content":"In one sentence, what is a token?"}]' \
| jq -r '.choices[0].message.content'Probier es selbstProbier es aus: Mach das Limit zu klein und lies finish_reasonAntwort anzeigen
Ändere max_tokens:=200 zu max_tokens:=5 und führe es erneut aus. Die Antwort ist abgeschnitten, und finish_reason liest length statt stop: Das Limit hat das Modell gestoppt, nicht das Ende des Gedankens. Warum eine Antwort abgeschnitten wird behandelt die Lösung.
Modell wechseln: ein Feld ändern#
Das Modell ist ein String, also ist ein anderes auszuprobieren eine Ein-Wort-Änderung. Beide IDs unten sind auf CheapTokens mit einem Guthaben verfügbar; DeepSeek-V4-Flash gibt dir einen 380K-Kontext und bis zu 32.768 Ausgabe-Tokens pro Antwort, GLM-5.3-Flash einen 390K-Kontext und bis zu 8.192.
Eine Anfrage, zwei Modelle
DeepSeek-V4-Flash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
POST https://api.cheaptokens.dev/v1/chat/completions \
model=deepseek-ai/DeepSeek-V4-Flash-0731 \
max_tokens:=200 \
'messages:=[{"role":"user","content":"Name three uses of a token limit."}]'GLM-5.3-Flash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
POST https://api.cheaptokens.dev/v1/chat/completions \
model=zai-org/GLM-5.3-Flash \
max_tokens:=200 \
'messages:=[{"role":"user","content":"Name three uses of a token limit."}]'Nicht sicher, welche ID du verwenden sollst? Liste die Modelle mit GET /v1/models und kopiere den exakten String.
Was eine Testanfrage kostet#
Eine kurze Frage wie diese ist günstig. Sagen wir, die Frage hat etwa 100 Tokens und die Antwort etwa 150: Diese Anfrage kostet $0.000017. Tausend davon sehen so aus, mit Input und Output zusammengezählt:
| Modell | Input $/1M | Output $/1M | Pro Anfrage | 1.000 Anfragen | OpenRouter, 1.000 Anfragen |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000008 | $0.008 | $0.0158 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000017 | $0.0165 | $0.028 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000028 | $0.0275 | $0.33 |
100 Input- und 150 Output-Tokens pro Anfrage. Die Preise pro 1 Mio. Tokens sind aktuell und ändern sich zusammen mit unseren Tarifen; die OpenRouter-Spalte zeigt Referenzpreise für dieselbe Arbeitslast.
Insgesamt, mit Input und Output zusammengezählt, kommt DeepSeek-V4-Flash günstiger weg als OpenRouter, und der Preis ist ein fester Satz ohne Stoßzeiten. Aktuelle Preise für jedes Modell stehen auf der Preisseite.
Wenn es nicht funktioniert#
- Du hast
messages=[…]mit einem einfachen=getippt. Das Array geht als String raus, nicht als Liste von Messages. Verwende:=und einfache Anführungszeichen um den ganzen Wert. - Das JSON in
:=ist ungültig. Jeder Key und jeder String braucht doppelte Anführungszeichen, und die äußeren müssen einfach sein. Wenn du den Nachrichtentext bearbeitest, halte die Anführungszeichen im Gleichgewicht. - Der Key ist leer.
echo ${#CHEAPTOKENS_gibt die Länge aus, ohne den Key zu zeigen;API_ KEY} 0bedeutet, dass die Variable in diesem Terminal nicht gesetzt ist. - Die Modell-ID ist der Kurzname. Verwende die vollständige
deepseek-. Für 401- und 404-Antworten siehe falscher Key, Basis-URL oder Modell-ID.ai/ DeepSeek- V4- Flash- 0731 - Du hast zu
--sessiongegriffen. HTTPies Authentifizierungsdoku sagt, dass Session-Dateien Anmeldedaten im Klartext speichern, also halte den Key in der Umgebung und lass--sessionaus diesem Befehl raus.
Prüfe deine Version mit http --version, wenn sich ein Flag anders verhält als oben beschrieben. Lieber Python? Dieselbe Anfrage ohne SDK steht in erste Anfrage in Python mit requests. Für die vollständige API-Referenz siehe die CheapTokens-Doku.



