Web araması (Keenable)
İnternette arama yapın ve sayfaları doğrudan kodunuzdan okuyun — modellerde kullandığınız anahtarın aynısıyla. İki yolu var: /v1/chat/completions üzerinden sıradan bir model gibi ya da saf JSON döndüren kendi uç noktalarıyla.
Ne kadar tutuyor
İstek başına 0,005 $ — yani 1000 istek için 5 $.
Ücret çağrı başınadır: bir çağrı bir istektir, kaç sonuç dönerse dönsün. 50 kaynak bulmak, tek kaynak bulmakla aynı fiyata gelir.
Başarısız istekler ücretlendirilmez — ne aramanın arızası ne de hatalı parametreler.
| ne | şu kadar sayılır |
|---|---|
| 1 sonuç dönen arama | 1 istek |
| 50 sonuç dönen arama | 1 istek |
| bir sayfayı okumak | 1 istek |
| her türlü hata | 0 |
Yol 1 — model olarak
Cursor, Claude Code, OpenCode ve herhangi bir OpenAI istemcisinde tek bir değişiklik yapmadan çalışır: modeli seçmeniz yeter.
Modeller:
| model | ne yapar |
|---|---|
keenable/search | internette arar, alıntılarla birlikte kaynak listesi döndürür |
keenable/read | bir sayfayı okur ve metnini markdown olarak döndürür |
Arama
curl https://nordrouter.com/v1/chat/completions \
-H "Authorization: Bearer $NORDROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "keenable/search",
"messages": [{"role": "user", "content": "bugün bitcoin kuru"}]
}'Karşılığında kaynak listesini içeren sıradan bir asistan mesajı gelir: başlık, yayın tarihi, tam adres ve her biri için bir alıntı.
Bir sayfayı okumak
Mesajın ilk kelimesi adrestir. Ardından o sayfada tam olarak neyle ilgilendiğinizi ekleyebilirsiniz.
curl https://nordrouter.com/v1/chat/completions \
-H "Authorization: Bearer $NORDROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "keenable/read",
"messages": [{"role": "user", "content": "https://tr.wikipedia.org/wiki/Tokyo nüfus sayısı"}]
}'Açıklama olmadan sayfanın tamamını markdown olarak alırsınız. Açıklamayla yalnızca istediğinizi: sonuç bir modele gidiyorsa bu hem daha hızlı hem de sizin tarafınızda tokenlar açısından belirgin biçimde daha ucuzdur.
Açıklama ne işe yarar
Bir Vikipedi maddesi on binlerce karakterdir. Size tek bir sayı gerekiyorsa açıklama hem zaman hem de sonraki adımın tokenlarını kazandırır.
Python
from openai import OpenAI
client = OpenAI(
api_key="anahtarınız",
base_url="https://nordrouter.com/v1",
)
found = client.chat.completions.create(
model="keenable/search",
messages=[{"role": "user", "content": "bu haftanın yapay zeka haberleri"}],
)
print(found.choices[0].message.content)Yol 2 — kendi uç noktaları
Düz metin yerine alanlar, tarihler ve filtrelerle sonuç gerekiyorsa JSON'u kullanın.
POST /v1/search
curl https://nordrouter.com/v1/search \
-H "Authorization: Bearer $NORDROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "yapay sinir ağları haberleri",
"max_results": 5,
"published_after": "7d"
}'Parametreler:
| parametre | tür | varsayılan | ne yapar |
|---|---|---|---|
query | metin | zorunlu | ne aranacak |
site | metin | — | yalnızca bu alan adında ara, örneğin hurriyet.com.tr |
max_results | sayı | 10 | kaç sonuç, 1 ile 50 arası |
snippet_max_chars | sayı | — | alıntı uzunluğu, 180 ile 10 000 karakter arası |
published_after | metin | — | bu andan sonra yayımlanan içerik |
published_before | metin | — | daha önce yayımlanan |
acquired_after | metin | — | dizine daha sonra girenler |
acquired_before | metin | — | dizine daha önce girenler |
query_time | metin | — | dizinde o andaki haliyle ara |
Tarihler üç biçimde kabul edilir: 2026-08-01, tam ISO 8601 zaman damgası veya göreli olarak — 30min, 12h, 7d, 3mo, 1y.
Yayın ile dizin aynı şey değildir
published_* içeriğin kendi tarihine göre süzer, acquired_* ise sayfanın dizine girdiği tarihe göre. Fark önemlidir: bir sayfa, yayın tarihine dokunulmadan yeniden yazılmış olabilir. «Son 24 saatte ağda ne çıktı» diye bakıyorsanız acquired_after kullanın.
Yanıt:
{
"query": "yapay sinir ağları haberleri",
"count": 5,
"results": [
{
"title": "Makale başlığı",
"url": "https://example.com/article",
"description": "Kısa açıklama",
"snippet": "Sayfa metninden bir alıntı…",
"published_at": "2026-08-25T10:30:00Z",
"acquired_at": "2026-08-25T11:02:00Z"
}
]
}GET /v1/fetch
curl -G https://nordrouter.com/v1/fetch \
-H "Authorization: Bearer $NORDROUTER_KEY" \
--data-urlencode "url=https://example.com/article" \
--data-urlencode "prompt=fiyat tablosunu çıkar"Parametreler:
| parametre | tür | varsayılan | ne yapar |
|---|---|---|---|
url | metin | zorunlu | sayfanın adresi |
max_chars | sayı | 50 000 | kaç karakter döndürülecek |
prompt | metin | — | tam olarak neyin çıkarılacağı, 2000 karaktere kadar |
live | true / false | false | dizin yerine doğrudan siteden al |
Yanıt:
{
"url": "https://example.com/article",
"title": "Başlık",
"description": "Açıklama",
"author": "Yazar",
"content": "# Sayfa metni markdown olarak…",
"published_at": 1787777084
}live ne zaman gerekir
Dizinden sayfa daha hızlı gelir ama dizinde her şey yoktur. Sayfa yeniyse ya da tarayıcılara kapalıysa live=true verin — o zaman doğrudan siteden okunur. Fiyatı aynıdır.
Sınırlar
| hız | anahtar başına saniyede 2 istek |
| alıntı uzunluğu | 180 ile 10 000 karakter arası |
| çağrı başına sonuç | 50'ye kadar |
| okuma açıklamasının uzunluğu | 2000 karaktere kadar |
Hızı aşmak Retry-After başlığıyla 429 döndürür — bir saniye sonra yineleyin.
Hatalar
| kod | ne demek | ne yapmalı |
|---|---|---|
400 | query ya da url eksik veya adreste http:// yok | isteği düzeltin |
401 | anahtar kabul edilmedi | Authorization başlığını kontrol edin |
402 | bakiye bitti | panelden yükleyin |
429 | çok sık | bir saniye sonra yineleyin |
502 | arama yanıt vermedi | yineleyin; ücret alınmadı |
503 | arama geçici olarak kullanılamıyor | ilgileniyoruz; ücret alınmadı |
Sık sorulanlar
Boş sonuç ücretlendirilir mi? Evet, arama çalıştıysa ve dürüstçe «bir şey bulunamadı» dediyse — iş yapılmıştır. Yalnızca hatalar ücretsizdir.
Akış (streaming) yapılabilir mi? Hayır ve gerek de yok: sonuçlar saniyenin kesrinde tek parça hâlinde gelir.
Tokenlar sayılıyor mu? Fiyat çağrı başınadır, tokenların bir etkisi yoktur. Yine de model yanıtında gösterilirler ki istemci kütüphaneleri yanıtı boş sanmasın.
search/… modellerinden farkı ne? Onlar önce arar, sonra bulduğunu bir dil modeliyle yanıtlar — iki iş için ödeme yaparsınız. Burada ham sonuçları alır, onlarla ne yapacağınıza kendiniz karar verirsiniz.