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
- Ayarlar → API anahtarları sekmesini aç.
- Anahtar adı alanına anahtarı nerede kullanacağını yaz (en az 2 karakter, ör. “CI”).
- Tarama, düzeltme, kural, kelime ya da içerik oluşturacaksan yazma (write) kapsamı kutusunu işaretle. İşaretlemezsen anahtar salt okunur olur.
- Anahtar oluştur'a bas.
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.
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öntem | Yol | Kapsam | Ne yapar |
|---|---|---|---|
| GET | /me | read | Anahtarın organizasyonu ve kapsamları: orgId, scopes |
| GET | /sites | read | Siteleri listeler: id, name, domain, url, healthScore, lastCrawlAt, gscProperty, ga4PropertyId, repo, pixelKey … |
| GET | /sites/{id} | read | Site alanları + lastCrawl (id, pages, finishedAt), issueTotals ve sorun grupları (code, severity, title, count) |
| POST | /sites/{id}/crawl | write | Tarama başlatır; { crawlId, status: "queued" } döner |
| GET | /sites/{id}/issues | read | Gruplanmış sorunlar (totals, groups). ?code= verilirse o grup ve örnek urls gelir; ?limit= varsayılan 200, en çok 1000 |
| POST | /sites/{id}/fixes | write | AI 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}/fixes | read | Son 50 düzeltme işi: status, model, prUrl, summary, error … |
| GET | /sites/{id}/pixel/rules | read | Pixel kuralları |
| POST | /sites/{id}/pixel/rules | write | Kural ekler. Gövde: kind, matchType (varsayılan exact), matchPath (varsayılan /), payload, isteğe bağlı note |
| DELETE | /sites/{id}/pixel/rules/{ruleId} | write | Kuralı siler; { deleted: true } |
| GET | /sites/{id}/keywords | read | avgPosition, buckets ve kelimeler (position, change, best, url, volume, kd, intent, aiOverview, aiCited …) |
| POST | /sites/{id}/keywords | write | Gövde: { keywords: string[] } (istek başına en çok 200). { added } döner; zaten var olan kelimeler atlanır |
| GET | /sites/{id}/content | read | Son 100 içerik ögesi; ?status= ile filtrelenir |
| POST | /sites/{id}/content | write | Blog fikri oluşturur. Gövde: title (zorunlu), targetKeywords?, angle?, generate? (true ise yazım kuyruğa alınır) |
| GET | /sites/{id}/content/{itemId} | read | Tek içerik ögesi, tüm alanlarıyla (HTML dahil) |
| POST | /sites/{id}/content/{itemId}/approve | write | Onaylar. scheduledFor (YYYY-MM-DD) verilirse durum scheduled olur |
| POST | /sites/{id}/content/{itemId}/publish | write | Yayın işini kuyruğa alır. Gövde: channel (wordpress, github, manual), live? |
| GET | /sites/{id}/geo | read | AI görünürlük özeti; ?days= varsayılan 90 |
| GET | /sites/{id}/monitors | read | uptime (30 gün), index sayıları ve changes30d |
| GET | /sites/{id}/ai-access | read | Son AI bot erişim kontrolü: checkedAt, result, policy |
| GET | /sites/{id}/llms.txt | read | Üretilen llms.txt, düz metin |
| GET | /notifications | read | { unread, items }; ?unread=1 yalnızca okunmamışları getirir, ?limit= varsayılan 50 |
| POST | /notifications/read | write | Gövde: { ids?: string[] }; ids yoksa hepsi okundu işaretlenir |
| GET | /reports | read | Son 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ı
| HTTP | error | Ne zaman |
|---|---|---|
| 400 | bad_request | Eksik ya da geçersiz gövde alanı (ör. title, kind, keywords[]) |
| 401 | unauthorized | Anahtar yok, geçersiz ya da iptal edilmiş |
| 403 | forbidden | Salt okunur anahtarla yazma isteği |
| 404 | not_found | Site ya da kayıt bu organizasyona ait değil, yok ya da uç nokta bilinmiyor |
| 409 | conflict | Düzeltme için sitede GitHub deposu yok, GitHub bağlı değil ya da AI modeli kullanılamıyor |
| 500 | internal | Beklenmeyen 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.
İlgili yazılar
- Denetim sorunlarını kasıtlı kabul etmek ve otomatik düzeltmekBilerek bıraktığın sorunları Kasıtlı olarak işaretlemeyi, geri almayı ve sorunları kural ya da GitHub pull request'i ile otomatik düzeltmeyi anlatır.
- Planlar, aylık sayfa kotası ve dahil SEOAsist AI çağrılarıÜcretsiz, Başlangıç, Pro ve Ajans planlarının limitlerini, aylık tarama kotasının ve dahil SEOAsist AI çağrılarının nasıl sayıldığını ve kullanımını nereden izleyeceğini anlatır.
- Site API teknik referansı (seoasist-site-api/1)SEOAsist Site API spesifikasyonunun tamamı: kimlik doğrulama ve HMAC imzası, dört uç nokta, kural türleri ve hazır Next.js/PHP örneklerinin özeti.
- İçerik stüdyosu: öneriler, blog, sayfa güncelleme ve yayınSearch Console fırsatlarından title/meta önerisi almak, AI ile blog yazısı üretmek, mevcut sayfaları genişletmek ve içeriği WordPress, Site API, GitHub veya Shopify'a yayınlamak.