API та SDKПосібник
Перший запит у Java з openai-java: базова URL-адреса, ключ, використання
Готова до запуску програма на Java 8+: openai-java, націлений на CheapTokens, одне завершення чату, а також виведені відповідь, finish_reason і використання токенів.

На цій сторінці
Щоб викликати CheapTokens з Java, залиште офіційний SDK openai-java і змініть три речі: базову URL-адресу (https:/), API-ключ і ідентифікатор моделі, переданий як звичайний String. Програма нижче надсилає одне завершення чату й виводить відповідь, finish_reason та використання токенів. Їй потрібна Java 8 або новіша.
Якщо у вашій команді вже є сервіс на Spring, що спілкується з OpenAI, це вся міграція: жодного нового клієнта, жодних нових класів запитів.
Додайте залежність#
README SDK (github.com/openai/openai-java, перевірено 4 листопада 2026) показує версію 4.99.0, групу com.openai, артефакт openai-java. README не вказує дату випуску, тож перед тим як копіювати це, перегляньте репозиторій, щоб дізнатися останню версію.
Додайте openai-java до своєї збірки
Maven
<dependency>
<groupId>com.openai</groupId>
<artifactId>openai-java</artifactId>
<version>4.99.0</version>
</dependency>Gradle
implementation("com.openai:openai-java:4.99.0")Артефакти, незалежні від фреймворку, працюють на Java 8+, тож старіший корпоративний JDK не є перешкодою.
Задайте ключ і базову URL-адресу поза кодом#
SDK читає дві змінні середовища: OPENAI_API_KEY і OPENAI_BASE_URL. OpenAIOkHttpClient. підхоплює обидві, тож ключ ніколи не потрапляє у ваші вихідні файли. (Системні властивості openai.apiKey і openai.baseUrl також працюють і мають пріоритет над змінними.)
export OPENAI_API_KEY="your-cheaptokens-key"
export OPENAI_BASE_URL="https://api.cheaptokens.dev/v1"Типова базова URL-адреса SDK — https:/. Пропустіть другий рядок, і ваш запит піде туди з ключем CheapTokens, якого він не знає. Це один зі способів отримати 401 під час першого запуску. Про те, де зберігати ключ і як тримати його поза git, дивіться безпечне зберігання API-ключа.

Програма#
Створіть FirstRequest.:
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;
public class FirstRequest {
public static void main(String[] args) {
OpenAIClient client = OpenAIOkHttpClient.fromEnv();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model("deepseek-ai/DeepSeek-V4-Flash-0731")
.addUserMessage("Explain in two sentences what a token is.")
.maxCompletionTokens(300L)
.build();
ChatCompletion completion = client.chat().completions().create(params);
ChatCompletion.Choice choice = completion.choices().get(0);
System.out.println(choice.message().content().orElse("(no text)"));
System.out.println("finish_reason: " + choice.finishReason());
completion.usage().ifPresent(u ->
System.out.println("input " + u.promptTokens()
+ ", output " + u.completionTokens()));
}
}Кілька рядків варті другого погляду.
.. Приклади в README SDK використовують типізовані константи, як-отmodel("deepseek- ai/ DeepSeek- V4- Flash- 0731") ChatModel., але в білдера також є перевантаженняGPT_ 5_ 2 model(String), тож підходить будь-який id. Використовуйте повний id з документації CheapTokens: коротка назваdeepseek-— це те, як ціни позначені на сайті; API потребує повного id з префіксомv4- flash- 0731 deepseek-ai/. Не впевнені щодо id? Отримайте список моделей через GET /v1/models... Обмеження довжини відповіді якmaxCompletionTokens(300L) long. DeepSeek-V4-Flash дозволяє до 32 768 вихідних токенів на відповідь, тож 300 тут — це вибір, щоб демо було коротким, а не обмеження моделі.content()— цеOptional. Ось чому в програмі єorElse. Відповідь, що складається лише з викликів інструментів, не має тексту.usage()тежOptional.ifPresentвиводить його, коли сервер його надсилає.
Скомпілюйте й запустіть так, як це робить ваша збірка (mvn compile exec:java - або завдання JavaExec у Gradle). Ви маєте отримати пояснення токена, потім рядок finish_reason: … з stop у ньому, а потім рядок з кількістю вхідних і вихідних токенів. Якщо finish_reason каже length, відповідь досягла вашого ліміту в 300 токенів і була обрізана: збільште число (чому це відбувається).
usage() повертає кількість токенів запиту, завершення та загальну (promptTokens(), completionTokens(), totalTokens()).
Задайте значення явно через білдер#
Тестам або сервісу з кількома клієнтами іноді потрібні явні значення. Той самий клієнт, зібраний вручну:
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.baseUrl("https://api.cheaptokens.dev/v1")
.build();Усе після цього рядка — параметри й виклик create — залишається точно як вище. Навіть тут читайте ключ із середовища; рядковий літерал у файлі .java потрапляє до вашого репозиторію.

Три помилки, які ви зустрінете першими#
З'єднайте пари
Зіставте симптом із причиною
Торкніться елемента ліворуч, потім його пари
- 401 Unauthorizedключ порожній або неправильний, або запит пішов на api.openai.com, бо
OPENAI_BASE_URLне задано - 404 Not Foundбазовій URL-адресі бракує
/v1, або ідентифікатора моделі не існує - finish_reason каже length
maxCompletionTokensменше, ніж потрібно для відповіді
Порожню змінну середовища легко пропустити в IDE: конфігурація запуску, розпочата з панелі інструментів, може не успадковувати змінні, які ви експортували в терміналі. Якщо ключ «задано», але ви все одно отримуєте 401, додайте змінні до конфігурації запуску. Докладніше про ці коди: API 401 або 404: ключ, базова URL-адреса, id моделі.
Скільки коштує один запит#
Оскільки ви виводите usage, ви можете оцінити вартість запиту, перш ніж масштабувати його. Скажімо, ваш сервіс надсилає близько 200 вхідних токенів і отримує 300 у відповідь. За сьогоднішніми цінами такий запит коштує $0.000033 на DeepSeek-V4-Flash. Вхідні й вихідні токени оплачуються разом, і загалом це дешевше, ніж OpenRouter. Таблиця повторює це для 1 000 запитів по наших моделях:
| Модель | Вхід $/1М | Вихід $/1М | За запит | 1 000 запитів | OpenRouter, 1 000 запитів |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000016 | $0.016 | $0.0316 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000033 | $0.033 | $0.056 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000055 | $0.055 | $0.66 |
200 вхідних і 300 вихідних токенів на запит. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.
Тепер підставте свій трафік. Перетягніть повзунки до чисел із вашого першого виведеного рядка usage:
Калькулятор вартості
Сервіс підтримки з 2 000 запитів на день
Вхідні токени на запит: 200 · Вихідні токени на запит: 300 · Запитів на день: 2 000
| Модель | За день | За місяць |
|---|---|---|
| GLM-5.3-Flash$0.02$0.04 | $0.032 | $0.96 |
| DeepSeek-V4-Flash$0.015$0.10 | $0.066 | $1.98 |
| MiniMax-M2.7$0.05$0.15 | $0.11 | $3.30 |
Для більшого обсягу на відповідь або іншої форми навантаження DeepSeek-V4-Flash дає вікно контексту 380K і одну ціну в будь-яку годину доби; GLM-5.3-Flash (zai-) — це замінна модель у тій самій програмі: змініть id, і більше нічого. Актуальні ціни для всіх моделей — на сторінці цін, а документація показує той самий запит іншими мовами. Робите це в Go? Дивіться версію для openai-go.



