OpenAI uyumlu API
Son güncelleme: 11 Kas 2026
Nedir
OpenAI uyumlu API, OpenAI'ın chat completions biçimini konuşan bir aracın ToRun'un sohbet modellerini kullanmasını sağlar; ücreti ToRun hesabınızdan ödenir. opencode gibi bir kodlama ajanı, ToRun'un MCP araçlarının yanında ToRun'u model sağlayıcısı olarak da kullanabilir.
Adres ve oturum açma
| Temel URL | https://mcp.torun.ai/v1 |
| Oturum açma | Authorization: Bearer <your developer key> |
MCP sunucusu için kullandığınız geliştirici anahtarını kullanın: bkz. Geliştirici anahtarları. OpenAI uyumlu API eklenmeden önce oluşturulan bir anahtar 403 insufficient_scope yanıtını alır. Bir anahtarın izinleri hiçbir zaman değişmez, bu yüzden yeni bir anahtar oluşturun.
API'nin iki uç noktası vardır: GET /v1/models ve POST /v1/chat/completions. /v1 altındaki diğer her yol 404 not_found yanıtını verir.
Modeller
GET /v1/models önce torun/auto modelini, ardından planınızın kullanabildiği her metin modelini model kimliğiyle listeler. Her model şunları belirtir:
- ne kadar metin okuyabildiğini (
context_length) ve ne uzunlukta bir yanıt yazabildiğini (max_completion_tokens), - araç çağırıp çağıramadığını (
supports_tools) ve görsel okuyup okuyamadığını (supports_vision), - milyon token başına Runs cinsinden fiyatını (
pricing:inputveoutput).
torun/auto, ToRun'un her istek için bir model seçmesini sağlar: istekte görsel varsa görsel okuyabilen, tools gönderiyorsa araç çağırabilen bir model.
Chat completions
POST /v1/chat/completions şunları kabul eder:
system,developer(systemolarak işlenir),user,assistantvetoolrolleriylemessages,toolsvetool_choice(auto,none,requiredya da adı verilen tek bir fonksiyon): aracınızın kendi araçları ona araç çağrısı olarak geri döner ve ToRun onları hiçbir zaman çalıştırmaz,json_objectileresponse_format.json_schemakabul edilir ve JSON olarak yanıtlanır, ancak şemanın kendisi zorunlu tutulmaz,temperature(0 ile 2 arası),top_p(0 ile 1 arası),max_completion_tokensveyamax_tokens,stop(en fazla 4 dizi),seedvereasoning_effort,streamvestream_options.include_usage.
1'den büyük n, logprobs, top_logprobs, ses ve metin dışındaki her çıktı yok sayılmak yerine 400 unsupported_parameter ile reddedilir.
Görseller
Bir görseli satır içi olarak, bir image_url parçasında data:image/...;base64,... biçiminde, istek başına en fazla 20 MB olarak gönderin. Bağlantı olarak gönderilen bir görsel 400 image_url_not_supported ile reddedilir: ToRun onu indirmez. Görseller, uygulamada olduğu gibi güvenlik denetiminden geçirilir.
Akış
"stream": true ile yanıt, chat.completion.chunk biçiminde sunucu tarafından gönderilen olaylar olarak gelir:
- İlk parça
assistantrolünü taşır ve araç çağrılarıindexdeğerleriyle akar. - Gönderilecek bir şey yokken her 15 saniyede bir
: keepaliveyorum satırı gelir; SSE ayrıştırıcıları bunu atlar. data: [DONE]başarılı bir akışı sonlandırır.stream_options.include_usageile son parçanınchoicesalanı boştur veusagetaşır.- Akış başladıktan sonraki bir hata tek bir
data: {"error": ...}olayı olarak gelir ve[DONE]gelmez.
Akış kullanılmayan bir çağrı 110 saniye sonra 504 timeout ile durdurulur. Uzun istekleri "stream": true ile gönderin.
Kullanım
usage; prompt_tokens, completion_tokens, total_tokens, prompt_tokens_details.cached_tokens ve completion_tokens_details.reasoning_tokens alanlarını, ayrıca çağrının Runs cinsinden maliyeti olan torun_credits alanını taşır.
opencode'da kullanın
Geliştiriciler sayfasındaki opencode yapılandırması, ToRun'u MCP sunucusunun yanında model sağlayıcısı olarak ekler:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"torun": {
"npm": "@ai-sdk/openai-compatible",
"name": "ToRun",
"options": { "baseURL": "https://mcp.torun.ai/v1", "apiKey": "{env:TORUN_API_KEY}" },
"models": { "torun/auto": { "name": "ToRun Auto" } }
}
}
}
OpenAI sohbet API'sini konuşan diğer her araç da aynı şekilde çalışır. Sayfanın OpenAI API sekmesi şu çağrıyı gösterir:
curl https://mcp.torun.ai/v1/chat/completions \
-H "Authorization: Bearer $TORUN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "torun/auto", "messages": [{"role": "user", "content": "Hello"}]}'
Çağrılar nasıl ödenir
API çağrıları, uygulamadaki aynı kullanımla aynı miktarda Runs tutar. Bunları yalnızca ücretli kaynaklar öder: önce ücretli planınızın payı, anahtarda buna izin verdiyseniz ardından cüzdanınız. Ücretsiz pay API çağrılarını hiçbir zaman ödemez. Anahtarın aylık ve günlük sınırları geçerlidir ve yanıtlar sohbet yanıtları gibi güvenlik denetiminden geçirilir.
Sınırlar
Her anahtar bu API'ye dakikada 60 istek gönderebilir ve aynı anda 4 tamamlama çalıştırabilir. Bunun üstünde API, Retry-After başlığıyla 429 rate_limit_exceeded yanıtını verir.
Hatalar
Her hata {"error": {"message": ..., "type": ..., "param": ..., "code": ...}} biçimindedir. message, isteğin Accept-Language başlığının istediği dildedir.
| Durum | Kod | Anlamı |
|---|---|---|
| 400 | invalid_json, missing_parameter, invalid_parameter, unsupported_parameter |
İstek hatalı biçimlendirilmiş ya da ToRun'un desteklemediği bir parametre kullanıyor. |
| 400 | image_url_not_supported |
Bir görsel bağlantı olarak gönderildi; satır içi gönderin. |
| 400 | content_blocked |
Güvenlik denetimi içeriği engelledi. |
| 400 | upstream_rejected |
Modelin sağlayıcısı isteği reddetti; mesaj nedenini söyler. |
| 401 | invalid_api_key |
Anahtar eksik, yanlış yazılmış ya da iptal edilmiş. |
| 402 | insufficient_credits, wallet_spend_not_allowed, spending_cap_reached |
Hesap ya da anahtar çağrının ücretini ödeyemiyor. |
| 403 | insufficient_scope |
Anahtar bu API eklenmeden önce oluşturuldu; yeni bir anahtar oluşturun. |
| 403 | model_not_available |
Model planınızda yok. |
| 403 | account_suspended, no_developer_access |
Hesap askıya alınmış ya da geliştirici erişimi yok. |
| 404 | model_not_found |
Model kimliği, GET /v1/models listesindekilerden biri değil. |
| 404 | not_found |
/v1 altında böyle bir yol yok. |
| 429 | rate_limit_exceeded |
Çok fazla çağrı; Retry-After içindeki süre kadar bekleyin. |
| 500 | internal_error |
ToRun tarafında bir şey başarısız oldu. |
| 502 | upstream_error, empty_reply |
Modelin sağlayıcısı başarısız oldu ya da boş bir yanıt gönderdi. |
| 503 | upstream_error, cap_unreadable, scan_unavailable |
Çağrının ihtiyaç duyduğu bir hizmet bir an için kullanılamıyor; tekrar deneyin. |
| 504 | timeout |
Akış kullanılmayan bir çağrı 110 saniyeyi aştı. |
Ödenemeyen bir istek 429 değil 402 yanıtını verir, böylece bir istemci onu yeniden denemeye devam etmez.