Назад до блогу

Початок роботиПосібник

Перший запит до CheapTokens з HTTPie: ключ у env, = і :=

Одна читабельна команда http, яка надсилає chat completion з ключем у змінній середовища, а потім показує, де відповідь і використання токенів.

Автор: CheapTokens TeamОпубліковано 4 хв читання

Термінал із командою http, змінною bearer-ключа та полями JSON
На цій сторінці
  1. Що насправді роблять = і :=
  2. Де відповідь
  3. Замініть модель: змініть одне поле
  4. Скільки коштує один тестовий запит
  5. Якщо не працює

Ви хочете переконатися, що ключ працює, а ідентифікатор моделі правильний, і зробити це одним рядком. Команда HTTPie http робить це з набагато меншою кількістю лапок, ніж curl: ви вводите поля, а вона будує JSON. Ось увесь запит, а решта статті пояснює кожну частину.

bash
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, тому базовий URL — https://api.cheaptokens.dev/v1, а запити чату йдуть на /chat/completions під ним. Ідентифікатор моделі — повний, deepseek-ai/DeepSeek-V4-Flash-0731 (коротка назва з таблиць цін не приймається). Якщо ви ще не зберігали ключ, спершу збережіть API-ключ безпечно: введення рядка export додає ключ до історії вашої оболонки, тож файл профілю або менеджер секретів — краще місце для нього.

Запит у терміналі: bearer-ключ зі змінної, модель як рядок, max_tokens як число, messages як сирий масив
Той самий запит, як він виглядає в терміналі

Що насправді роблять = і :=#

Це єдина частина 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. Ви шукаєте три речі, і вони розташовані в різних місцях:

json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "…the answer text…" },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": …, "completion_tokens": …, "total_tokens": … }
}

Текст відповіді — choices[0].message.content. finish_reason поруч із ним у тому самому choice, а usage — на верхньому рівні. usage показує, скільки токенів ви надіслали (prompt_tokens) і скільки написала модель (completion_tokens), що зручно для оцінки вартості запиту.

Де дивитися у відповіді: choices, message.content, finish_reason і usage
Три поля для читання в кожній відповіді

Якщо вам потрібен лише текст, передайте тіло в jq:

bash
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: ліміт зупинив модель, а не кінець думки. Чому відповідь обривається пояснює, як це виправити.

Замініть модель: змініть одне поле#

Модель — це один рядок, тож спробувати іншу — правка в одне слово. Обидва ідентифікатори нижче доступні на CheapTokens з одним балансом; DeepSeek-V4-Flash дає вам контекст 380K і до 32 768 вихідних токенів на відповідь, GLM-5.3-Flash — контекст 390K і до 8 192.

Один запит, дві моделі

DeepSeek-V4-Flash

bash
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

bash
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."}]'

Не впевнені, який ідентифікатор використовувати? Перелічіть моделі за допомогою GET /v1/models і скопіюйте точний рядок.

Скільки коштує один тестовий запит#

Коротке запитання, як це, дешеве. Скажімо, запитання — близько 100 токенів, а відповідь — близько 150: такий запит коштує $0.000017. Тисяча таких виглядає так, з урахуванням вхідних і вихідних токенів разом:

Модель За запит 1 000 запитів OpenRouter, 1 000 запитів
GLM-5.3-Flash $0.000008 $0.008 $0.0158
DeepSeek-V4-Flash $0.000017 $0.0165 $0.028
MiniMax-M2.7 $0.000028 $0.0275 $0.33

100 вхідних і 150 вихідних токенів на запит. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.

Загалом, з урахуванням вхідних і вихідних токенів разом, DeepSeek-V4-Flash виходить дешевшим, ніж OpenRouter, а ціна — це одна фіксована ставка без пікових годин. Актуальні тарифи для кожної моделі — на сторінці цін.

Якщо не працює#

  • Ви ввели messages=[…] зі звичайним =. Масив надсилається як рядок, а не як список повідомлень. Використовуйте := та одинарні лапки навколо всього значення.
  • JSON усередині := недійсний. Кожен ключ і рядок потребує подвійних лапок, а зовнішні лапки мають бути одинарними. Якщо ви редагуєте текст повідомлення, зберігайте баланс лапок.
  • Ключ порожній. echo ${#CHEAPTOKENS_API_KEY} виводить довжину, не показуючи ключ; 0 означає, що змінна не задана в цьому терміналі.
  • Ідентифікатор моделі — коротка назва. Використовуйте повний deepseek-ai/DeepSeek-V4-Flash-0731. Щодо відповідей 401 і 404 дивіться неправильний ключ, базовий URL або ідентифікатор моделі.
  • Ви потягнулися до --session. Документація HTTPie щодо автентифікації каже, що файли сесій зберігають облікові дані у відкритому тексті, тож тримайте ключ у змінній середовища й залиште --session поза цією командою.

Перевірте свою версію за допомогою http --version, якщо якийсь прапорець поводиться інакше, ніж описано вище. Надаєте перевагу Python? Той самий запит без SDK — у першому запиті в Python з requests. Повний довідник API дивіться в документації CheapTokens.