Начало работыИнструкция
Первый запрос к CheapTokens через HTTPie: ключ в env, = и :=
Одна читаемая команда http: чат-запрос с ключом из переменной окружения и понятное объяснение, где в ответе текст и расход токенов.

Содержание
Нужно проверить, что ключ работает и id модели верный, причём одной строкой. Команда http из HTTPie делает это с куда меньшим числом кавычек, чем curl: вы вводите поля, а JSON она собирает сама. Вот весь запрос, а ниже разберём каждую часть.
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 совместим с OpenAI, поэтому базовый адрес — https:/, а чат-запросы идут на / под ним. Id модели берите полный: deepseek- (короткое имя из таблиц цен API не принимает). Если ключ вы раньше нигде не хранили, сначала прочитайте, как безопасно хранить API-ключ: строка с export попадёт в историю оболочки, так что постоянное место для ключа — файл профиля или менеджер секретов.

Что на самом деле делают = и :=#
Это единственное, что в HTTPie нужно выучить. В документации HTTPie по JSON (версия 3.2.4 от 1 ноября 2024, прочитана 9 ноября 2026) сказано: = задаёт строковое поле, а := — сырое JSON-значение: число, булево, массив или объект. Поля, заданные так, уходят JSON-телом по умолчанию, так что заголовок Content-Type добавлять не нужно.
В нашем запросе получается три разных формы:
model=deepseek-— строка, поэтомуai/ DeepSeek- V4- Flash- 0731 =.max_tokens:=200— число, поэтому:=. С=уйдёт строка"200".messages:=[…]— массив объектов, снова:=, а значение берём в одинарные кавычки, чтобы оболочка не трогала двойные внутри.
Ещё в документации сказано, что тело из stdin нельзя совмещать с полями в командной строке, так что выберите один способ. Для первой проверки поля короче и их проще править.
Быстрая проверка
Что отправит max_tokens=200 (с обычным =)?
Показать ответ
Ответ: Строку "200"
= всегда делает строку. Для числа нужно :=, то есть max_tokens:=200.
Где в ответе текст#
Ответ приходит в формате chat completions от OpenAI. Искать нужно три вещи, и лежат они в разных местах:
{
"choices": [
{
"message": { "role": "assistant", "content": "…текст ответа…" },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": …, "completion_tokens": …, "total_tokens": … }
}Текст ответа — choices[0].. finish_reason лежит рядом, в том же элементе choices, а usage — на верхнем уровне. usage показывает, сколько токенов вы отправили (prompt_tokens) и сколько написала модель (completion_) — по ним удобно прикинуть стоимость запроса.

Если нужен только текст, пропустите тело через 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'Попробуйте самиПопробуйте: сделайте лимит слишком маленьким и прочитайте finish_reasonПоказать ответ
Замените max_tokens:=200 на max_tokens:=5 и запустите снова. Ответ оборвётся, а finish_reason будет length, а не stop: модель остановил лимит, а не конец мысли. Что с этим делать, разобрано в статье почему ответ обрывается.
Другая модель: меняем одно поле#
Модель — это одна строка, так что попробовать другую можно правкой одного слова. Оба id ниже доступны в CheapTokens с одним балансом: у DeepSeek-V4-Flash контекст 380K и до 32 768 токенов в ответе, у GLM-5.3-Flash — контекст 390K и до 8 192.
Один запрос, две модели
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."}]'Не уверены в id? Получите список моделей через GET /v1/models и скопируйте точную строку.
Сколько стоит один тестовый запрос#
Короткий вопрос вроде нашего — маленький запрос по токенам. Допустим, вопрос занимает около 100 токенов, а ответ — около 150: такой запрос обойдётся в $0.000017. А тысяча таких запросов выглядит так, с учётом входа и выхода вместе:
| Модель | Вход $/1M | Выход $/1M | За запрос | 1 000 запросов | OpenRouter, 1 000 запросов |
|---|---|---|---|---|---|
| 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 входных и 150 выходных токенов на запрос. Цены за 1M токенов актуальны и меняются вместе с нашими тарифами; столбец OpenRouter показывает справочные цены для той же нагрузки.
В сумме, с учётом входа и выхода, DeepSeek-V4-Flash получается дешевле OpenRouter, при этом цена одна и та же в любое время суток, без пиковых часов. Актуальные тарифы по всем моделям — на странице цен.
Если не работает#
- Вы написали
messages=[…]с обычным=. Массив уходит строкой, а не списком сообщений. Нужен:=и одинарные кавычки вокруг всего значения. - JSON внутри
:=невалиден. У каждого ключа и строки должны быть двойные кавычки, а внешние — одинарные. Если правите текст сообщения, следите, чтобы кавычки были парными. - Ключ пустой.
echo ${#CHEAPTOKENS_печатает длину, не показывая сам ключ;API_ KEY} 0значит, что переменная в этом терминале не задана. - В поле model короткое имя. Нужен полный
deepseek-. Про ответы 401 и 404 — в статье неверный ключ, base URL или id модели.ai/ DeepSeek- V4- Flash- 0731 - Вы взяли
--session. В документации HTTPie по аутентификации сказано, что файлы сессий хранят учётные данные открытым текстом, поэтому держите ключ в окружении и не добавляйте--sessionк этой команде.
Если флаг ведёт себя не так, как описано выше, проверьте версию: http --version. Предпочитаете Python? Тот же запрос без SDK разобран в статье первый запрос на Python через requests. Полное описание API — в документации CheapTokens.



