API & SDKPanduan
Permintaan pertama di C# dengan openai-dotnet: endpoint, kunci, balasan
Kirim chat completion pertama Anda dari aplikasi konsol C#: setel Endpoint di pustaka resmi OpenAI .NET, baca kunci dari env, cetak balasan dan alasan selesai.

Di halaman ini
Untuk mengirim permintaan dari C# ke CheapTokens, pertahankan pustaka resmi OpenAI untuk .NET dan setel OpenAIClientOptions. ke https:/. Berikan id model lengkap, misalnya deepseek-, dan baca kunci dari variabel lingkungan. Panggilan ChatClient dan CompleteChat tetap persis seperti pada contoh OpenAI.
Misalkan Anda sudah memiliki layanan ASP.NET yang berbicara dengan OpenAI, dan Anda ingin mencoba endpoint dan model lain tanpa menyentuh sisa kode. Sebelum menghubungkan apa pun ke dalamnya, periksa tiga hal yang biasanya salah (kunci, endpoint, id model) di aplikasi konsol kecil. Itulah yang kami bangun di sini. Detail di bawah ini berasal dari README pustaka di GitHub (openai/openai-dotnet, diperiksa 5 November 2026) dan dari dokumentasi CheapTokens: halaman docs memiliki base URL yang sama.
Yang Anda butuhkan#
Paketnya bernama OpenAI di NuGet. Versi stabil terbaru pada 5 November 2026 adalah 2.15.0 (entri changelog-nya bertanggal 4 November). Paket ini menargetkan .NET 8 dan .NET Standard 2.0, dan README menyatakan bahwa paket ini berfungsi dengan semua aplikasi .NET Standard 2.0, jadi proyek lama pun tidak masalah.
Tiga nilai dimasukkan ke aplikasi:
- base URL:
https:/(kompatibel dengan OpenAI Chat Completions);/ api. cheaptokens. dev/ v1 - id model:
deepseek-. Gunakan id lengkap, nama pendek dari tabel harga tidak diterima. DeepSeek-V4-Flash memiliki jendela konteks 380K dan hingga 32.768 token keluaran per jawaban, satu harga kapan pun sepanjang hari;ai/ DeepSeek- V4- Flash- 0731 - kunci API dari akun CheapTokens Anda, disimpan di variabel lingkungan. Jika Anda tidak yakin cara menyimpannya, baca cara menyimpan kunci API dengan aman.
Bangun aplikasi konsol#
Langkah demi langkah
Buat proyek dan jalankan
Buat proyek konsol
dotnet new console -o FirstRequest
cd FirstRequestTambahkan paket
dotnet add package OpenAIMasukkan kunci ke variabel lingkungan
Di bash atau zsh:
export CHEAPTOKENS_API_KEY=your-keyDi Windows PowerShell:
$env:CHEAPTOKENS_API_KEY = "your-key"Tempel kode dan jalankan
Ganti isi Program.cs dengan kode dari bagian berikutnya, lalu jalankan dotnet run.

Kode, baris demi baris#
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 menunjukkan pola ini untuk "proxy atau LLM self-hosted yang kompatibel dengan OpenAI": endpoint dimasukkan ke OpenAIClientOptions, kunci ke ApiKeyCredential (kunci berada di System., maka using pertama). Pemeriksaan di bagian atas adalah milik kami: pemeriksaan ini memberikan pesan yang jelas jika variabel tidak disetel.
CompleteChat dengan string biasa mengirim satu pesan pengguna dan menunggu seluruh jawaban. Teks balasan ada di completion.. Alasan selesai ada di completion..

Yang seharusnya Anda lihat#
Anda seharusnya mendapatkan penjelasan singkat tentang token dan satu baris dengan alasan selesai; setelah akhir normal nilainya Stop (README membandingkan FinishReason dengan ChatFinishReason.). Kata-kata balasan berubah dari satu eksekusi ke eksekusi berikutnya.
Baris kedua adalah yang layak dibaca. README membandingkan FinishReason dengan ChatFinishReason. (model selesai dengan sendirinya) dan ChatFinishReason. (model ingin memanggil alat). Apa pun selain Stop dalam obrolan biasa berarti jawaban berakhir karena alasan lain, dan tersangka utamanya adalah batas panjang. Jika Anda melihat balasan yang berhenti di tengah kalimat, artikel ini menjelaskan finish_reason dan max_tokens.
Mengalihkan layanan yang sudah ada#
Jika layanan Anda sudah membuat ChatClient untuk OpenAI, Anda mengubah dua hal: string model dan opsi. Panggilan lainnya tetap berfungsi.
Bandingkan
Klien yang sama, dua baris yang diubah
Sebelum
ChatClient client = new(
model: "your-current-model",
credential: new ApiKeyCredential(apiKey));Sesudah
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")
});Untuk permintaan pendek ada opsi kedua: zai- (konteks 390K, hingga 8.192 token keluaran). Anda hanya mengubah string model. Daftar id yang dapat digunakan kunci Anda hanya berjarak satu permintaan, lihat Daftar model dengan GET /v1/models.
Berapa biaya satu permintaan#
Misalkan sebuah layanan menangani 1.000 permintaan sehari, masing-masing sekitar 300 token masuk dan 400 token keluar. Satu permintaan seperti itu berbiaya $0.000045 pada DeepSeek-V4-Flash. Tabel di bawah ini menunjukkan 1.000 permintaan yang sama pada ketiga model di samping OpenRouter. Secara total, dengan input dan output dihitung bersama, DeepSeek-V4-Flash lebih murah daripada OpenRouter. Harga terkini ada di halaman harga, dan halaman DeepSeek mencantumkan apa yang ditawarkan model tersebut.
| Model | Input $/1Jt | Output $/1Jt | Per permintaan | 1.000 permintaan | OpenRouter, 1.000 permintaan |
|---|---|---|---|---|---|
| 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 token input dan 400 token output per permintaan. Harga per 1 juta token adalah harga saat ini dan berubah seiring tarif kami; kolom OpenRouter menunjukkan harga referensi untuk beban kerja yang sama.
Jika tidak berhasil#
- 401. Kunci hilang atau salah. Cetak apakah variabel sudah disetel (pemeriksaan dalam kode melakukan ini) dan pastikan
dotnet rundijalankan di terminal yang sama tempat Anda menjalankanexport(atau$env:): variabel hanya hidup di sesi itu. - 404. Paling sering id model: nama pendek alih-alih
deepseek-lengkap, atau endpoint tanpaai/ DeepSeek- V4- Flash- 0731 /v1(juga periksa bahwaOpenAIClientOptionsbenar-benar diteruskan keChatClient). Detailnya ada di API 401 atau 404: kunci, base URL, atau id model yang salah. - error CS0246: The type or namespace name 'ApiKeyCredential' could not be found. Baris
using System.hilang di bagian atasClientModel; Program.cs.
Ide yang sama dalam bahasa lain: versi Go dengan openai-go.



