company logo

Help center

Zu Surfer wechseln
Alle SammlungenIntegrationen, MCP & APIAPISurfer API Webhooks

Surfer API Webhooks

Überspringen Sie die Polling-Schleife. Erfahren Sie, wie Sie Webhooks einrichten, damit Surfer Ihren Server benachrichtigt, sobald ein Content Editor bereit ist, ein KI-Artikel fertig generiert wurde oder ein Auto-Optimize-Lauf abgeschlossen ist – ohne wiederholte GET-Anfragen.

Webhooks ermöglichen es Surfer, Ihren Server sofort zu benachrichtigen, wenn etwas passiert – z. B. wenn ein Content Editor die Verarbeitung abgeschlossen hat oder ein Auto-Optimize-Lauf beendet ist, sodass Sie nicht ständig auf Updates abfragen müssen.


Webhooks einrichten

Die Webhook-Einrichtung wird vom Support-Team durchgeführt. Gehen Sie wie folgt vor:

  1. Richten Sie einen HTTPS-Endpunkt auf Ihrer Seite ein, der POST-Anfragen akzeptiert und mit HTTP 200 OK antwortet.

  2. Kontaktieren Sie den Surfer-Support per E-Mail oder Live-Chat und teilen Sie die URL mit.

  3. Der Support registriert den Endpunkt und sendet Ihnen einen Verification-Key zur Authentifizierung eingehender Anfragen auf Ihrer Seite.

Nach der Einrichtung sendet Surfer eine POST-Anfrage an Ihren Endpunkt, wenn ein unterstütztes Ereignis ausgelöst wird. Jede Anfrage enthält einen Verification-Key-Header und einen JSON-Body.


Webhook-Payload-Struktur

Alle Webhook-Ereignisse folgen der gleichen Struktur:

{
  "id": 123,
  "type": "event.name.here",
  "timestamp": "2024-06-01T12:00:00Z",
  "payload": {
    ...
  }
}

Feld

Typ

Beschreibung

id

integer

Eindeutige Benachrichtigungs-ID

type

string

Ereignisname (siehe vollständige Liste unten)

timestamp

string

ISO8601 UTC-Zeitstempel des Zeitpunkts, zu dem das Ereignis ausgelöst wurde

payload

object

Ereignisspezifische Daten (variiert je nach Ereignistyp)


Unterstützte Ereignisse

Content Editor-Initialisierung

Wird ausgelöst, nachdem POST /api/v2/workspaces/{workspace_id}/content_editors die Verarbeitung abgeschlossen hat.

Ereignis

Wann es ausgelöst wird

content_editor.initialization.completed

Content Editor ist einsatzbereit

content_editor.initialization.failed

Verarbeitung fehlgeschlagen

Payload-Felder: draft_id (integer), permalink_hash (string)

{
  "id": 123,
  "type": "content_editor.initialization.completed",
  "timestamp": "2024-06-01T12:00:00Z",
  "payload": {
    "draft_id": 5632898,
    "permalink_hash": "kKi7n3pkRk7Gw5cxKDiBAbCAybnDTt2z"
  }
}

Content Score-Neuberechnung

Wird ausgelöst, nachdem Sie den Inhalt in einem Content Editor über die API aktualisiert haben.

Ereignis

Wann es ausgelöst wird

content_editor.content_score.recalculated

Bewertung nach einer Inhaltsänderung aktualisiert

Payload-Felder: draft_id (integer), permalink_hash (string), content_score (integer)

{
  "id": 124,
  "type": "content_editor.content_score.recalculated",
  "timestamp": "2024-06-01T12:05:00Z",
  "payload": {
    "draft_id": 5632898,
    "permalink_hash": "kKi7n3pkRk7Gw5cxKDiBAbCAybnDTt2z",
    "content_score": 74
  }
}

KI-Artikelgenerierung

Wird während und nach der Surfer-KI-Artikelgenerierung ausgelöst.

Ereignis

Wann es ausgelöst wird

content_editor.ai_article.completed

Artikel vollständig generiert

content_editor.ai_article.waiting_for_user_input

Gliederung ist fertig und wartet auf Überprüfung (nur wenn manual_outline: true)

content_editor.ai_article.failed

Generierung fehlgeschlagen

Payload-Felder: draft_id (integer), permalink_hash (string)


Auto-Optimize

Wird ausgelöst, nachdem eine Auto-Optimize-Ausführung abgeschlossen, fehlgeschlagen oder abgebrochen wurde.

Ereignis

Wann es ausgelöst wird

content_editor.auto_optimize.completed

Ausführung abgeschlossen

content_editor.auto_optimize.failed

Ausführung fehlgeschlagen

content_editor.auto_optimize.cancelled

Ausführung wurde abgebrochen

Payload-Felder: job_id (integer), draft_id (integer), result (string — nur bei completed)

Das result-Feld ist entweder "optimized" (Inhalt wurde geändert) oder "nothing_to_optimize" (Inhalt war bereits gut optimiert).

{
  "id": 125,
  "type": "content_editor.auto_optimize.completed",
  "timestamp": "2024-06-01T12:10:00Z",
  "payload": {
    "job_id": 456,
    "draft_id": 5632898,
    "result": "optimized"
  }
}

SEO-Score (nur V2)

Ereignis

Wann es ausgelöst wird

content_editor.seo_score.calculated

SEO-Score wurde berechnet

content_editor.seo_score.failed

SEO-Score-Berechnung fehlgeschlagen


AI Search Score (nur V2)

Ereignis

Wann es ausgelöst wird

content_editor.ai_search_score.calculated

KI-Suchbewertung berechnet

content_editor.ai_search_score.failed

KI-Suchbewertungsberechnung fehlgeschlagen


Gliederungsgenerierung (nur V2)

Ereignis

Wann es ausgelöst wird

content_editor.outline.completed

Gliederungsgenerierung abgeschlossen

content_editor.outline.failed

Gliederungsgenerierung fehlgeschlagen


Konkurrenzladen (nur V2)

Ereignis

Wann es ausgelöst wird

content_editor.seo_guidelines.competitors.load_more.completed

Zusätzliche Konkurrenten geladen

content_editor.seo_guidelines.competitors.load_more.failed

Laden zusätzlicher Konkurrenten fehlgeschlagen


Vollständige Ereignisreferenz

Ereignis

Gilt für

content_editor.initialization.completed

V1 + V2

content_editor.initialization.failed

V1 + V2

content_editor.content_score.recalculated

V1 + V2

content_editor.ai_article.completed

V1 + V2

content_editor.ai_article.waiting_for_user_input

V1 + V2

content_editor.ai_article.failed

V1 + V2

content_editor.auto_optimize.completed

V1 + V2

content_editor.auto_optimize.failed

V1 + V2

content_editor.auto_optimize.cancelled

V1 + V2

content_editor.seo_score.calculated

Nur V2

content_editor.seo_score.failed

Nur V2

content_editor.ai_search_score.calculated

Nur V2

content_editor.ai_search_score.failed

Nur V2

content_editor.outline.completed

Nur V2

content_editor.outline.failed

Nur V2

content_editor.seo_guidelines.competitors.load_more.completed

Nur V2

content_editor.seo_guidelines.competitors.load_more.failed

Nur V2


Zusätzliche Ressourcen:

Surfer API Einführung

Surfer API Dokumentation (v1)

Surfer API Dokumentation (v2)

Surfer API Anwendungsbeispiele

War diese Antwort hilfreich für dich?
😞
😐
😁