Pierwsze krokiPrzewodnik
Pierwsze żądanie do CheapTokens z HTTPie: klucz w env, = i :=
Jedno czytelne polecenie http, które wysyła uzupełnienie czatu z kluczem w zmiennej środowiskowej, a następnie pokazuje, gdzie jest odpowiedź i zużycie tokenów.

Na tej stronie
Chcesz wiedzieć, że klucz działa i że identyfikator modelu jest prawidłowy — i chcesz to wiedzieć w jednej linii. Polecenie http w HTTPie robi to z dużo mniejszą liczbą cudzysłowów niż curl: wpisujesz pola, a ono buduje JSON. Oto całe żądanie, a reszta artykułu wyjaśnia każdy element.
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?"}]'API jest zgodne z OpenAI, więc bazowy URL to https:/, a żądania czatu trafiają pod /. Identyfikator modelu jest pełny: deepseek- (krótka nazwa z tabel cen nie jest akceptowana). Jeśli wcześniej nie zapisywałeś klucza, najpierw bezpiecznie zapisz klucz API: wpisanie linii export umieszcza klucz w historii powłoki, więc lepszym miejscem dla niego jest plik profilu lub menedżer sekretów.

Co faktycznie robią = i :=#
To jedyna część HTTPie, której musisz się nauczyć. Dokumentacja JSON HTTPie (wersja 3.2.4, z 1 listopada 2024, czytana 9 listopada 2026) mówi, że = ustawia pole tekstowe, a := ustawia surową wartość JSON: liczbę, wartość logiczną, tablicę lub obiekt. Pola podane w ten sposób są domyślnie wysyłane jako treść JSON, więc nie dodajesz sam nagłówka Content-Type.
W naszym żądaniu daje to trzy różne kształty:
model=deepseek-to string, więcai/ DeepSeek- V4- Flash- 0731 =.max_tokens:=200to liczba, więc:=. Z=wysłałbyś string"200".messages:=[…]to tablica obiektów, więc znowu:=, a wartość jest w pojedynczych cudzysłowach, żeby powłoka nie ruszała wewnętrznych podwójnych cudzysłowów.
Dokumentacja mówi też, że treści ze standardowego wejścia nie można łączyć z polami z wiersza poleceń, więc wybierz jeden styl. Do pierwszego testu pola są krótsze i łatwiejsze do edycji.
Szybkie sprawdzenie
Co wysyła max_tokens=200 (ze zwykłym =)?
Pokaż odpowiedź
Odpowiedź: String "200"
= zawsze tworzy string. Dla liczby potrzebujesz :=, więc napisz max_tokens:=200.
Gdzie jest odpowiedź#
Odpowiedź ma format uzupełnień czatu OpenAI. Szukasz trzech rzeczy i znajdują się one w różnych miejscach:
{
"choices": [
{
"message": { "role": "assistant", "content": "…the answer text…" },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": …, "completion_tokens": …, "total_tokens": … }
}Tekst odpowiedzi to choices[0].. finish_reason jest obok niego w tym samym wyborze, a usage jest na najwyższym poziomie. usage pokazuje, ile tokenów wysłałeś (prompt_tokens) i ile napisał model (completion_), co jest przydatne do szacowania kosztu żądania.

Jeśli chcesz tylko tekst, przekieruj treść do 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'Spróbuj samWypróbuj: ustaw limit za mały i odczytaj finish_reasonPokaż odpowiedź
Zmień max_tokens:=200 na max_tokens:=5 i uruchom ponownie. Odpowiedź jest ucięta, a finish_reason ma wartość length zamiast stop: limit zatrzymał model, a nie koniec myśli. Dlaczego odpowiedź się urywa omawia rozwiązanie.
Zmień model: zmień jedno pole#
Model to jeden string, więc wypróbowanie innego to edycja jednego słowa. Oba poniższe identyfikatory są dostępne w CheapTokens z jednym saldem; DeepSeek-V4-Flash daje kontekst 380K i do 32 768 tokenów wyjściowych na odpowiedź, GLM-5.3-Flash kontekst 390K i do 8 192.
Jedno żądanie, dwa modele
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."}]'Nie wiesz, którego identyfikatora użyć? Wypisz modele za pomocą GET /v1/models i skopiuj dokładny string.
Ile kosztuje jedno testowe żądanie#
Krótkie pytanie, takie jak to, jest tanie. Załóżmy, że pytanie ma około 100 tokenów, a odpowiedź około 150: to żądanie kosztuje $0.000017. Tysiąc takich wygląda tak, z wejściem i wyjściem liczonym razem:
| Model | Wejście $/1M | Wyjście $/1M | Za żądanie | 1000 żądań | OpenRouter, 1000 żądań |
|---|---|---|---|---|---|
| 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 tokenów wejściowych i 150 tokenów wyjściowych na żądanie. Ceny za 1 mln tokenów są aktualne i zmieniają się wraz z naszymi taryfami; kolumna OpenRouter pokazuje ceny referencyjne dla tego samego obciążenia.
Łącznie, z wejściem i wyjściem liczonym razem, DeepSeek-V4-Flash wypada taniej niż OpenRouter, a cena to jedna stała stawka bez godzin szczytu. Aktualne stawki dla każdego modelu są na stronie cen.
Jeśli nie działa#
- Wpisałeś
messages=[…]ze zwykłym=. Tablica wychodzi jako string, a nie lista wiadomości. Użyj:=i pojedynczych cudzysłowów wokół całej wartości. - JSON wewnątrz
:=jest nieprawidłowy. Każdy klucz i string wymaga podwójnych cudzysłowów, a zewnętrzne cudzysłowy muszą być pojedyncze. Jeśli edytujesz tekst wiadomości, zachowaj równowagę cudzysłowów. - Klucz jest pusty.
echo ${#CHEAPTOKENS_wypisuje długość bez pokazywania klucza;API_ KEY} 0oznacza, że zmienna nie jest ustawiona w tym terminalu. - Identyfikator modelu to krótka nazwa. Użyj pełnego
deepseek-. W przypadku odpowiedzi 401 i 404 zobacz zły klucz, bazowy URL lub identyfikator modelu.ai/ DeepSeek- V4- Flash- 0731 - Sięgnąłeś po
--session. Dokumentacja uwierzytelniania HTTPie mówi, że pliki sesji przechowują dane uwierzytelniające w postaci zwykłego tekstu, więc trzymaj klucz w środowisku i pomiń--sessionw tym poleceniu.
Sprawdź swoją wersję za pomocą http --version, jeśli jakaś flaga zachowuje się inaczej niż opisano powyżej. Wolisz Python? To samo żądanie bez SDK jest w pierwsze żądanie w Pythonie z requests. Pełna dokumentacja API jest w dokumentacji CheapTokens.



