prompterdokümanlar

prompter API

Dokuz yapay zekâ platformundan birine tek bir soru sorun ve ham yanıtı geri alın; platform native atıf sağlıyorsa onlarla birlikte. prompter durumsuzdur: her çağrı gerçek, canlı bir upstream isteğidir.

Genel bakış

prompter küçük bir REST API sunar. Bir prompt ve bir platform gönderirsiniz, prompter o platformu çağırır ve değiştirilmemiş yanıtı döndürür. Asla özetlemez ya da veri uydurmaz: bir platform yanıt veremiyorsa yanıt bunu açıkça söyler.

Base URL

base url
https://api.prompter.searchestra.com

Kurallar

  • Tüm istek ve yanıt gövdeleri application/json'dur.
  • Başarılı okumalar üst düzey bir data alanı döndürür. Hatalar üst düzey bir error alanı döndürür (bkz. Hatalar).
  • Her /v1/* uç noktası X-API-Key başlığını ister. /healthz istemez.
  • Zaman damgaları UTC ve ISO 8601'dir (örneğin 2026-08-16T13:47:09Z).
Dürüstlük ilkesi. 4xx'te hata mesajı gerçek ve açıktır. 5xx'te (500 ve 503) mesaj her zaman sabit bir metne maskelenir; gerçek sebep yalnızca prompter'ın sunucu loglarındadır.

Hızlı başlangıç

İlk sorgunuzu gönderin. prsk_your_key'i run iznini taşıyan bir anahtarla değiştirin (bkz. Kimlik doğrulama).

istekcurl
curl -X POST https://api.prompter.searchestra.com/v1/collect \
  -H "X-API-Key: prsk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "perplexity",
    "promptText": "en iyi bulaşık deterjanı hangisi, kısaca söyle",
    "countryCode": "tr",
    "language": "tr"
  }'
yanıt200
{
  "data": {
    "rawText": "Türkiye'de en çok tercih edilenler arasında Finish ve Fairy...",
    "rawHtml": "",
    "citations": [
      { "url": "https://example.com/inceleme", "title": "En iyi deterjan", "position": 1 }
    ],
    "textLinks": [],
    "collectedAt": "2026-08-16T13:47:09Z"
  }
}

Kimlik doğrulama

Her /v1/* isteği X-API-Key başlığında bir API anahtarı taşımalıdır. İki tür anahtar vardır; her birinin kendi öneki bulunur.

ÖnekTürBağlı olduğuKullanım
prsk_servicebir kaynak (tenant, workspace ya da project)makine-makine erişim. Anahtarı üreten kişi ayrılsa bile çalışmaya devam eder.
pruk_userbir kişinin üyeliğibir kişinin kendi adına çalıştırdığı betikler. O kişi erişimini kaybettiği an geçersiz olur.
başlık
X-API-Key: prsk_your_key

Kapsam

Her anahtar tam olarak tek bir kaynağa kapsanır: bir tenant, bir workspace ya da bir project. Anahtar yalnızca o kaynağın içinde iş yapabilir. Bir project anahtarı başka bir project'e dokunamaz; bir workspace anahtarı kendi workspace'inin dışına çıkamaz.

İzinler

Her anahtar açık bir izin kümesi taşır. Bugün üç izin vardır; her uç hangisini istediğini belirtir.

İzinSağladığı
runCanlı sorgu çalıştırma (POST /v1/collect). Bu izni olmayan anahtar 403 forbidden alır.
readSaklanan kaynakları okuma; örneğin projeleri listeleme.
manageAnahtarın kapsamında proje oluşturma, düzenleme ve silme.

User anahtarında izinler ayrıca o kişinin kapsamdaki rolüyle sınırlanır. Bir izleyiciye manage vermek yine de yönetemeyen, run vermek yine de çalıştıramayan bir anahtar üretir.

Sunucu yalnızca anahtarın SHA-256 hash'ini saklar. Ham değer yalnızca üretim anında bir kez gösterilir ve kurtarılamaz. Anahtar kaybolursa yeni bir tane üretin. Bir kaynak birden çok anahtar tutabilir; birini iptal etmek diğerlerini etkilemez. Anahtarlar isteğe bağlı bir son kullanma tarihi de taşıyabilir.

Anahtar edinme. Anahtarları panelden kendiniz oluşturursunuz: service anahtarlarını bir project'in ya da workspace'in ayarlarından, kişisel anahtarları hesabınızdan. Eksik, iptal edilmiş ya da süresi dolmuş anahtar 401 unauthorized; gereken izne sahip olmayan anahtar 403 forbidden döndürür.

Bir platforma sor

POST/v1/collect

Tek-çağrı kısayolu: tek bir platforma, bir proje altında, tek soru sorar ve saklanan çalıştırmayı döndürür. İçeride promptu kaydeder (projede aynı metin varsa onu yeniden kullanır) ve çalıştırır; böylece yanıt gerçek maliyetiyle saklanır ve projeye atfedilir. prompt kaydet + çalıştır adımlarının kolaylık sarmalayıcısıdır.

Proje ve izin. Her çağrı bir proje çözer: project-kapsamlı anahtar projeyi kapsamından alır (projectId göndermeyin); tenant/workspace anahtarı ya da panel oturumu projectId göndermeli ve anahtarın kapsamı onu kapsamalı (kapsam dışı → 404). run izni gerekir. Ülke ve dil istekten değil, projeden alınır.

İstek gövdesi

AlanTipNot
platform zorunlustringDokuz koddan biri (bkz. Platformlar).
promptText zorunlustringSorulacak soru. Kırpılır; boş olamaz.
projectId koşullustringAnahtar project-kapsamlı değilse zorunlu. Çalıştırmanın saklanacağı proje; anahtarın kapsamı onu kapsamalı.
istekcurl
curl -X POST https://api.prompter.searchestra.com/v1/collect \
  -H "X-API-Key: prsk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "platform": "perplexity", "promptText": "en iyi bulaşık deterjanı hangisi" }'

Yanıt data (tek çalıştırma)

Tek bir saklanan çalıştırma döner: id, promptId, projectId, platform, status (ok/error), answerText, citations, textLinks ve gerçek maliyet alanları (costEstimate, model, inputTokens, outputTokens).

yanıt201
{
  "data": {
    "id": "run_…", "promptId": "prm_…", "projectId": "prj_…", "platform": "perplexity",
    "status": "ok", "answerText": "Türkiye'de en çok tercih edilenler arasında Finish ve Fairy…",
    "citations": [ { "url": "https://example.com/inceleme", "title": "En iyi deterjan", "position": 1 } ],
    "textLinks": [], "costEstimate": 0.0041, "model": "sonar", "createdAt": "2026-08-31T13:47:09Z"
  }
}
citations ve textLinks. citations sağlayıcının native kaynaklarıdır. textLinks modelin metnine yazdığı linklerdir. Farklı sıralama sistemleri kullanırlar; bu yüzden pozisyona göre değil URL üzerinden ilişkilendirin.

Platformları listele

GET/v1/platforms

Kayıtlı platformların sabit listesini döndürür. Kimlik bilgisi yapılandırılmamış bir platform da burada görünür; yalnızca gerçek bir /v1/collect çağrısında başarısız olur. Bunu bir kez çekip kendi tarafınızda önbelleğe alın.

yanıt200
{
  "data": [
    { "code": "chatgpt", "unsupportedCountries": [] },
    { "code": "perplexity", "unsupportedCountries": null }
  ]
}

unsupportedCountries ya boş dizi ya da null'dur; ikisi de "kısıt yok" demektir. İkisini aynı şekilde ele alın.

Sağlık kontrolü

GET/healthz

Konteyner orkestrasyonu için liveness probe. Kimlik doğrulama gerektirmez. Servis ayaktayken 200 döner.

Projeler

Bir proje, markanızı bir pazarla (ülke ve dil) eşler; promptlar ve çalıştırmalar onun altında yaşar. Bu uçlar bir makine anahtarının proje yönetmesini sağlar, böylece markaları kendi sistemlerinizden hazırlayabilirsiniz. Hem panel oturumunu (JWT) hem bir API anahtarını kabul ederler.

Erişimi kapsam belirler. tenant anahtarı tenant'taki her projeyi yönetir. workspace anahtarı kendi workspace'iyle sınırlıdır. project anahtarı yalnızca kendi projesini düzenleyip silebilir; listeleme ya da oluşturma yapamaz. Kapsam dışında iş görmek 404 not_found döndürür (kaynak reddedilmez, gizlenir).

Projeleri listele

GET/v1/workspaces/{workspaceId}/projects

Bir workspace'in projelerini listeler. read izni ve kapsamı workspace'i kapsayan bir anahtar (tenant ya da o workspace) gerekir.

yanıt200
{
  "data": [
    { "id": "prj_…", "workspaceId": "wsp_…", "name": "Acme", "slug": "acme", "countryCode": "tr", "language": "tr" }
  ]
}

Proje oluştur

POST/v1/workspaces/{workspaceId}/projects

Bir workspace altında proje oluşturur. manage izni ve tenant- ya da workspace-kapsamlı bir anahtar gerekir (project-kapsamlı anahtar oluşturamaz, 403 forbidden alır).

İstek gövdesi

AlanTipNot
name zorunlustringGörünen ad. Slug bundan türetilir ve workspace içinde benzersizleştirilir.
countryCode zorunlustringMarkanın ölçüldüğü pazar. tr, us, gb, de, fr, es, in değerlerinden biri (uk, gb olarak kabul edilir). Varsayılan ülke yoktur.
language zorunlustringDil kodu, ör. tr, en ya da pt-br. aimode ve aio, Google'ı bu dilde sorgular.
istekcurl
curl -X POST https://api.prompter.searchestra.com/v1/workspaces/wsp_123/projects \
  -H "X-API-Key: prsk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Acme", "countryCode": "tr", "language": "tr" }'
yanıt201
{
  "data": { "id": "prj_…", "workspaceId": "wsp_123", "name": "Acme", "slug": "acme", "countryCode": "tr", "language": "tr" }
}

Proje güncelle

PATCH/v1/projects/{projectId}

Bir projeyi yeniden adlandırır ya da pazarını değiştirir. manage izni ve kapsamı projeyi kapsayan bir anahtar (tenant, workspace'i ya da o proje) gerekir. Gövde alanları oluşturmayla aynı ama hepsi opsiyonel: yalnızca değişeni gönder, gönderilmeyen alan olduğu gibi kalır. Gönderilen alan oluşturmadaki gibi doğrulanır; boş string alanı silmez, reddedilir.

Pazar (countryCode ve language), projede ilk çalıştırma yapıldıktan sonra kilitlenir; böylece geçmiş sonuçlar tek bir pazara ait kalır. Bundan sonra değiştirmek 409 conflict döner. Başka bir pazarı ölçmek için yeni proje oluştur.

Proje sil

DELETE/v1/projects/{projectId}

Projeyi ve altındaki her şeyi (promptlar, çalıştırmalar ve kapsamlı anahtarlar cascade) siler. manage izni ve kapsamı projeyi kapsayan bir anahtar gerekir. Geri alınamaz.

Promptlar ve çalıştırmalar

Bu uçlar kalıcı çalıştırma kanalıdır: bir promptu proje altında saklar, platformlarda çalıştırır, yanıt gerçek maliyetiyle saklanır ve projeye atfedilir. Bu, panelin kullandığı yüzeyin aynısıdır; yani bir makine anahtarı, bir kişinin uygulamada yaptığının aynısını yapar. Hiçbir şey kaydetmeyen, stateless olan /v1/collect'in muadilidir.

Kapsam ve izin. Her çağrı bir hedef proje çözer (yoldan ya da prompttan) ve anahtarın kapsamının onu kapsadığını doğrular (tenant → tümü; workspace → kendi projeleri; project → kendisi). Okuma read, çalıştırma run, prompt oluşturma/silme manage ister. Kapsam dışı → 404; izin yoksa → 403.

Promptları listele

GET/v1/projects/{projectId}/prompts

Bir projedeki kayıtlı promptları listeler. read gerekir.

Prompt oluştur

POST/v1/projects/{projectId}/prompts

Bir proje altına prompt kaydeder. manage gerekir.

AlanTipNot
promptText zorunlustringSaklanacak soru. Kırpılır; boş olamaz.
yanıt201
{ "data": { "id": "prm_…", "projectId": "prj_…", "text": "girişimler için en iyi crm", "createdAt": "2026-08-31T12:00:00Z" } }

Prompt çalıştır

POST/v1/prompts/{promptId}/run

Kayıtlı bir promptu seçilen platformlarda canlı istekler olarak çalıştırır. Proje (ve ülke/dil) prompttan alınır. Her platform bağımsızdır: biri başarısız olsa diğerleri sürer. Her sonuç gerçek maliyetiyle bir çalıştırma olarak saklanır. run gerekir.

AlanTipNot
platforms zorunlustring[]Bir ya da daha çok platform kodu (bkz. Platformlar). Tekilleştirilir; en az bir.
istekcurl
curl -X POST https://api.prompter.searchestra.com/v1/prompts/prm_123/run \
  -H "X-API-Key: prsk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "platforms": ["chatgpt", "perplexity"] }'
yanıt201
{
  "data": [
    { "id": "run_…", "promptId": "prm_123", "platform": "chatgpt", "status": "ok",
      "answerText": "…", "citations": [], "textLinks": [],
      "costEstimate": 0.0037, "model": "gpt-4o", "inputTokens": 812, "outputTokens": 143,
      "createdAt": "2026-08-31T12:00:05Z" }
  ]
}

status platform başına ok ya da error'dur (kısmi başarı). Başarısız platform errorMessage taşır ve maliyeti sıfırdır.

Bir promptun çalıştırmalarını listele

GET/v1/prompts/{promptId}/runs

Bir promptun çalıştırma geçmişini, en yeni önce döner. read gerekir.

Proje kullanımı

GET/v1/projects/{projectId}/usage

Projenin gerçek maliyetini saklanan çalıştırmalardan toplar; toplam ve platform bazında. read gerekir. (GET /v1/projects/{projectId}/overview aynı kullanımı artı prompt sayısı ve son çalıştırmaları döner.)

yanıt200
{
  "data": { "totalRuns": 42, "totalCostUsd": 0.1873,
    "byPlatform": [ { "platform": "chatgpt", "runs": 20, "costUsd": 0.09 } ] }
}

Platformlar

Dokuz platformun gerçek entegrasyonu vardır. citations yalnızca üç kaynaklı platformda native'dir; altı LLM platformu linkleri textLinks üzerinden verir.

KodSağlayıcıAtıf
chatgptOpenAI Chat Completionsyalnızca textLinks
claudeAnthropic Messagesyalnızca textLinks
geminiGoogle Generative Languageyalnızca textLinks
deepseekDeepSeek Chat Completionsyalnızca textLinks
grokxAI Chat Completionsyalnızca textLinks
metaaiMeta Model APIyalnızca textLinks
perplexityPerplexity Sonarnative
aimodeGoogle AI Mode (DataForSEO)native
aioGoogle AI Overviews (DataForSEO)native

Hatalar

Hatalar bir code ve bir message içeren error nesnesi döndürür.

hata zarfı
{ "error": { "code": "unauthorized", "message": "X-API-Key başlığı gereklidir." } }
DurumcodeNe zaman
400validation_failedBoş promptText ya da ülke desteklenmiyor.
401unauthorizedEksik, geçersiz, iptal edilmiş ya da süresi dolmuş API anahtarı.
403forbiddenAnahtar geçerli ama bu çağrının istediği izne (run, read ya da manage) sahip değil; ya da project-kapsamlı anahtar workspace düzeyi bir işlem deniyor.
404not_foundBilinmeyen platform kodu; ya da anahtarın kapsamı dışında bir workspace/project (reddedilmez, gizlenir).
422quota_exceededBu tenant ve platform için günlük kota ya da maliyet bütçesi doldu. Yarın tekrar deneyin.
429rate_limitedAnahtar başına dakikalık istek ya da eşzamanlılık sınırı aşıldı. Kısa süre sonra tekrar deneyin.
500internalUpstream ya da dahili hata. Mesaj maskelidir.
503unavailablePlatform yapılandırılmamış ya da circuit breaker açık. Mesaj maskelidir.
422 ve 429. 422 "yarın tekrar dene" demektir (günlük bütçe doldu). 429 "kısa süre sonra tekrar dene" demektir (kısa pencere sınırı). İkisini karıştırmayın.

Limitler ve kotalar

prompter beş bağımsız guard uygular. Hız ve eşzamanlılık guard'ları YALNIZCA gerçek para harcayan çalıştırma uçlarına (POST /v1/collect ve POST /v1/prompts/{promptId}/run) uygulanır; listeleme, oluşturma ve okuma muaftır.

GuardKapsamSınırda
Dakikalık istekkimlik başına (API anahtarı ya da panel kullanıcısı)429 rate_limited
Eşzamanlı istekkimlik başına (API anahtarı ya da panel kullanıcısı)429 rate_limited
Günlük istek kotasıtenant ve platform başına422 quota_exceeded
Günlük maliyet bütçesitenant ve platform başına422 quota_exceeded
Circuit breakerplatform başına, tüm tenant'lar503 unavailable

Hız ve eşzamanlılık guard'ları kimlik bazlıdır: makine çağrısı anahtarına, panel çağrısı kullanıcısına göre. Bir anahtar sınırlanınca tenant'ın diğer anahtarları/kullanıcıları etkilenmez. Limitler planınıza göre ölçeklenir. Circuit breaker, bir platform art arda başarısız olunca açılır ve bir cooldown sonrası otomatik kapanır.