OpenAI SDK base_url Türkiye Rehberi: Tek Satır Değişiklikle 708+ Modele Bağlanın
OpenAI SDK'nızı Türkiye'den çoklu modele bağlamak için base_url değerini https://api.onysoft.com/v1 yapmanız ve sk-ony- önekli bir anahtar girmeniz yeterli; kodun geri kalanı değişmez. Aynı geçiş OPENAI_BASE_URL ortam değişkeniyle kod tabanına hiç dokunmadan da yapılabilir; model alanına katalogdan provider/model kimliği yazarak 708+ modele tek TL bakiyeyle erişirsiniz.
Elinizde OpenAI SDK'sıyla yazılmış çalışan bir kod tabanı var; ama Claude'un muhakemesini, Gemini'nin geniş bağlamını veya DeepSeek'in fiyat/performans oranını da istiyorsunuz. Klasik yol her sağlayıcı için ayrı SDK, ayrı anahtar ve ayrı hata formatı demek. Bu rehberde geçişin tamamını gösteriyoruz: Python, Node.js ve curl'de tek satırlık değişiklik, ortam değişkeni yöntemi, hangi SDK sürümünde base_url'in nasıl verildiğini gösteren tablo, stream açık/kapalıyken yanıt formatı farkı ve üretime çıkmadan önceki kontrol listesi.
İzmir merkezli Onysoft Veri Merkezi A.Ş.'nin işlettiği gateway'de bakiye TL yüklenir, kullanım TCMB kuru üzerinden düşer ve kurumsal e-fatura kesilir; yabancı kart ya da VPN gerekmez. Bu yazıda başka yerde bulamayacağınız veriler de var: son 14 günün 6.959 istekten ölçülmüş gerçek yanıt süreleri, her yanıtta gelen cost alanının kullanımı ve TL karşılıklı gerçek fiyat senaryosu.
base_url Değişikliği Tam Olarak Neyi Değiştirir?
base_url, resmî OpenAI SDK'larının tüm istekleri gönderdiği kök adrestir; bu tek değeri https://api.onysoft.com/v1 yaptığınızda mevcut kodunuz aynı istek ve yanıt şemasıyla Onysoft AI Gateway üzerinden Claude, GPT, Gemini ve DeepSeek dahil 708+ modele konuşmaya başlar. SDK'nın kendisi, istek gövdesi, hata yakalama kodunuz — hiçbiri değişmez.
Bunu neden isteyesiniz? Her sağlayıcı için ayrı SDK entegre etmek ilk gün masum görünür, altıncı ayda pahalıya patlar; kod tabanı büyüdükçe vendor lock-in sessizce birikir ve model değiştirmek konfigürasyon değişikliği olmaktan çıkıp refactoring projesine dönüşür. Tek uyumlu uç bu denklemi tersine çevirir:
- Lock-in kırılır: Daha iyi bir model çıktığında geçiş maliyeti sıfıra yakındır —
modelkimliğini güncelleyin, deploy edin. - A/B model testi: Aynı prompt'u
anthropic/claude-sonnet-5veopenai/gpt-5.6-terraüzerinde paralel koşturup kaliteyi ve harcamayı karşılaştırın; harcama tarafını her yanıttakicostalanı hazır verir. - Fallback: Birincil model hata verdiğinde isteği ikinci modele yönlendiren birkaç satırlık retry katmanı, iki model de aynı API arkasında yaşadığında önemsiz bir iş olur.
Türkiye'den çalışıyorsanız denkleme bir katman daha eklenir: TL bakiye, kurumsal e-fatura ve KVKK tarafında Türk hukukuna tabi bir muhatap. Bu katmanın ayrıntısı Türkiye LLM Gateway rehberinde, genel çerçeve Yapay Zeka API rehberinde.
Python, Node.js ve curl: Üç Dilde Tek Satır Değişiklik
Üç dilde de değişen tek şey istemcinin kurulduğu satırdır. Python'da (resmî openai paketi):
from openai import OpenAI
client = OpenAI(
base_url="https://api.onysoft.com/v1", # değişen tek satır
api_key="sk-ony-ANAHTARINIZ",
)
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "Kendini tek cümleyle tanıt."}],
)
print(resp.choices[0].message.content)
Node.js/TypeScript'te (resmî openai paketi, v4+):
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.onysoft.com/v1", // değişen tek satır
apiKey: "sk-ony-ANAHTARINIZ",
});
const resp = await client.chat.completions.create({
model: "openai/gpt-5.6-luna",
messages: [{ role: "user", content: "Tek API, çoklu model. Özetle?" }],
});
console.log(resp.choices[0].message.content);
SDK'sız, doğrudan curl ile:
curl https://api.onysoft.com/v1/chat/completions \
-H "Authorization: Bearer sk-ony-ANAHTARINIZ" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemini-3.6-flash",
"messages": [{"role": "user", "content": "Bu destek talebini tek cümlede özetle."}]
}'PHP tarafında topluluk standardı openai-php/client paketinde aynı iş OpenAI::factory()->withBaseUri('https://api.onysoft.com/v1') ile yapılır. Her model provider/model biçiminde adreslenir (anthropic/claude-opus-5, deepseek/deepseek-v4-flash gibi); güncel kimlik listesini GET /v1/models ucundan programatik çekebilir, koda dokunmadan denemek için Playground'u kullanabilirsiniz.
Kod Tabanına Dokunmadan Geçiş: OPENAI_BASE_URL Ortam Değişkeni
Resmî Python (openai ≥ 1.0) ve Node.js (openai ≥ 4.0) SDK'ları, istemci kurulurken parametre verilmemişse base_url'i OPENAI_BASE_URL ortam değişkeninden okur — yani geçişi tek satır kod bile yazmadan yapabilirsiniz:
export OPENAI_BASE_URL="https://api.onysoft.com/v1"
export OPENAI_API_KEY="sk-ony-ANAHTARINIZ"
# Kodunuz OpenAI() / new OpenAI() ile parametresiz kuruluyorsa
# başka hiçbir değişiklik gerekmez.Bu yöntemin iki pratik avantajı var: geri dönüş de tek değişkenlik iştir (değişkeni eski değerine alın, deploy edin) ve staging/prod ortamlarını farklı uçlara yönlendirmek CI/CD konfigürasyonunda kalır, kod incelemesine hiç girmez. Hangi sürümde hangi yolun geçerli olduğu:
| SDK / paket | Sürüm | Kodda base_url | Ortam değişkeni |
|---|---|---|---|
| openai (Python) | ≥ 1.0 | OpenAI(base_url=...) | OPENAI_BASE_URL |
| openai (Python, eski) | 0.x | openai.api_base = "..." | OPENAI_API_BASE |
| openai (Node.js) | ≥ 4.0 | new OpenAI({ baseURL: ... }) | OPENAI_BASE_URL |
| openai (Node.js, eski) | 3.x | new Configuration({ basePath: ... }) | — |
| openai-php/client (PHP) | tümü | withBaseUri(...) | — (değişkeni kendiniz okuyun) |
Doğrulama: 5 Ağustos 2026 — resmî SDK dokümantasyonları.
0.x Python ve 3.x Node sürümleri yıllardır bakım dışı; geçişi fırsat bilip güncel majör sürüme yükselmenizi öneririz — yukarıdaki örneklerin tamamı güncel sürümlere göredir.
Stream ve cost Alanı: İki Modda Yanıt Formatı Farkı
Kural basit: stream açıkken yanıt ham OpenAI SSE chunk'larıyla gelir; stream kapalıyken yanıt gövdesi success/data zarfı içindedir ve isteğin ücreti data.cost alanında USD olarak yazar. Non-stream bir çağrının ham JSON gövdesi şu yapıdadır:
{
"success": true,
"data": {
"id": "chatcmpl-...",
"model": "openai/gpt-5.6-luna",
"choices": [ ... ],
"usage": { "prompt_tokens": 12, "completion_tokens": 84 },
"cost": 0.0000774
}
}curl veya kendi HTTP istemcinizle çalışıyorsanız içeriği .data.choices[0].message.content, maliyeti .data.cost yolundan okursunuz (| jq '.data.cost'). Bu cost alanı, gateway'in ayırt edici özelliklerinden biridir: harcamayı gün sonunda panelden toplamak yerine her isteğin ücretini yanıtın kendisinden loglayabilir, A/B testlerinde kalite/maliyet karşılaştırmasını istek bazında yapabilirsiniz.
Stream açıkken ise zarf yoktur: chunk'lar ham OpenAI SSE formatında gelir ve data: [DONE] ile biter. Bu yüzden mevcut streaming kodunuz hiçbir uyarlama gerektirmez:
stream = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "Mikroservis mimarisini anlat."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
Dikkat edilecek tek fark: cost alanı stream chunk'larında bulunmaz. Streamli isteklerin maliyetini panel kullanım dökümünden izlersiniz; istek bazlı maliyet logu kritikse ilgili çağrıyı non-stream yapıp data.cost'u kaydetmek en temiz çözümdür.
Onysoft'ta Nasıl Çalışıyor: Fiyatlar, Gerçek Gecikme ve OnyRouter
Geçişten sonra faturanızı belirleyen şey artık kod değil, model alanına yazdığınız string'dir. Katalogdan güncel satış fiyatlarıyla uçlar arasındaki makas şöyle:
| Model | Girdi ($/1M token) | Çıktı ($/1M token) | Girdi (TL/1M) | Çıktı (TL/1M) |
|---|---|---|---|---|
anthropic/claude-opus-5 | $7.50 | $37.50 | 356,66 TL | 1.783,31 TL |
anthropic/claude-sonnet-5 | $3.00 | $15.00 | 142,67 TL | 713,33 TL |
openai/gpt-5.6-terra | $1.50 | $9.00 | 71,33 TL | 428,00 TL |
openai/gpt-5.6-luna | $0.15 | $0.90 | 7,13 TL | 42,80 TL |
google/gemini-3.6-flash | $2.25 | $11.25 | 107,00 TL | 535,00 TL |
deepseek/deepseek-v4-flash | $0.21 | $0.42 | 9,99 TL | 19,97 TL |
Ölçüm: 5 Ağustos 2026 — api.onysoft.com canlı katalog. TL karşılıkları 5 Ağustos 2026 TCMB kuru (1 USD = 47,555 TL) ile hesaplanmıştır.
Somut senaryo: ayda 10M girdi + 2,5M çıktı token üreten bir sohbet botu anthropic/claude-sonnet-5 ile $67,50 (3.209,96 TL), openai/gpt-5.6-luna ile $3,75 (178,33 TL), deepseek/deepseek-v4-flash ile $3,15 (149,80 TL) tutar — üçü arasında geçiş, bu yazının konusu olan tek string değişikliğidir. Kendi profiliniz için maliyet hesaplayıcıyı kullanın.
Hız tarafında tahmin değil ölçüm paylaşalım: son 14 günde gateway üzerinden geçen 6.959 başarılı istekte uçtan uca ortalama yanıt süresi 3,8 saniye, en hızlısı 0,3 saniye ölçüldü. Ortalamayı yukarı çeken gateway değil, trafikteki uzun üretimli amiral ve muhakeme istekleridir; 0,3 saniyelik taban, katmanın hafif modellerde ne kadar inceldiğini gösterir.
Model seçimini gateway'e devretmek isterseniz OnyRouter devrede:
resp = client.chat.completions.create(
model="onysoft/auto", # OnyRouter: isteğe en uygun modeli gateway seçer
messages=[{"role": "user", "content": "Bu SQL sorgusunu optimize et."}],
)
print(resp.model) # seçilen model yanıtta şeffaf biçimde yazarYönlendirmenin kendisi ücretsizdir; yalnızca seçilen modelin kullanımı faturalandırılır. Ayrıntılar OnyRouter rehberinde.
Geçiş Kontrol Listesi: 401, 404, 402 ve Dürüst Sınırlar
Üretime çıkmadan önce şu listeyi baştan sona işaretleyin; ilk üç madde geçişlerde görülen hataların büyük bölümünü tek başına kapatır:
- Anahtar (401 Unauthorized): Ortam değişkeninde eski OpenAI anahtarı (
sk-proj-...) kalmış olabilir. Onysoft anahtarlarısk-ony-ile başlar veAuthorization: Bearerbaşlığıyla gitmelidir — SDK'lar bunu otomatik yapar. - Uç adresi (404):
base_urlsonundaki/v1sık unutulur. Doğrusu:https://api.onysoft.com/v1. - Model kimliği (404 / model_not_found): Provider öneki zorunludur:
claude-sonnet-5değilanthropic/claude-sonnet-5. KimlikleriGET /v1/models'ten veya katalogdaki kopyala butonundan alın. - Bakiye ve 402: Gateway her istekten önce tahmini maliyeti yüzde 20 güvenlik payıyla (×1,2) bakiyenizle karşılaştırır; bakiye yetmiyorsa istek modele hiç gitmeden
402döner. Retry katmanınızda 402'yi ayrı ele alın — tekrar denemek değil, bakiye yüklemek gerekir. - Anahtar bazlı limitler: Üretim ve test için ayrı anahtar üretin; panelden anahtar bazında harcama limiti tanımlayarak kaçak bir döngünün bütçeyi eritmesini engelleyin.
- Embeddings dürüst notu: Gateway şu an
/v1/embeddingsucu sunmuyor. RAG kurulumunuzda embedding trafiğini mevcut sağlayıcınızda tutup üretim (chat/completions) trafiğini gateway'e taşımak, pratikte en temiz mimaridir — iki iş yükü zaten farklı anahtar ve farklı maliyet profiliyle yaşar. - Anthropic SDK'dan geliyorsanız: Gateway Anthropic'in kendi
/v1/messagesprotokolünü değil, OpenAI şemasını sunar. Claude modellerine de OpenAI SDK'sıyla bağlanırsınız;messages.createçağrılarınıchat.completions.create'e çevirmeniz gerekir. - Görsel/video/müzik: Bu modeller asenkron uçlardan çalışır:
POST /v1/video/generatebirtask_iddöner, sonucuGET /v1/video/status/{task_id}ile sorgularsınız; OpenAI SDK yerine basit bir HTTP istemcisi yeterlidir.
Listenin dışında bir sorunla karşılaşırsanız API dokümantasyonundaki hata kodları bölümü ve 7/24 Türkçe destek devrede. Başlamak için ücretsiz hesap açıp ilk isteğinizi Playground'dan atabilirsiniz.
Son güncelleme: 5 Ağustos 2026 · Veriler: api.onysoft.com canlı katalog
Sık Sorulan Sorular
OpenAI SDK'da base_url nasıl değiştirilir?
Python'da OpenAI(base_url="https://api.onysoft.com/v1", api_key="sk-ony-...") yazmanız, Node.js'te aynı değerleri baseURL ve apiKey olarak vermeniz yeterlidir. Kod değiştirmek istemiyorsanız OPENAI_BASE_URL ve OPENAI_API_KEY ortam değişkenlerini ayarlayın; güncel SDK'lar parametre verilmediğinde bu değişkenleri otomatik okur.
OPENAI_BASE_URL ortam değişkeni hangi SDK sürümlerinde çalışır?
Resmî Python SDK'sında 1.0 ve sonrası, Node.js SDK'sında 4.0 ve sonrası OPENAI_BASE_URL değişkenini okur. Eski Python 0.x sürümü OPENAI_API_BASE değişkenini ve openai.api_base atamasını kullanır; Node 3.x'te ise basePath yalnızca kodda verilebilir. Bakım dışı bu sürümlerden güncel majöre yükselmenizi öneririz.
Mevcut OpenAI kodum başka değişiklik gerektirir mi?
Hayır. İstek gövdesi, streaming, tools ve JSON modu OpenAI chat/completions şemasıyla birebir uyumludur; tek fark model alanına provider/model biçiminde bir kimlik yazmanızdır (örneğin anthropic/claude-sonnet-5). Güncel kimlik listesi GET /v1/models ucundan programatik olarak da çekilebilir.
Streaming yanıtlar OpenAI formatıyla birebir aynı mı?
Evet — stream açıkken chunk'lar ham OpenAI SSE formatında gelir ve data: [DONE] ile biter, mevcut streaming döngünüz değişmeden çalışır. Stream kapalıyken ise yanıt gövdesi success/data zarfı içindedir: asıl OpenAI gövdesi ve isteğin ücretini gösteren cost alanı data içinde yer alır. Ham HTTP entegrasyonlarında bu farkı hesaba katın.
Bir isteğin maliyetini nasıl görürüm?
Non-stream her yanıtta data.cost alanı, o isteğin ücretini USD olarak verir; bunu loglayarak istek bazlı maliyet takibini uygulama içinden yapabilirsiniz. Stream chunk'larında cost alanı bulunmaz; streamli isteklerin harcaması panel kullanım dökümünde görünür. Aylık öngörü için /calculator sayfasındaki hesaplayıcı kullanılabilir.
Bakiyem yetersizse istek ne döner?
Gateway her istekten önce tahmini maliyeti yüzde 20 güvenlik payıyla (×1,2) bakiyenizle karşılaştırır; yetmiyorsa istek modele hiç iletilmeden 402 hata kodu döner. Bu sayede yarıda kesilen üretim ve sürpriz borçlanma yaşanmaz. Retry katmanınızda 402'yi ayrı ele alın: çözüm tekrar denemek değil, panelden TL bakiye yüklemektir — yüklenen bakiye anında etkinleşir.
İlgili sayfalar
Denemeye hazır mısınız?
708+ AI modeline tek API ile erişin. TL bakiye yükleyin, kullandıkça ödeyin — abonelik yok.