ReferansGüncellendi: 2026-10-16

REST API v1: anahtar oluşturma, kimlik doğrulama ve uç noktalar

API anahtarı oluşturma, Authorization başlığı, temel URL, tüm v1 uç noktaları ile parametreleri, yanıt zarfı ve hata kodları.

Bu ekranı panelde aç

REST API v1, panelde yaptığın işlerin çoğunu koddan yapmanı sağlar: siteleri listele, tarama başlat, sorunları çek, AI düzeltmesi aç, Pixel kuralı, anahtar kelime ve içerik yönet. Anahtarlar organizasyon bazlıdır; bir anahtar yalnızca kendi organizasyonunun verisini görür.

Ön koşullar

  • Anahtarları yalnızca organizasyonun sahibi ya da yöneticisi oluşturup iptal edebilir. Diğer rollerde API anahtarları sekmesi görünmez.
  • API erişimi Pro ve Ajans planlarında dahildir. Planın kapsamıyorsa sekmenin üstünde bir uyarı ve Planları gör bağlantısı çıkar.

API anahtarı oluşturmak

  1. Ayarlar → API anahtarları sekmesini aç.
  2. Anahtar adı alanına anahtarı nerede kullanacağını yaz (en az 2 karakter, ör. “CI”).
  3. Tarama, düzeltme, kural, kelime ya da içerik oluşturacaksan yazma (write) kapsamı kutusunu işaretle. İşaretlemezsen anahtar salt okunur olur.
  4. Anahtar oluştur'a bas.
  5. sa_live_ ile başlayan anahtarı hemen Anahtarı kopyala ile kopyala. Bu anahtar bir daha gösterilmez; listede yalnızca Önek sütunu kalır.
warning

Bir organizasyonda en fazla 20 etkin anahtar olabilir. Anahtar sızarsa listedeki çöp kutusu simgesiyle (İptal et) hemen iptal et. İptal edilen anahtarla yapılan istekler anında 401 alır.

Kimlik doğrulama ve temel URL

  • Temel URL: https://seoasist.com/api/v1
  • Başlık: Authorization: Bearer sa_live_…
  • Alternatif olarak ?api_key=sa_live_… sorgu parametresi de kabul edilir. Anahtar URL'de loglara düşebileceği için bunu yalnızca test için kullan.

Kapsamlar: read anahtarı tüm GET uç noktalarını çağırır. write kapsamı POST ve DELETE isteklerini açar. Salt okunur anahtarla yazma isteği 403 döner.

curl -H "Authorization: Bearer sa_live_..." \
  https://seoasist.com/api/v1/sites

Yanıt zarfı

Başarılı her JSON yanıt şu biçimdedir:

{ "ok": true, "data": {}, "ms": 42 }

data uç noktanın sonucudur, ms isteğin milisaniye cinsinden süresidir. Tek istisna llms.txt: düz metin (text/plain) döner. Hatalarda gövde { "ok": false, "error": "<kod>", "message": "…" } olur.

Uç noktalar

Tüm yollar temel URL'ye göredir. {id} site kimliğidir; GET /sites ile alırsın.

YöntemYolKapsamNe yapar
GET/mereadAnahtarın organizasyonu ve kapsamları: orgId, scopes
GET/sitesreadSiteleri listeler: id, name, domain, url, healthScore, lastCrawlAt, gscProperty, ga4PropertyId, repo, pixelKey …
GET/sites/{id}readSite alanları + lastCrawl (id, pages, finishedAt), issueTotals ve sorun grupları (code, severity, title, count)
POST/sites/{id}/crawlwriteTarama başlatır; { crawlId, status: "queued" } döner
GET/sites/{id}/issuesreadGruplanmış sorunlar (totals, groups). ?code= verilirse o grup ve örnek urls gelir; ?limit= varsayılan 200, en çok 1000
POST/sites/{id}/fixeswriteAI düzeltmesi (PR işi) açar. Gövde: issueCode ya da instructions (biri zorunlu), isteğe bağlı model. { jobId, status: "queued" } döner
GET/sites/{id}/fixesreadSon 50 düzeltme işi: status, model, prUrl, summary, error …
GET/sites/{id}/pixel/rulesreadPixel kuralları
POST/sites/{id}/pixel/ruleswriteKural ekler. Gövde: kind, matchType (varsayılan exact), matchPath (varsayılan /), payload, isteğe bağlı note
DELETE/sites/{id}/pixel/rules/{ruleId}writeKuralı siler; { deleted: true }
GET/sites/{id}/keywordsreadavgPosition, buckets ve kelimeler (position, change, best, url, volume, kd, intent, aiOverview, aiCited …)
POST/sites/{id}/keywordswriteGövde: { keywords: string[] } (istek başına en çok 200). { added } döner; zaten var olan kelimeler atlanır
GET/sites/{id}/contentreadSon 100 içerik ögesi; ?status= ile filtrelenir
POST/sites/{id}/contentwriteBlog fikri oluşturur. Gövde: title (zorunlu), targetKeywords?, angle?, generate? (true ise yazım kuyruğa alınır)
GET/sites/{id}/content/{itemId}readTek içerik ögesi, tüm alanlarıyla (HTML dahil)
POST/sites/{id}/content/{itemId}/approvewriteOnaylar. scheduledFor (YYYY-MM-DD) verilirse durum scheduled olur
POST/sites/{id}/content/{itemId}/publishwriteYayın işini kuyruğa alır. Gövde: channel (wordpress, github, manual), live?
GET/sites/{id}/georeadAI görünürlük özeti; ?days= varsayılan 90
GET/sites/{id}/monitorsreaduptime (30 gün), index sayıları ve changes30d
GET/sites/{id}/ai-accessreadSon AI bot erişim kontrolü: checkedAt, result, policy
GET/sites/{id}/llms.txtreadÜretilen llms.txt, düz metin
GET/notificationsread{ unread, items }; ?unread=1 yalnızca okunmamışları getirir, ?limit= varsayılan 50
POST/notifications/readwriteGövde: { ids?: string[] }; ids yoksa hepsi okundu işaretlenir
GET/reportsreadSon 50 rapor ve herkese açık url'leri; ?siteId= ile filtrelenir

İçerik durumları: idea, planned, generating, draft, review, approved, scheduled, published, failed, archived. Pixel kind değerleri: title, meta_description, canonical, robots, h1, img_alt, og, json_ld, hreflang, redirect, lang, attr. matchType: exact, prefix, regex, all.

Örnekler

AI düzeltmesi başlatmak:

curl -X POST https://seoasist.com/api/v1/sites/SITE_ID/fixes \
  -H "Authorization: Bearer sa_live_..." \
  -H "Content-Type: application/json" \
  -d '{"issueCode":"missing_meta_description"}'

Takibe kelime eklemek:

curl -X POST https://seoasist.com/api/v1/sites/SITE_ID/keywords \
  -H "Authorization: Bearer sa_live_..." \
  -H "Content-Type: application/json" \
  -d '{"keywords":["seo aracı","site denetimi"]}'

Tarama ve düzeltme gibi işler kuyruğa alınır. Sonucu ilgili GET uç noktasından (/sites/{id}, /sites/{id}/fixes) takip et.

Hata kodları

HTTPerrorNe zaman
400bad_requestEksik ya da geçersiz gövde alanı (ör. title, kind, keywords[])
401unauthorizedAnahtar yok, geçersiz ya da iptal edilmiş
403forbiddenSalt okunur anahtarla yazma isteği
404not_foundSite ya da kayıt bu organizasyona ait değil, yok ya da uç nokta bilinmiyor
409conflictDüzeltme için sitede GitHub deposu yok, GitHub bağlı değil ya da AI modeli kullanılamıyor
500internalBeklenmeyen hata; message ayrıntıyı verir

Sık sorulanlar

Anahtarımı kaybettim, tekrar görebilir miyim?

Hayır. Anahtarlar yalnızca özet (hash) olarak saklanır. Eskisini iptal et, yeni bir anahtar oluştur.

Aynı anahtarı MCP istemcisinde kullanabilir miyim?

Evet. API anahtarları sekmesinin altındaki MCP sunucusu görünümü, Claude Desktop, Claude Code ve Cursor için hazır yapılandırmayı gösterir. Anahtarı SEOASIST_API_KEY değişkenine koyman yeterli; MCP araçları aynı uç noktaları çağırır.

Tarayıcıdan doğrudan çağırabilir miyim?

API, Access-Control-Allow-Origin: * başlığı döner. Yine de anahtarı herkese açık bir sayfaya gömme; anahtarı gören herkes organizasyonunun verisine erişir.

Bu yazı işine yaradı mı?
Aradığını bulamadın mı?
Sorunu yaz, ekibimiz e-postayla dönsün.
Bize yaz