universedocs

Prompt Universe API

Bir kategori ve pazar için temsil edici, versiyonlu bir query universe kurun: insanların AI'a sorduğu soruların seti. Asenkron bir build başlatır, izler, değişmez bir version'ı kilitler, ardından manifest ve query'leri intent'e göre okursunuz. Prompt Universe ne sorulacağına karar verir; bu query'leri çalıştırmak ve görünürlüğü ölçmek ayrı bir adımdır.

Genel bakış

API küçük ve workspace kapsamlıdır. Her yanıt bir { data, meta } zarfına sarılır; hatalar üst düzey bir error nesnesi döner (bkz. Hatalar). Build'ler bir worker üzerinde asenkron çalışır; bu yüzden oluşturma hemen döner ve ilerlemeyi siz izlersiniz.

Base URL

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

Kurallar

  • Tüm istek ve yanıt gövdeleri application/json'dır.
  • Başarılı yanıtlar üst düzey bir data alanı ve opsiyonel meta taşır. Hatalar üst düzey bir error alanı taşır.
  • Her /v1/* ucu X-API-Key başlığını gerektirir. /healthz ve /metrics gerektirmez.
  • Kimlikler UUID'dir; version'lar semantiktir (MAJOR.MINOR.PATCH, örneğin 1.0.0).
  • Zaman damgaları UTC, ISO 8601'dir (örneğin 2026-08-19T13:47:09Z).
Kapsam sınırı. Prompt Universe query'leri AI platformlarında ASLA çalıştırmaz ve bir görünürlük metriği ASLA hesaplamaz. Bir ölçüm sonucunu yeniden üretim gerekçesi olarak da kabul etmez (information firewall): kilitli bir universe, ölçümün girdisidir, çıktısı değil.

Yaşam döngüsü

Bir universe sabit bir yaşam döngüsünden geçer. Her build aday query'ler üretir, tam intent kapsamıyla temsil edici bir alt küme seçer ve siz memnun olunca değişmez bir version'a kilitlenir.

yaşam döngüsü
universe yarat  ──▶  build (async pipeline)  ──▶  status: ready
     │                                                  │
     │                                          version kilitle ──▶  1.0.0 (değişmez)
     │                                                  │
  refresh ◀───────────  yeni build  ◀── scheduled_review │ structural_market_change
                                                         ▼
                                      manifest + query'leri oku (intent'e göre)

Kilitli bir version asla değişmez. Bir universe'i evrimletmek için bir refresh tetiklersiniz; bu yeni bir version kilitleyen yeni bir build başlatır ve eskisini tarihsel karşılaştırma için korur.

Hızlı başlangıç

Bir universe yaratın, build'i bekleyin, kilitleyin, ardından query'leri okuyun. un_your_key'i workspace'inize verilen anahtarla değiştirin (bkz. Kimlik doğrulama).

1 · Build başlat

istekcurl
curl -X POST https://api.universe.searchestra.com/v1/universes \
  -H "X-API-Key: un_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "category": "proje yönetim yazılımı",
    "market": "TR",
    "language": "tr",
    "requested_query_count": 120
  }'
yanıt201
{
  "data": {
    "id": "b3f1c2a4-...",
    "universe_id": "9a71e0d2-...",
    "status": "queued",
    "requested_query_count": 120,
    "created_at": "2026-08-19T13:47:09Z"
  }
}

2 · Build'i izle

istekcurl
curl https://api.universe.searchestra.com/v1/universes/9a71e0d2-.../builds/b3f1c2a4-.../status \
  -H "X-API-Key: un_your_key"
yanıt200
{
  "data": {
    "status": "running",
    "progress": { "stage": 4, "total_stages": 7, "percentage": 57 },
    "queries_target": 120,
    "queries_selected": 0,
    "candidates_generated": 210
  }
}

3 · Version'ı kilitle

istekcurl
curl -X POST https://api.universe.searchestra.com/v1/universes/9a71e0d2-.../builds/b3f1c2a4-.../lock \
  -H "X-API-Key: un_your_key"
yanıt200
{
  "data": {
    "version": "1.0.0",
    "build_id": "b3f1c2a4-...",
    "universe_id": "9a71e0d2-...",
    "query_count": 120,
    "taxonomy_version": "1.0.0",
    "baseline": { "reset_required": false, "compatible_with_previous": null },
    "locked_at": "2026-08-19T13:59:41Z"
  }
}

4 · Query'leri oku

istekcurl
curl "https://api.universe.searchestra.com/v1/universes/9a71e0d2-.../versions/1.0.0/queries?intent=recommendation" \
  -H "X-API-Key: un_your_key"

Kimlik doğrulama

Her /v1/* isteği X-API-Key başlığında bir API anahtarı taşımalıdır. Anahtarlar un_ ön ekiyle başlar ve bir kullanıcıyı değil, bir workspace'i tanımlar.

başlık
X-API-Key: un_your_key

Anahtarlar workspace başına workspaceinit komutuyla üretilir. Ham değer yalnızca üretim anında bir kez gösterilir ve geri alınamaz; sunucu yalnızca bir hash saklar. Bir workspace birden çok anahtar tutabilir; birini iptal etmek diğerlerini etkilemez.

Anahtarı teşhis etme. Anahtarınızın hangi workspace'e çözüldüğünü doğrulamak için GET /v1/me çağırın. Eksik ya da iptal edilmiş anahtar 401 unauthorized döner.

Universe yarat

POST/v1/universes

Yeni bir universe yaratır ve ilk build'ini asenkron başlatır. Build ile birlikte 201 döner; pipeline bir worker'da devam eder. İlerleme için build durumunu izleyin.

İstek gövdesi

AlanTipNot
category zorunlustringÖrneklenecek kategori, örneğin proje yönetim yazılımı.
market zorunlustringPazar / coğrafya kodu, örneğin TR.
language zorunlustringQuery'lerin yazılacağı dil, örneğin tr.
requested_query_count zorunluintegerKilitli universe'in hedef boyutu. Tipik olarak normal aralıkta (100–150).
control_plane opsiyonelobjectÖrnekleme kontrolleri: intent_policy (balanced ya da observed_weighted), generation_budget, auto_lock, evidence_dataset_ids.
validation_context opsiyonelobjectYalnızca first-party bias'ı dışlamak için kullanılan marka bağlamı; üretimi yönlendirmez. brand_name, aliases, domains taşır.
Information firewall. validation_context.brand_name universe'i marka-nötr tutmak için kullanılır, pohpohlayıcı query üretmek için değil. Hedef marka üretime asla beslenmez.

Build durumu

GET/v1/universes/{id}/builds/{build_id}/status

Build'in ilerlemesini döner. status terminal bir duruma (örneğin ready ya da failed) ulaşana kadar bunu izleyin.

yanıt200
{
  "data": {
    "status": "ready",
    "progress": { "stage": 7, "total_stages": 7, "percentage": 100 },
    "queries_target": 120,
    "queries_selected": 120,
    "candidates_generated": 240
  }
}

Universe'i ve build'lerini birlikte incelemek için GET /v1/universes/{id} çağırın. Build başına sağlık özeti .../builds/{build_id}/health'te bulunur.

Version kilitle

POST/v1/universes/{id}/builds/{build_id}/lock

Hazır bir build'i değişmez, semantik versiyonlu bir universe'e dondurur. Kilitlendikten sonra o version'ın manifest ve query'leri asla değişemez.

Bir universe'in tam olarak tek aktif build'i varsa, alias POST /v1/universes/{id}/lock onu build id olmadan kilitler. Hazır olmayan bir build'i ya da alias ile birden çok aktif build'i olan bir universe'i kilitlemek 409 conflict döner.

baseline. Kilit yanıtı bir baseline bloğu içerir. reset_required true olduğunda, alt akış ölçüm bu version'dan yeni bir baseline başlatmalı ve önceki trend'lerle birleştirmemelidir. Bkz. Versiyonlama & baseline.

Manifest getir

GET/v1/universes/{id}/versions/{version}/manifest

Version'ın Universe Manifest'ini döner: bu universe'in nasıl örneklendiğinin değişmez tanımı — taxonomy, intent dağılımı, kapsam ve provenance. Bir ölçüm koşusunun sabitlendiği referans budur.

Alias GET /v1/universes/{id}/manifest en son kilitli version'ın manifest'ini döner. Intent kapsamı ayrıca GET /v1/universes/{id}/coverage'ta özetlenir.

Query'leri listele

GET/v1/universes/{id}/versions/{version}/queries

Kilitli bir version'ın query'lerini döner. Her query eksiksiz, stabil intent metadata'sı taşır; böylece ölçümü intent'e göre segmentleyebilirsiniz.

Query parametreleri

AdTipNot
intent opsiyonelstringŞunlardan biriyle filtrele: informational, comparison, recommendation, transactional. Bkz. Intent'ler.

Alias GET /v1/universes/{id}/queries en son kilitli version'ın query'lerini listeler.

Universe'i yenile

POST/v1/universes/{id}/refresh

Universe'i evrimletmek için yeni bir build tetikler. Eski version kilitli ve karşılaştırılabilir kalır; yeni build yeni bir version kilitler.

AlanTipNot
refresh_trigger zorunlustringscheduled_review (periyodik gözden geçirme) ya da structural_market_change (kategorinin kendisi değişti).
Yasak tetikleyiciler. Bir ölçüm sonucu (örneğin "görünürlük düştü") asla geçerli bir refresh gerekçesi değildir. Bu tür alanlar reddedilir: bir ölçüm sistemi kendi aracını değiştirmemelidir.

Evidence dataset'leri

POST/v1/evidence/datasets

Opsiyonel. Gözlenmiş talebin (gerçek dünyada görülen sorular) bir dataset'ini yaratın, ardından içine item'lar ingest edin. Bir build intent_policy: observed_weighted kullandığında, bu dataset'ler örneklemeyi topraklar; böylece oranlar pazarın gerçekte ne sorduğunu yansıtır.

dataset yarat
curl -X POST https://api.universe.searchestra.com/v1/evidence/datasets \
  -H "X-API-Key: un_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "name": "TR PM arama logları Q3", "source_summary": "anonimleştirilmiş site araması" }'

POST /v1/evidence/datasets/{id}/items ile item ingest edin, ardından dataset id'sini bir universe'in control_plane.evidence_dataset_ids'inde referans verin.

Intent'ler

Her query tam olarak bir intent'e sınıflanır. Dördünün tümü boyunca kapsam şansa bırakılmaz, bilerek planlanır.

IntentSoranın istediği
informationalKategoriyi ya da bir kavramı anlamak ("kanban board nasıl çalışır?").
comparisonSeçenekleri birbirine karşı tartmak ("küçük ekip için X mi Y mi").
recommendationİyi bir seçeneğe yönlendirilmek ("10 kişilik startup için en iyi araç").
transactionalHarekete geçmek: fiyat, plan, limit ("SSO'lu en ucuz plan").

Versiyonlama & baseline

Version'lar değişmez ve semantiktir. Bir ölçüm koşusu belirli bir version'a referans verir; bu tarihsel karşılaştırılabilirliği garanti eder: geçen çeyreğin sayılarının ardındaki tam soru seti hâlâ değişmeden durur.

  • Değişmez: kilitlendikten sonra bir version'ın manifest ve query'leri asla değişmez.
  • Baseline bildirimi: bir kilit, compatible_with_previous olup olmadığını raporlar. reset_required true olduğunda, ölçüm yeni bir baseline başlatmalı ve sınırın iki yanını birleştirmemelidir.
  • Refresh: bir universe'i evrimletmek yeni bir version demektir, eskisinin düzenlenmesi değil.

Hatalar

Hatalar bir code, bir message ve opsiyonel details içeren bir error nesnesi döner.

hata zarfı
{ "error": { "code": "unauthorized", "message": "X-API-Key required." } }
DurumcodeNe zaman
400validation_failedEksik ya da bozuk alan (örneğin category yok, ya da bilinmeyen refresh_trigger).
401unauthorizedEksik, geçersiz ya da iptal edilmiş API anahtarı.
403forbiddenAnahtarın workspace'i bu işlemi yapamaz.
404not_foundBilinmeyen universe, build ya da version.
409conflict / duplicateKilitlenemeyecek bir build'i kilitlemek, ya da çakışan eşzamanlı bir değişiklik.
422quota_exceededBu workspace için generation bütçesi (LLM çağrısı ya da maliyet) tükendi.
429rate_limitedKısa bir pencerede çok fazla istek. Kısa süre sonra tekrar deneyin.
503unavailableBir sağlayıcı yapılandırılmamış ya da geçici olarak erişilemez.
500internalBeklenmeyen iç hata. Gerçek neden yalnızca sunucu loglarındadır.

Bütçeler & limitler

Bir build LLM çağırdığından, her build açık guard'lar altında çalışır; böylece bir universe sınırsızca maliyet ya da süre tüketemez.

GuardKapsamLimitte
Build başına maks LLM çağrısıbuild başınabuild durur; oluşturmada 422 quota_exceeded
Build başına maks maliyet (USD)build başınacost guard pipeline'ı durdurur
Maks sürebuild başınabuild reap edilir ve failed işaretlenir
Dakikada istekAPI anahtarı başına429 rate_limited
First-party katkı üst sınırıbuild başınaself-bias'ı önlemek için kendi-domain evidence'ı sınırlanır

Bütçeler planınızla ölçeklenir. Kesin varsayılanlar (query sayısı, maliyet, süre) deployment başına ayarlanır.