Ana Sayfaya Dön
API Reference

SOV Tracker API

SOV verilerinizi kendi dashboard'larınıza, automasyon akışlarınıza veya BI araçlarınıza çekin. REST endpoint'ler + giden webhook'lar. Pro ve üstü planlar.

Kimlik Doğrulama

Tüm API istekleri Authorization header'ında Bearer token gerektirir. Anahtarınızı buradan alın: /dashboard/settings → API Erişimi.

Authorization: Bearer avt_live_xxxxxxxxxxxxxxxxxxxxxxxx

GET /api/v1/sov

En son tamamlanmış taramaya göre tüm platformlardaki güncel SOV skorunu döndürür.

Request

curl -H "Authorization: Bearer $SOVTRACKER_KEY" \
  https://sovtracker.com/api/v1/sov

Response (200 OK)

{
  "scan_id": "scan_abc123",
  "completed_at": "2026-05-06T12:34:56Z",
  "avg_sov": 42,
  "platform_breakdown": {
    "chatgpt": 60,
    "claude": 35,
    "gemini": 50,
    "perplexity": 25,
    "ai_overviews": 40
  }
}

GET /api/v1/scans

Son taramaları listele (yeniden eskiye). limit query param (max 50, varsayılan 10).

curl -H "Authorization: Bearer $SOVTRACKER_KEY" \
  "https://sovtracker.com/api/v1/scans?limit=20"

Response

{
  "scans": [
    {
      "id": "scan_abc123",
      "status": "completed",
      "scan_type": "manual",
      "started_at": "2026-05-06T12:30:00Z",
      "completed_at": "2026-05-06T12:34:56Z"
    }
  ]
}

POST /api/v1/scans

Yeni tarama başlat. Aylık kotanızdan düşer. Body opsiyonel.

curl -X POST \
  -H "Authorization: Bearer $SOVTRACKER_KEY" \
  -H "Content-Type: application/json" \
  https://sovtracker.com/api/v1/scans

Response (202 Accepted)

{
  "scan_id": "scan_xyz789",
  "status": "running",
  "estimated_seconds": 60
}

GET /api/v1/archive

Zaman Makinesi: tarihli ham AI cevap arşivi. Her tarama sonucu tam ham cevabıyla arşivlenir — "17 Temmuz 2026'da ChatGPT bu prompt'a ne cevap verdi?". Bu geçmiş sonradan üretilemez; yalnız o gün kaydedildiği için vardır.

Query parametreleri

  • keyword_idkelimeye göre filtrele (UUID)
  • platformchatgpt | claude | gemini | perplexity | ai_overviews
  • from, toISO 8601 tarih aralığı
  • limit1-100, varsayılan 50
  • cursorsayfalama: önceki cevabın meta.next_cursor değeri
curl -H "Authorization: Bearer $SOVTRACKER_KEY" \
  "https://sovtracker.com/api/v1/archive?platform=chatgpt&from=2026-06-01&limit=25"

Response (200 OK)

{
  "data": [
    {
      "id": "9f1c...",
      "scan_id": "scan_abc123",
      "platform": "chatgpt",
      "keyword_id": "kw_123",
      "prompt_used": "best crm tools for smb",
      "raw_response": "The most recommended CRM tools are...",
      "brand_mentioned": true,
      "mention_count": 2,
      "mention_position": 3,
      "sentiment": "positive",
      "sov_score": 42.5,
      "created_at": "2026-07-17T09:12:00Z"
    }
  ],
  "meta": {
    "count": 1,
    "next_cursor": "MjAyNi0wNy0xN1...",
    "plan_window_applied": false,
    "window_start": "2026-06-01T00:00:00.000Z"
  }
}

Geçmiş derinliği server tarafında plan bazlı uygulanır: Free yalnız son 7 günü görür; Starter ve üzeri tüm arşivi alır. Pencere istediğiniz aralığı kırptıysa meta.plan_window_applied true olur ve meta.window_start etkin başlangıcı gösterir.

MCP Sunucusu (Model Context Protocol)

Kendi AI asistanınızı — Claude (Desktop / claude.ai), ChatGPT connector'ları, Cursor veya herhangi bir MCP istemcisi — doğrudan SOV verinize bağlayın. Sunucu Streamable HTTP konuşur ve REST API ile aynı API key ile doğrulanır (Pro ve üstü planlar). Tüm tool'lar salt-okunurdur ve key'in ait olduğu organizasyona scope'ludur.

https://sovtracker.com/api/mcp

API anahtarınızı buradan alın: /dashboard/settings → API Erişimi — MCP istemcisi bunu her istekte Authorization header'ı olarak gönderir.

Mevcut tool'lar

  • get_visibility_summaryson tarama: genel SOV, platform bazlı skor/bahsedilme, önceki taramaya göre trend
  • list_keywordstakip edilen kelimeler ve güncel durumları
  • get_scan_resultsbir taramanın satır bazlı sonuçları, platform/kelime filtresiyle
  • get_answer_archiveZaman Makinesi: tarihli ham AI cevapları (plan geçmiş derinliği uygulanır)
  • get_business_cardişletme kartı durumu: güven skoru, alan grubu tazeliği, aktiflik beyan tarihi
  • get_ai_trafficson 30 günün AI kaynaklı ziyaretleri, kaynak bazında

Yazma veya tarama tetikleme tool'u yoktur — asistanınız her şeyi okuyabilir ama tarama kotanızı harcayamaz.

Claude Desktop / Claude Code

claude_desktop_config.json dosyasına ekleyin (Claude Code için .mcp.json):

{
  "mcpServers": {
    "sov-tracker": {
      "type": "http",
      "url": "https://sovtracker.com/api/mcp",
      "headers": {
        "Authorization": "Bearer avt_live_xxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

claude.ai'de (web) Ayarlar → Connectors → Add custom connector altına aynı URL ile ekleyin. Cursor .cursor/mcp.json içinde aynı JSON şeklini kullanır.

Genel Streamable HTTP istemcisi

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const transport = new StreamableHTTPClientTransport(
  new URL("https://sovtracker.com/api/mcp"),
  {
    requestInit: {
      headers: { Authorization: "Bearer avt_live_xxx" },
    },
  }
);

const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
const summary = await client.callTool({
  name: "get_visibility_summary",
  arguments: {},
});

Rate limit: key başına dakikada 60 istek. 401 = eksik/geçersiz key veya Pro altı plan; 429 = rate limit aşıldı.

Giden Webhook'lar

Olaylar tetiklendiğinde HTTP POST bildirim alın. URL ve olayları buradan ayarlayın: /dashboard/settings → Outbound Webhooks.

Mevcut olaylar

  • scan.completedtarama tamamlandığında
  • sov.droppedSOV uyarı eşiğinin altına düştü
  • mention.detectedyeni marka bahsi tespit edildi
  • competitor.overtakebir rakip öne geçti

Gövde

{
  "event": "scan.completed",
  "organization_id": "org_abc",
  "timestamp": "2026-05-06T12:34:56Z",
  "data": {
    "scan_id": "scan_xyz",
    "avg_sov": 42,
    "results_count": 50,
    "mentioned_count": 21
  }
}

İmza doğrulama

Her istek X-Sovtracker-Signature header'ı içerir (raw body'nin HMAC-SHA256 hex çıktısı, webhook secret'ınızla imzalanmış).

import crypto from 'crypto';

function verify(rawBody, headerSig, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(headerSig)
  );
}

Hatalar

  • 401API key eksik veya geçersiz
  • 403Plan API erişimi içermiyor (Pro+ gerekli)
  • 429Aylık tarama kotası bitti
  • 500Sunucu hatası — exponential backoff ile tekrar deneyin

Soru var mı? Burada olmayan bir senaryo? Bize ulaşın.

İletişime Geç