API & MCP

Lesen Sie Ihre Analysen aus dem Code - oder lassen Sie einen Assistenten lesen

Eine lesende REST-API über Crawls, Befunde und Rankings, und ein MCP-Server, der dieselben Daten in Claude bringt.

REST-Endpunkte
10REST-Endpunkte
MCP-Werkzeuge
6MCP-Werkzeuge
nichts gibt einen Credit aus
Nur lesendnichts gibt einen Credit aus
am MCP-Server, beide Spezifikationsgenerationen
OAuth 2.1am MCP-Server, beide Spezifikationsgenerationen

Zehn Endpunkte

  • GET /v1/me

    Das Konto, sein Plan und was der Plan erlaubt.

  • GET /v1/sites

    Ihre Websites. Analysierte Wettbewerber fehlen absichtlich - sie sind Crawl-Ziele, keine Websites, die Ihnen gehören.

  • GET /v1/sites/{id}/crawls

    Crawl-Verlauf mit Status, Seiten, Credits und Health-Score.

  • GET /v1/crawls/{id}

    Ein Crawl, mit der Zusammenfassung, aus der er bewertet wurde.

  • GET /v1/crawls/{id}/findings

    Befunde, filterbar nach Schweregrad und Status, jeder benannt statt nur identifiziert.

  • GET /v1/crawls/{id}/accessibility

    Das WCAG-2.2-Panel nach Erfolgskriterium: was fehlgeschlagen ist, auf wie vielen Seiten, die Elemente, und was eine Maschine nicht entscheiden kann.

  • GET /v1/crawls/{id}/pages

    Jede URL, die der Crawl geholt hat, mit Status, Wortzahl und der Zahl der Befunde darauf - einschließlich der Seiten ohne Befund.

  • GET /v1/crawls/{id}/segments

    Scores je Segment, mit dem Muster, über das jedes zugeordnet wurde.

  • GET /v1/sites/{id}/rankings

    Positionen über die Zeit für die Keywords, die Sie verfolgen.

  • GET /v1/sites/{id}/search

    Klicks, Impressionen und CTR aus der Search Console, mit den wichtigsten Anfragen und Seiten. Dieselben Daten, die der MCP-Server schon immer hatte.

$ curl -H "Authorization: Bearer sk_…" \
    https://api.seodar.io/v1/sites

{
  "items": [
    {
      "id": "…",
      "root_url": "https://example.com",
      "crawls": 12
    }
  ]
}

Sechs MCP-Werkzeuge

Der MCP-Server bringt dieselben Daten in einen Assistenten. Fragen Sie, was sich seit letzter Woche verschlechtert hat, und die Antwort kommt aus Ihren Crawls statt aus der Vorstellung des Modells davon, was sich üblicherweise verschlechtert.

list_sites, get_audit, get_accessibility, list_findings, list_rankings, search_console, get_account

Webhooks, signiert

Richten Sie einen Kanal auf Ihren eigenen Endpunkt, und jedes Ereignis kommt als JSON an statt als Satz im Chatformat einer anderen Firma. Fünf Ereignisse heute: ein Scan ist fertig, der Health-Score ist gefallen, neue kritische Befunde sind aufgetaucht, ein geplanter Scan wurde ausgelassen, und eine Google-Verbindung wurde entfernt.

Jede Zustellung ist signiert. Der Header ist ein HMAC-SHA256 über timestamp + "." + body unter einem Geheimnis, das Ihnen einmal gezeigt wird - der Zeitstempel steckt in der signierten Zeichenkette, sodass eine abgefangene Anfrage innerhalb von Minuten nicht mehr verifiziert, statt für immer wiederholbar zu sein.

  • X-Seodar-Event - welches Ereignis das ist
  • X-Seodar-Delivery - eine ID je Ereignis je Kanal, über Wiederholungen hinweg gleich, damit Sie entdoppeln können
  • X-Seodar-Timestamp und X-Seodar-Signature
  • Drei Versuche im Abstand von einer Sekunde bei Timeout, 5xx oder 429. Ein 4xx wird nicht wiederholt. Zehn Fehlschläge in Folge schalten den Kanal ab und sagen es Ihnen.
POST /your/endpoint
X-Seodar-Event: score_drop
X-Seodar-Signature: v1=9f86d0…
X-Seodar-Timestamp: 1754668800

{"event":"score_drop",
 "title":"Health score fell 7 points",
 "site":"https://example.com",
 "link":"https://seodar.io/crawls/…",
 "occurred_at":"2026-08-08T…",
 "delivery_id":"…"}
import hmac, hashlib, time

def valid(secret, headers, raw):
    ts = int(headers["X-Seodar-Timestamp"])
    if abs(time.time() - ts) > 300:
        return False
    mine = hmac.new(secret.encode(),
                    f"{ts}.".encode() + raw,
                    hashlib.sha256).hexdigest()
    return hmac.compare_digest(
        "v1=" + mine,
        headers["X-Seodar-Signature"])

Scan beim Deploy

Ein Deploy-Schlüssel startet einen Scan einer Website und kann sonst nichts - er kann keinen Befund lesen, Ihre Websites nicht auflisten und keinen Score sehen. Genau deshalb bleibt der Schlüssel oben nur lesend: Die beiden Aufgaben brauchen unterschiedlich viel Vertrauen, also bekommen sie unterschiedliche Zugangsdaten.

Absichtlich kein Vercel- oder Netlify-Webhook. Es ist ein schlichter POST mit Bearer-Token, funktioniert also von überall, wo nach einem Deploy ein Befehl läuft - und Sie können es mit curl debuggen statt mit dem Ereignisprotokoll eines Anbieters.

  • 202 - eingereiht, mit der Crawl-ID
  • 200 - für diese Website lief bereits ein Scan, der wird zurückgegeben, statt einen zweiten zu starten
  • 429 - dieser Schlüssel hat seine Scans für heute verbraucht. Vier standardmäßig, einstellbar bis 24
  • 402 / 403 - nicht genug Credits, oder die E-Mail-Adresse des Kontos ist nicht verifiziert
# nach dem Build, von überall
curl -sS -X POST https://api.seodar.io/v1/deploys \
  -H "Authorization: Bearer $SEODAR_DEPLOY_KEY"

{"crawl_id":"…","status":"queued",
 "started":true,"pages_limit":500,
 "credits_estimate":50,
 "scans_left_today":3}

Erstellen Sie den Schlüssel auf der Integrationsseite einer Website. Er wird einmal angezeigt, scannt nur diese Website und lässt sich widerrufen.

Wie es sich verhält

  • Schlüssel werden einmal gezeigt

    Auf der API-Seite in Ihrem Konto erstellt, an dieses Konto gebunden, widerrufbar und nach dem ersten Bildschirm nie wieder angezeigt.

  • Begrenzt je Plan

    Das Kontingent steht auf der Preisseite, und die API sagt Ihnen, was übrig ist, statt nur abzulehnen.

  • Nichts Privates verlässt das Haus

    Interne Notizen zu Befunden erscheinen nie in der öffentlichen API, egal, was der Aufrufer verlangt.

  • Zugangsbegrenzung serverseitig durchgesetzt

    Ein Kundenzugang sieht, worauf dieser Zugang begrenzt ist - entschieden auf dem Server statt in der Antwort gefiltert.

Was absichtlich nicht drin ist

Nichts, das schreibt. Kein Endpunkt startet einen Crawl, ändert einen Plan oder gibt einen Credit aus - deshalb ist ein durchgesickerter Schlüssel eine Peinlichkeit und keine Rechnung.

Fragen

Ja. Nichts darin startet einen Crawl oder gibt einen Credit aus, ein durchgesickerter Schlüssel kann Sie also kein Geld kosten.
Mit einem Bearer-Schlüssel, den Sie auf der API-Seite in Ihrem Konto erstellen. Schlüssel werden einmal angezeigt, gelten für das Konto und lassen sich widerrufen.
Er lässt einen Assistenten Ihr Konto direkt abfragen - 'was hat sich auf dieser Website seit letzter Woche verschlechtert', beantwortet aus Ihren eigenen Daten statt aus der Vermutung des Modells. Er spricht OAuth 2.1 und funktioniert mit Clients der aktuellen und der vorigen Spezifikation.
Jeder Plan mit einem Kontingent an API-Anfragen. Die Preisseite nennt die Zahl.

Kostenlos starten

Eine Website und 100 Credits - bis zu 200 Seiten pro Scan, etwa 5 Scans, dazu der vollständige Bericht. Ohne Kreditkarte. Bezahlte Pläne bringen mehr Websites, größere Crawls und die KI-Textvorschläge.