API та SDKПосібник
Перший запит на C# з openai-dotnet: кінцева точка, ключ, відповідь
Надішліть свій перший chat completion із консольного застосунку C#: встановіть Endpoint в офіційній бібліотеці OpenAI для .NET, прочитайте ключ зі змінної середовища, надрукуйте відповідь і причину завершення.

На цій сторінці
Щоб надіслати запит із C# до CheapTokens, залиште офіційну бібліотеку OpenAI для .NET і встановіть OpenAIClientOptions. у https:/. Передайте повний ідентифікатор моделі, наприклад deepseek-, а ключ читайте зі змінної середовища. Виклики ChatClient і CompleteChat залишаються точно такими, як у прикладах OpenAI.
Припустімо, у вас уже є служба ASP.NET, яка працює з OpenAI, і ви хочете спробувати іншу кінцеву точку та модель, не змінюючи решту коду. Перш ніж підключати щось до неї, перевірте три речі, які зазвичай ідуть не так (ключ, кінцева точка, ідентифікатор моделі), у крихітному консольному застосунку. Саме це ми тут і створюємо. Деталі нижче взяті з README бібліотеки на GitHub (openai/openai-dotnet, перевірено 5 листопада 2026 року) і з документації CheapTokens: на сторінці документації вказано той самий базовий URL.
Що вам потрібно#
Пакет називається OpenAI на NuGet. Остання стабільна версія станом на 5 листопада 2026 року — 2.15.0 (запис у журналі змін датований 4 листопада). Він підтримує .NET 8 і .NET Standard 2.0, а в README сказано, що він працює з усіма застосунками .NET Standard 2.0, тож старіший проєкт теж підійде.
У застосунок потрапляють три значення:
- базовий URL:
https:/(сумісний з OpenAI Chat Completions);/ api. cheaptokens. dev/ v1 - ідентифікатор моделі:
deepseek-. Використовуйте повний ідентифікатор, коротка назва з таблиці цін не приймається. DeepSeek-V4-Flash має контекстне вікно 380K і до 32 768 вихідних токенів на відповідь, одна ціна в будь-який час доби;ai/ DeepSeek- V4- Flash- 0731 - API-ключ із вашого облікового запису CheapTokens, який зберігається у змінній середовища. Якщо ви не впевнені, як його зберігати, прочитайте як безпечно зберігати API-ключ.
Створення консольного застосунку#
Крок за кроком
Створіть проєкт і запустіть його
Створення консольного проєкту
dotnet new console -o FirstRequest
cd FirstRequestДодавання пакета
dotnet add package OpenAIРозміщення ключа у змінній середовища
У bash або zsh:
export CHEAPTOKENS_API_KEY=your-keyУ Windows PowerShell:
$env:CHEAPTOKENS_API_KEY = "your-key"Вставте код і запустіть
Замініть вміст Program.cs кодом із наступного розділу, потім запустіть dotnet run.

Код, рядок за рядком#
using System.ClientModel;
using OpenAI;
using OpenAI.Chat;
string? apiKey = Environment.GetEnvironmentVariable("CHEAPTOKENS_API_KEY");
if (string.IsNullOrEmpty(apiKey))
{
Console.WriteLine("Set CHEAPTOKENS_API_KEY first.");
return;
}
ChatClient client = new(
model: "deepseek-ai/DeepSeek-V4-Flash-0731",
credential: new ApiKeyCredential(apiKey),
options: new OpenAIClientOptions
{
Endpoint = new Uri("https://api.cheaptokens.dev/v1")
});
ChatCompletion completion = client.CompleteChat("Explain in two sentences what a token is.");
Console.WriteLine(completion.Content[0].Text);
Console.WriteLine($"finish_reason: {completion.FinishReason}");У README показано цей шаблон для «проксі або самостійно розміщеної LLM, сумісної з OpenAI»: кінцева точка передається в OpenAIClientOptions, ключ — в ApiKeyCredential (він живе в System., звідси перший using). Перевірка на початку — наша: вона дає зрозуміле повідомлення, якщо змінна не встановлена.
CompleteChat із простим рядком надсилає одне повідомлення користувача й чекає на всю відповідь. Текст відповіді міститься в completion.. Причина завершення — в completion..

Що ви маєте побачити#
Ви маєте отримати коротке пояснення токенів і рядок із причиною завершення; після нормального завершення це Stop (у README порівнюються FinishReason і ChatFinishReason.). Формулювання відповіді змінюється від запуску до запуску.
Другий рядок варто прочитати. У README порівнюються FinishReason і ChatFinishReason. (модель завершила сама) та ChatFinishReason. (модель хоче викликати інструмент). Будь-що, крім Stop, у звичайному чаті означає, що відповідь завершилася з іншої причини, і зазвичай це обмеження довжини. Якщо ви бачите відповідь, що обривається посеред речення, ця стаття пояснює finish_reason і max_tokens.
Перемикання наявної служби#
Якщо ваша служба вже створює ChatClient для OpenAI, ви змінюєте дві речі: рядок моделі та параметри. Решта викликів продовжують працювати.
Порівняйте
Той самий клієнт, два змінені рядки
До
ChatClient client = new(
model: "your-current-model",
credential: new ApiKeyCredential(apiKey));Після
ChatClient client = new(
model: "deepseek-ai/DeepSeek-V4-Flash-0731",
credential: new ApiKeyCredential(apiKey),
options: new OpenAIClientOptions
{
Endpoint = new Uri("https://api.cheaptokens.dev/v1")
});Для коротких запитів є другий варіант: zai- (контекст 390K, до 8 192 вихідних токенів). Ви змінюєте лише рядок model. Список ідентифікаторів, які може використовувати ваш ключ, — за один запит, див. Список моделей за допомогою GET /v1/models.
Скільки коштує один запит#
Припустімо, служба обробляє 1 000 запитів на день, кожен приблизно 300 токенів на вході та 400 токенів на виході. Один такий запит коштує $0.000045 на DeepSeek-V4-Flash. Таблиця нижче показує ті самі 1 000 запитів на всіх трьох моделях поряд з OpenRouter. Загалом, з урахуванням входу й виходу разом, DeepSeek-V4-Flash дешевший за OpenRouter. Актуальні ціни на сторінці цін, а сторінка DeepSeek перелічує можливості моделі.
| Модель | Вхід $/1М | Вихід $/1М | За запит | 1 000 запитів | OpenRouter, 1 000 запитів |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000022 | $0.022 | $0.0433 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000045 | $0.0445 | $0.077 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000075 | $0.075 | $0.90 |
300 вхідних і 400 вихідних токенів на запит. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.
Якщо не працює#
- 401. Ключ відсутній або неправильний. Надрукуйте, чи встановлена змінна (перевірка в коді це робить), і переконайтеся, що
dotnet runзапущено в тому самому терміналі, де ви виконувалиexport(або$env:): змінна існує лише в цій сесії. - 404. Найчастіше це ідентифікатор моделі: коротка назва замість повного
deepseek-або кінцева точка безai/ DeepSeek- V4- Flash- 0731 /v1(також перевірте, щоOpenAIClientOptionsсправді передається вChatClient). Деталі в API 401 або 404: неправильний ключ, базовий URL або ідентифікатор моделі. - error CS0246: The type or namespace name 'ApiKeyCredential' could not be found. Бракує рядка
using System.на початкуClientModel; Program.cs.
Та сама ідея іншою мовою: версія для Go з openai-go.



