WHATOTP / DEVELOPERS

Fikrinden ilk isteğine.

Hesabını hazırla, bir model seç ve ilk yanıtını al. Metin tabanlı Chat Completions için çalıştırılabilir örnekler ve API referansı.

01. İlk isteğini gönder

  1. Hesabını oluştur ve e-posta adresini doğrula. Doğrulama e-postasını Ayarlar’dan tekrar isteyebilirsin.
  2. API Anahtarları ekranında bir anahtar oluştur; gösterildiğinde kopyala ve sunucunda WHATOTP_API_KEY ortam değişkenine kaydet.
  3. Node.js için npm install openai, Python için pip install openai komutuyla SDK’yı kur. cURL için SDK gerekmez.
Base URLhttps://whatotp.com/v1

SDK base URL değeri /v1 ile biter. Aşağıdaki adres bu kurulumun APP_URL ayarından gelir. Node.js örneğini hello-world.mjs dosyasına kaydedip node hello-world.mjs; Python örneğini python hello-world.py ile çalıştır.

cURL örnekleri Bash/zsh sözdizimi kullanır. PowerShell’de curl.exe kullan ve ortam değişkenine $env:WHATOTP_API_KEY ile eriş.

API anahtarlarına git
hello-world.mjs
import OpenAI from "openai";
const ai = new OpenAI({
apiKey: process.env.WHATOTP_API_KEY,
baseURL: "https://whatotp.com/v1",
maxRetries: 0
});
const response = await ai.chat.completions.create({
model: "auto",
messages: [{ role: "user", content: "Hello, world!" }]
});
console.log(response.choices[0]?.message.content);
OpenAI SDK ile tanıdık bir başlangıç

02. Kimlik doğrulama ve anahtarlar

Her API isteğinde Authorization: Bearer başlığını gönder. Tarayıcıdaki panel oturumu /v1 API anahtarının yerine geçmez. Anahtar yalnızca oluşturulurken gösterilir; sunucu ortam değişkeninde sakla.

Authorization: Bearer $WHATOTP_API_KEY

Anahtar oluşturma ve canlı model kullanımı standart hesaplarda doğrulanmış e-posta gerektirir. Anahtara son kullanma tarihi ve model kısıtları atanabilir. İptal edilen veya süresi dolan anahtar yeni isteklerde 401 döndürür; izin verilmeyen model 403 döndürür.

03. Modelini katalogdan seç

GET/v1/models

Yanıt { object: "list", data: [...] } biçimindedir. data içindeki id değerini model alanına yaz. Katalog etkin canlı modelleri listeler; boş data dizisi o anda listelenen canlı model olmadığını belirtir.

cURL · GET /v1/models
curl "https://whatotp.com/v1/models" -H "Authorization: Bearer $WHATOTP_API_KEY"

auto, anahtarının erişebildiği ilk etkin canlı modeli seçer; bir model başarısız olduğunda otomatik olarak diğerini denemez. Aynı modeli kullanmak istiyorsan açık bir katalog kimliği gönder. gpt-6-astra da bir public model takma adıdır; görünürlüğü yapılandırmaya bağlıdır.

Katalog anahtarın model izinlerine göre filtrelenmez ve başarılı yanıt garantisi değildir. Model kısıtları completion isteğinde uygulanır; sağlayıcı kotası veya geçici kesinti listelenen bir modeli etkileyebilir.

04. Chat Completions

POST/v1/chat/completions

Content-Type: application/json kullan. İstek gövdesinin tamamı en fazla 1.000.000 bayt olabilir. Üst düzeyde yalnızca aşağıdaki alanlar desteklenir; ek alanlar 400 döndürür.

AlanAçıklama
modelİsteğe bağlı metin, 1–200 karakter. Katalogdaki bir id veya auto. Varsayılan auto, anahtarın erişebildiği ilk etkin canlı modeli seçer.
messagesZorunlu, 1–2000 mesaj. Roller: system, developer, user, assistant, tool. content metin veya text bloklarıdır. Assistant tool_calls, tool mesajları tool_call_id taşır.
tools / tool_choice / parallel_tool_callsFunction araç tanımları; auto, none, required veya adlandırılmış araç seçimi; paralel çağrı tercihi. Araçları istemci çalıştırır, sağlayıcı/model tool calling desteklemelidir.
top_p / stop / max_completion_tokensÖrnekleme, durdurma dizileri ve alternatif çıktı bütçesi. Modelin desteklediği alanları kullan.
response_format / seed / n / usertext, json_object veya json_schema çıktı biçimi; seed; yalnızca n=1; kullanıcı etiketi. Sağlayıcı desteğine bağlıdır.
presence_penalty / frequency_penaltyİsteğe bağlı, -2 ile 2 arasında tekrar cezaları.
streamİsteğe bağlı boolean; varsayılan false. true olduğunda SSE akışı döner.
stream_optionsİsteğe bağlı { include_usage: boolean }. Akışta kullanım bilgisi istemek için { include_usage: true } gönder. Bilginin gelmesi sağlayıcıya bağlıdır.
temperatureİsteğe bağlı, 0–2 arasında sayı. Seçilen modelin desteklediği değerler daha sınırlı olabilir.
max_tokensİsteğe bağlı pozitif tam sayı. Varsayılanı ve gerçek çıktı sınırını sağlayıcı belirler; düşünme token’ları bu bütçeyi tüketebilir.

Konuşma geçmişini her istekte messages dizisine ekle; API önceki mesajları senin yerine hatırlamaz. Metin yanıtını choices[0].message.content alanından oku.

Örnek yanıt · model ve kullanım değerleri temsilidir
{
  "id": "req_example",
  "created": 1789257600,
  "object": "chat.completion",
  "model": "gpt-6-astra",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello!"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 3,
    "total_tokens": 15
  }
}

finish_reason: length çıktı bütçesine ulaşıldığını belirtir. content boş veya null olabilir; HTTP 200 tek başına kullanılabilir metin garantisi değildir. usage sağlayıcı döndürdüğünde bulunur.

05. Yanıtı akışta al

stream: true ile yanıt text/event-stream (SSE) biçiminde gelir. data: olaylarındaki choices[0].delta.content parçalarını birleştir. usage olayında choices boş olabilir; her olayın metin içerdiğini varsayma.

stream.mjs
import OpenAI from "openai";
const ai = new OpenAI({
apiKey: process.env.WHATOTP_API_KEY,
baseURL: "https://whatotp.com/v1",
maxRetries: 0
});
const response = await ai.chat.completions.create({
model: "auto",
messages: [{ role: "user", content: "Hello, world!" }],
stream: true,
stream_options: { include_usage: true }
});
try {
for await (const chunk of response) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
if (chunk.usage) console.error(chunk.usage);
}
} catch (error) {
console.error("Stream failed:", error);
} finally {
response.controller.abort();
}
OpenAI SDK ile tanıdık bir başlangıç

Ham SSE akışında [DONE] tamamlanma işaretidir. error içeren olayları ve bağlantı kesilmelerini hata olarak işle; ilk HTTP 200’den sonra da akış başarısız olabilir. SDK iterator’ını try/catch ile tüket ve yarım yanıtı tamamlanmış gibi gösterme.

Node.js’te response.controller.abort(), Python’da response.close() ile üretimi iptal edebilirsin. Kullanıcı sayfadan ayrıldığında bağlantıyı kapat. Ağ parçaları SSE olay sınırlarıyla aynı olmayabilir; ham istemcide olayları tamponlayarak ayrıştır.

06. Limitler ve kullanım kayıtları

  • Kullanıcı başına dakikada 15 completion isteği ve en fazla 2 eşzamanlı istek; tüm uygulama için en fazla 20 eşzamanlı istek. Aynı kullanıcının anahtarları ve Playground kullanımı bu limitleri paylaşır.
  • Sağlayıcı/model limitleri daha düşük olabilir ve kullanıcılar arasında paylaşılabilir. Bu sürümde platform günlük istek/token kotası veya kullanım ücreti uygulamaz.
  • Örneklerde SDK otomatik yeniden denemeleri kapalıdır. 429 için varsa Retry-After değerini bekle; değer saniye veya HTTP tarihi olabilir. Yeniden denemeler de kapasite tüketir.

Varsa X-Request-Id başlığını destek talebine ekle. İstek geçmişinde model, durum, süre ve token kullanımı görünür; ≈ tahmini kullanım demektir. Sağlayıcı kullanım vermediğinde panel tahmin hesaplayabilir; API yanıtına her zaman usage eklenmez. Erken doğrulama/yetkilendirme hataları geçmişe yazılmayabilir.

Servis durumunu kontrol et

07. Hataları tanı ve işle

Örnek hata yanıtı
{
  "error": {
    "message": "Invalid or revoked API key",
    "type": "authentication_error",
    "code": "invalid_api_key"
  }
}
HTTPKod / yapılacak işlem
400invalid_request / model_not_found

JSON biçimini, desteklenen alanları ve katalogdaki model kimliğini kontrol et.

401invalid_api_key / unauthorized

Anahtar eksik, geçersiz, süresi dolmuş veya iptal edilmiş olabilir; hesap aktif olmalı.

403email_verification_required / model_access_denied

E-postanı doğrula veya anahtarın izin verilen modellerinden birini seç.

413body_too_large

İstek gövdesini 1.000.000 bayt veya altına indir.

429rate_limited / concurrency_limit / upstream_error

İstek hızını veya eşzamanlılığı azalt. Varsa Retry-After başlığını uygula; yoksa artan gecikmeyle sınırlı sayıda yeniden dene.

499provider_unavailable

İstemci isteği iptal etti. Bağlantı kapandığından bu kod HTTP yanıtı yerine istek geçmişinde görülebilir.

502upstream_error / provider_unavailable

Sağlayıcı hata döndürdü, erişilemedi veya geçersiz yanıt/akış gönderdi. İlk sağlayıcı durum kodu 503 olsa da API bunu 502 olarak döndürebilir.

503model_unavailable / provider_not_configured / gateway_unavailable / service_unavailable

Uygun canlı model yok, model kapalı veya model keşfi/servis kullanılamıyor. Kataloğu ve durum sayfasını kontrol et.

504provider_timeout

Sağlayıcı zaman sınırında tamamlamadı. Daha kısa bir istek veya başka bir model dene.

Canlı bağlantı yoksa Playground etiketli demo sunabilir; public completion API demo yanıtı üretmez ve 503 döndürür. Durum sayfasındaki ölçümler geçmiş gözlemlerdir.

08. SDK uyumluluğu ve kapsam

GET /v1/models, POST /v1/chat/completions, POST /v1/messages, POST /v1/messages/count_tokens ve POST /v1/responses kullanılabilir. Üç üretim protokolü metin, function araç çağrıları, araç sonuçları ve SSE destekler. Araçlar istemcide çalışır; seçilen sağlayıcı da tool calling desteklemelidir.

Adaptör kapsamı: metin ve function araçları. Görseller, dosyalar, sunucu tarafı araçlar, extended thinking ve kalıcı Responses oturumları desteklenmez. Responses için store=false kullan ve tüm geçmişi input ile gönder; previous_response_id desteklenmez. Reasoning/verbosity tercihleri Chat Completions’a aktarılmaz. Token sayımı tahminidir (X-WhatOTP-Token-Count: estimated). Sağlayıcı adları yalnızca yanıt metninde değiştirilebilir; araç adları ve JSON argümanları korunur.

Entegrasyon için destek al

09. OpenCode, Claude Code ve Codex’e custom API nasıl eklenir?

Custom API kurulumu üç bilgiyle başlar: servis adresi (base URL), API anahtarı ve model kimliği. Bu rehber, terminalde veya editörünün entegre terminalinde kullandığın kodlama araçlarına bu bilgileri nasıl tanıtacağını gösterir.

Protokol adaptörleri WhatOTP’ye dahildir; aynı WhatOTP anahtarıyla doğrudan bağlan. Metin ve araç çağrısı akışları otomatik testlerle doğrulanır; gerçek istemci/model uyumluluğu seçilen sağlayıcının araç desteğine bağlıdır. Claude Code’da extended thinking’i kapat; Codex’te tüm konuşma geçmişini gönderen stateless kullanım seç.

AraçGereken protokolBu API ile durum
OpenCodeChat Completions/v1/chat/completions · tools + streaming
Claude CodeAnthropic Messages/v1/messages · tool_use + tool_result
CodexOpenAI Responses/v1/responses · function_call + function_call_output

Ön hazırlık: anahtarını ve modelini doğrula

  1. E-postanı doğrula ve panelde API Anahtarları bölümünden bir anahtar oluştur.
  2. Aşağıdaki YOUR_WHATOTP_API_KEY yer tutucusunu kendi anahtarınla değiştir. Bu değişkenler yalnızca açık terminal oturumunda geçerlidir; aracı aynı terminalden başlat.
  3. Modelleri listele. İlk bağlantı kontrolünde auto kullanabilirsin; sabit model için data içindeki ve anahtarının izin verdiği bir id seç.
macOS / Linux · Bash / zsh
export WHATOTP_API_KEY="YOUR_WHATOTP_API_KEY"
export WHATOTP_BASE_URL="https://whatotp.com/v1"
curl "$WHATOTP_BASE_URL/models" \
  -H "Authorization: Bearer $WHATOTP_API_KEY"
Windows · PowerShell
$env:WHATOTP_API_KEY = "YOUR_WHATOTP_API_KEY"
$env:WHATOTP_BASE_URL = "https://whatotp.com/v1"
Invoke-RestMethod -Uri "$env:WHATOTP_BASE_URL/models" -Headers @{
  Authorization = "Bearer $env:WHATOTP_API_KEY"
}

Base URL /v1 ile biter; sonuna /chat/completions ekleme. Yerel kurulumda http://localhost:3000/v1 kullanılır. OpenCode’daki whatotp/auto seçiminde whatotp yerel sağlayıcı adıdır; API’ye gönderilen model yalnızca auto olur. Model listesinin gelmesi, metin üretiminin veya araç çağrılarının çalıştığını kanıtlamaz.

İlk bağlantı testi: kısa bir kod açıklaması iste

Aynı terminalde aşağıdaki isteği çalıştır. Başarılı yanıtta choices[0].message.content içinde metin görmelisin. Bu kontrol, editör ayarlarına geçmeden WhatOTP anahtarının ve metin üretiminin çalıştığını doğrular.

Bash / zsh · POST /v1/chat/completions
curl "$WHATOTP_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $WHATOTP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","messages":[{"role":"user","content":"Explain JavaScript Array.map in two sentences."}]}'
PowerShell · POST /v1/chat/completions
$body = @{
  model = "auto"
  messages = @(@{
    role = "user"
    content = "Explain JavaScript Array.map in two sentences."
  })
} | ConvertTo-Json -Depth 5
$response = Invoke-RestMethod -Method Post -Uri "$env:WHATOTP_BASE_URL/chat/completions" -Headers @{
  Authorization = "Bearer $env:WHATOTP_API_KEY"
} -ContentType "application/json" -Body $body
$response.choices[0].message.content

10. OpenCode: özel sağlayıcı tanımlama

OpenCode kurulu değilse Node.js/npm bulunan terminalde aşağıdaki komutla kur. Ardından projenin kökünde opencode.json oluştur veya mevcut dosyadaki ayarlarla birleştir. Tüm projeler için kullanıcı dosyası ~/.config/opencode/opencode.json; Windows’ta $HOME/.config/opencode/opencode.json konumudur.

OpenCode kurulumu
npm install -g opencode-ai
opencode.json · Chat Completions
{
  "$schema": "https://opencode.ai/config.json",
  "model": "whatotp/auto",
  "small_model": "whatotp/auto",
  "provider": {
    "whatotp": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "WhatOTP",
      "options": {
        "baseURL": "https://whatotp.com/v1",
        "apiKey": "{env:WHATOTP_API_KEY}"
      },
      "models": {
        "auto": {
          "name": "WhatOTP Auto"
        }
      }
    }
  }
}
  1. WHATOTP_API_KEY değişkeninin tanımlı olduğu terminalde opencode çalıştır.
  2. /models komutunu aç ve WhatOTP Auto seç. Listede görünmesi yapılandırmanın yüklendiğini gösterir.
  3. Belirli bir model için models içindeki auto anahtarını katalogdaki id ile değiştir; model ve small_model değerlerini de whatotp/MODEL_ID yap.

@ai-sdk/openai-compatible paketi Chat Completions protokolünü seçer. {env:WHATOTP_API_KEY} ifadesini dosyada aynen bırak; OpenCode değeri ortamdan okur. Anahtarı JSON içine yazman veya ayrıca /connect kullanman gerekmez.

tools, tool_choice, paralel araç çağrıları ve tool mesajları desteklenir. Dosya ve terminal işlemlerini OpenCode kendi ortamında yürütür; WhatOTP araç çağrısını ve sonucunu modele taşır. Araç desteği olan bir model seç ve küçük bir dosya okuma göreviyle bağlantını doğrula.

OpenCode özel sağlayıcı referansı

11. Claude Code: gateway üzerinden bağlantı

Claude Code’un Anthropic Messages istekleri yerleşik /v1/messages adaptöründe Chat Completions’a dönüştürülür. ANTHROPIC_BASE_URL için WhatOTP kök adresini kullan; istemci /v1/messages yolunu ekler.

Claude Code’u resmi rehberden kur. WhatOTP anahtarını ve araç desteği olan katalog modelini seç. auto ilk erişilebilir modeli seçer; belirli bir modeli sabitlemek daha tutarlıdır.

Bash / zsh · WhatOTP
export ANTHROPIC_BASE_URL="https://whatotp.com/"
export ANTHROPIC_AUTH_TOKEN="YOUR_WHATOTP_API_KEY"
export ANTHROPIC_MODEL="auto"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="auto"
export ANTHROPIC_DEFAULT_SONNET_MODEL="auto"
export ANTHROPIC_DEFAULT_OPUS_MODEL="auto"
export MAX_THINKING_TOKENS="0"
claude --model "$ANTHROPIC_MODEL"
PowerShell · WhatOTP
$env:ANTHROPIC_BASE_URL = "https://whatotp.com/"
$env:ANTHROPIC_AUTH_TOKEN = "YOUR_WHATOTP_API_KEY"
$env:ANTHROPIC_MODEL = "auto"
$env:ANTHROPIC_DEFAULT_HAIKU_MODEL = "auto"
$env:ANTHROPIC_DEFAULT_SONNET_MODEL = "auto"
$env:ANTHROPIC_DEFAULT_OPUS_MODEL = "auto"
$env:MAX_THINKING_TOKENS = "0"
claude --model $env:ANTHROPIC_MODEL

Yerel kök adres http://localhost:3000 olur. Authorization: Bearer ve x-api-key başlıkları kabul edilir. Yardımcı model değişkenlerini de katalogdaki modele yönlendir. Extended thinking’i istemci ayarlarında da kapat.

Metin, tool_use, tool_result, paralel araçlar ve SSE olayları desteklenir. Görsel/PDF blokları, sunucu araçları ve extended thinking desteklenmez. cache_control ipuçları önbellek garantisi vermez. count_tokens yaklaşık sayım döndürür.

VS Code eklentisinde aynı gateway’i kullan

VS Code’da Preferences: Open User Settings (JSON) komutunu aç ve ayarları birleştir. Kendi anahtarını ve modelini yazıp eklentiyi yeniden başlat. value alanları kabuk değişkenlerini otomatik çözmez.

VS Code · settings.json · WhatOTP
{
  "claudeCode.environmentVariables": [
    {
      "name": "ANTHROPIC_BASE_URL",
      "value": "https://whatotp.com/"
    },
    {
      "name": "ANTHROPIC_AUTH_TOKEN",
      "value": "YOUR_WHATOTP_API_KEY"
    },
    {
      "name": "ANTHROPIC_MODEL",
      "value": "auto"
    },
    {
      "name": "ANTHROPIC_DEFAULT_HAIKU_MODEL",
      "value": "auto"
    },
    {
      "name": "ANTHROPIC_DEFAULT_SONNET_MODEL",
      "value": "auto"
    },
    {
      "name": "ANTHROPIC_DEFAULT_OPUS_MODEL",
      "value": "auto"
    },
    {
      "name": "MAX_THINKING_TOKENS",
      "value": "0"
    }
  ]
}

CLI’de /status komutuyla Anthropic base URL ve kimlik doğrulama kaynağını kontrol et, ardından kısa bir mesaj gönder. Gateway yalnızca x-api-key başlığını kabul ediyorsa ANTHROPIC_AUTH_TOKEN yerine ANTHROPIC_API_KEY kullan; AUTH_TOKEN, Authorization: Bearer başlığını gönderir.

12. Codex: custom provider ayarları

Codex için wire_api = "responses" kullan. WhatOTP’nin /v1/responses adaptörü metin, function_call, function_call_output ve streaming olaylarını Chat Completions sağlayıcısına bağlar.

Codex CLI kurulumu
npm install -g @openai/codex

Kullanıcı dosyan ~/.codex/config.toml; Windows’ta $HOME/.codex/config.toml. model ve model_provider satırlarını tablo başlıklarından önce yerleştir. Araç çağrısı destekleyen bir katalog modeli seç.

~/.codex/config.toml · WhatOTP Responses
model = "auto"
model_provider = "whatotp"
disable_response_storage = true

[model_providers.whatotp]
name = "WhatOTP"
base_url = "https://whatotp.com/v1"
env_key = "WHATOTP_API_KEY"
wire_api = "responses"
macOS / Linux · Bash / zsh
export WHATOTP_API_KEY="YOUR_WHATOTP_API_KEY"
codex
Windows · PowerShell
$env:WHATOTP_API_KEY = "YOUR_WHATOTP_API_KEY"
codex

Codex base_url üzerine /responses ekler. env_key ortam değişkeninin adıdır. Adaptör stateless çalışır: store=false ve tüm input geçmişi gerekir. previous_response_id, sunucu tarafı compaction, özel custom araç türleri ve WebSocket taşıması desteklenmez; HTTP/SSE ve function araçlarını kullan.

IDE eklentisi kullanıyorsan kullanıcı yapılandırmasını açıp aynı sağlayıcıyı seç; eklentiyi çalıştıran editör süreci de ortam değişkenini görmelidir. Değişkeni açık bir editörün terminalinde tanımlamak, zaten çalışan eklentiye aktarmaz. Uygulamayı tamamen kapatıp değişkenin tanımlı olduğu terminalden yeniden başlat.

Codex güncel yapılandırma referansı

13. Kurulumu kontrol et ve sorunları çöz

Önce hızlı başlangıçtaki basit metin isteğini çalıştır, sonra aracın yapılandırmasını kontrol et. Böylece anahtar/model hatasını protokol uyumsuzluğundan ayırabilirsin. Bir ajanın yalnızca açılması veya modeli listelemesi başarılı entegrasyon anlamına gelmez.

  • 401 / 403: Anahtarın süresini, e-posta doğrulamasını, model izinlerini ve ortam değişkeninin doğru süreçte tanımlandığını kontrol et. Gateway kullanıyorsan istemci → gateway ve gateway → WhatOTP anahtarları farklı olabilir.
  • 404 veya HTML yanıtı: Claude Code kök adresi, OpenCode/Codex /v1 adresi kullanır. /v1/v1 gibi yinelenen yolları kontrol et.
  • 400 invalid_request: Görsel, extended thinking, custom araç türü veya kalıcı Responses geçmişi gibi desteklenmeyen bir özellik gönderilmiş olabilir. Metin/function araç kapsamını ve istemci ayarlarını kontrol et.
  • Model görünmüyor: OpenCode models kaydını ve sağlayıcı/model kimliğini kontrol et. Gateway’deki görünen model adı, WhatOTP’nin upstream kimliğinden farklı olabilir.
  • 429 / 503: Eşzamanlı istekleri azalt, Retry-After varsa bekle ve durum sayfasını kontrol et. Ajanların yardımcı istekleri de kullanıcı limitini paylaşır.

Örneklerin yapılandırma kaynakları 13 Eylül 2026 tarihinde kontrol edildi. Araç sürümleri değiştikçe yukarıdaki resmi referansları esas al. Şu an desteklenen bağlantıyı doğrulamak için Node.js, Python veya cURL Chat Completions örneklerini kullan.

Çalıştırılabilir API örneklerine dön