OpenAI SDK base_url Türkiye Rehberi: Tek Satır Değişiklikle 708+ Modele Bağlanın

calendar_month 8 Temmuz 2026 schedule 8 dk okuma

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 — model kimliğini güncelleyin, deploy edin.
  • A/B model testi: Aynı prompt'u anthropic/claude-sonnet-5 ve openai/gpt-5.6-terra üzerinde paralel koşturup kaliteyi ve harcamayı karşılaştırın; harcama tarafını her yanıttaki cost alanı 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 / paketSürümKodda base_urlOrtam değişkeni
openai (Python)≥ 1.0OpenAI(base_url=...)OPENAI_BASE_URL
openai (Python, eski)0.xopenai.api_base = "..."OPENAI_API_BASE
openai (Node.js)≥ 4.0new OpenAI({ baseURL: ... })OPENAI_BASE_URL
openai (Node.js, eski)3.xnew 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:

ModelGirdi ($/1M token)Çıktı ($/1M token)Girdi (TL/1M)Çıktı (TL/1M)
anthropic/claude-opus-5$7.50$37.50356,66 TL1.783,31 TL
anthropic/claude-sonnet-5$3.00$15.00142,67 TL713,33 TL
openai/gpt-5.6-terra$1.50$9.0071,33 TL428,00 TL
openai/gpt-5.6-luna$0.15$0.907,13 TL42,80 TL
google/gemini-3.6-flash$2.25$11.25107,00 TL535,00 TL
deepseek/deepseek-v4-flash$0.21$0.429,99 TL19,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 yazar

Yö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:

  1. Anahtar (401 Unauthorized): Ortam değişkeninde eski OpenAI anahtarı (sk-proj-...) kalmış olabilir. Onysoft anahtarları sk-ony- ile başlar ve Authorization: Bearer başlığıyla gitmelidir — SDK'lar bunu otomatik yapar.
  2. Uç adresi (404): base_url sonundaki /v1 sık unutulur. Doğrusu: https://api.onysoft.com/v1.
  3. Model kimliği (404 / model_not_found): Provider öneki zorunludur: claude-sonnet-5 değil anthropic/claude-sonnet-5. Kimlikleri GET /v1/models'ten veya katalogdaki kopyala butonundan alın.
  4. 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 402 döner. Retry katmanınızda 402'yi ayrı ele alın — tekrar denemek değil, bakiye yüklemek gerekir.
  5. 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.
  6. Embeddings dürüst notu: Gateway şu an /v1/embeddings ucu 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.
  7. Anthropic SDK'dan geliyorsanız: Gateway Anthropic'in kendi /v1/messages protokolü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.
  8. Görsel/video/müzik: Bu modeller asenkron uçlardan çalışır: POST /v1/video/generate bir task_id döner, sonucu GET /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

Yapay Zeka API Rehberi → Türkiye LLM Gateway Rehberi → OnyRouter: Otomatik Model Seçimi → 708+ modelin tam kataloğu ve güncel TL fiyatları →

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.

Ücretsiz Hesap Aç Modelleri İncele

← Tüm yazılar

Size uygun modeli bulmanıza yardımcı olayım mı?