Citapult

Artikel per Webhook an dein System schicken.

Für jedes andere CMS und jeden eigenen Workflow: Citapult schickt jeden veröffentlichten Artikel als JSON an eine Adresse, die du festlegst.

Aktualisiert am

Was du brauchst

  • Eine öffentlich erreichbare HTTPS-Adresse, die POST-Anfragen mit JSON annimmt.
  • Eine Antwort mit einem 2xx-Status innerhalb von 20 Sekunden. Den Inhalt der Antwort liest Citapult nicht.
  • Optional einen Token, an dem dein Empfänger erkennt, dass die Anfrage von Citapult kommt.

Einrichten

  1. 1. Empfänger bauen

    Leg einen Endpunkt an, der POST-Anfragen annimmt und mit einem 2xx-Status antwortet. Nutzt du einen Token, prüf ihn im Header Authorization: Bearer <Token>. Citapult folgt keinen Weiterleitungen, trag also die endgültige Adresse ein.

  2. 2. Integration hinzufügen

    Öffne in Citapult Einstellungen → Integrationen, wähl unter „Art“ Webhook und trag die Adresse ein, dazu bei „Token (optional)“ deinen Token. Der Token wird verschlüsselt gespeichert und nie wieder angezeigt.

  3. 3. Testen

    Klick bei der Integration auf „Testen“. Citapult schickt dann das Ereignis test ohne Artikel. Antwortet dein Empfänger mit 2xx, steht da „Der Empfänger hat geantwortet.“

  4. 4. Artikel veröffentlichen

    Öffne einen fertigen Artikel und klick auf „Veröffentlichen“. Bis dein Empfänger den Artikel einmal mit 2xx angenommen hat, kommt das Ereignis publish_articles, danach bei jedem Senden update_article.

  5. 5. Optional: automatisch veröffentlichen

    Schalte bei den Integrationen „Automatisch veröffentlichen“ ein. Dann gehen Artikel im Status „Zu prüfen“ an ihrem geplanten Tag ohne Klick an alle Integrationen. Die Uhrzeit stellst du im Kalender unter „Zeitplan“ ein.

Die Ereignisse

Jede Anfrage ist ein JSON-Objekt mit event_type, timestamp und data, gesendet mit Content-Type: application/json.

  • publish_articles: bis dein Empfänger den Artikel einmal mit 2xx angenommen hat. Der Artikel steht in data.articles, einer Liste mit einem Eintrag.
  • update_article: jedes Senden danach. Der Artikel steht in data.article.
  • test: der Klick auf „Testen“, mit leerem data.
publish_articles
{
  "event_type": "publish_articles",
  "timestamp": "2026-10-08T08:00:04.512Z",
  "data": {
    "articles": [
      {
        "id": "9b2f4c1e-…",
        "title": "Sauerteig ansetzen: Schritt für Schritt",
        "slug": "sauerteig-ansetzen",
        "content_html": "<p>…</p>",
        "meta_description": "…",
        "language": "de-DE",
        …
      }
    ]
  }
}
update_article
{
  "event_type": "update_article",
  "timestamp": "2026-10-09T14:21:37.090Z",
  "data": {
    "article": { … }
  }
}

Die Felder eines Artikels

Jedes Feld ist immer dabei: Fehlt ein Wert, ist er null, eine fehlende Liste ist leer. Dein Empfänger kann jede Anfrage mit dem JSON Schema prüfen.

FeldInhalt
idDie ID des Artikels, bleibt bei jedem Update gleich
titleDer Titel, gedacht als H1
slugDas Ende der URL, nach dem ersten Veröffentlichen fest
content_htmlDer Artikeltext als HTML, ohne die H1. Rohes HTML aus dem Text kommt als Text an, nur YouTube-Einbettungen bleiben.
content_markdownDerselbe Text als Markdown
meta_title, meta_descriptionMeta-Titel und Meta-Beschreibung
image_url, image_altTitelbild und sein Alt-Text
languageSprache und Land des Artikels, etwa de-DE
tagsEine Liste mit dem Haupt-Keyword des Artikels
json_ldDie strukturierten Daten als Liste, je ein application/ld+json-Skript
sourcesDie Quellen mit url und title
authorName, dazu Rolle und Kurzbio, falls in den Einstellungen gesetzt, oder null
created_atWann der Artikel angelegt wurde, im ISO-Format

Fehler und Wiederholungen

Antwortet dein Empfänger nicht mit 2xx oder nicht innerhalb von 20 Sekunden, steht der Grund beim Artikel in der Liste unter dem Button, etwa „fehlgeschlagen: HTTP 500“. Der Status des Artikels ändert sich dann nicht.

  • Mit „Veröffentlichen“ oder „Aktualisieren“ schickst du ihn erneut, an alle Integrationen der Website. „Aktualisieren“ heißt der Button, sobald eine Integration den Artikel angenommen hat.
  • Mit „Automatisch veröffentlichen“ versucht Citapult es alle 15 Minuten wieder, solange der Artikel auf „Zu prüfen“ steht, bis zum Ende des Tages nach dem geplanten Tag (UTC).
  • Derselbe Artikel kann deshalb mehrmals ankommen, auch mehrmals als publish_articles. Behandle eine id, die du schon kennst, als Update und nicht als neuen Beitrag.

Integration entfernen

Fügst du die Integration später neu hinzu, kommt jeder Artikel beim nächsten Senden wieder als publish_articles. Erkennt dein Empfänger die id, entsteht dabei kein doppelter Beitrag.

Fehler und Fragen

„Gib eine öffentlich erreichbare HTTPS-Adresse an.“

Die Adresse muss mit https:// beginnen und aus dem Internet erreichbar sein. Adressen im lokalen Netz nimmt Citapult nicht an.

„Zugangsdaten gehören nicht in die Adresse.“

In der Adresse stehen Benutzer und Passwort, etwa https://name:passwort@…. Nimm sie raus und nutz stattdessen das Feld „Token (optional)“. Der Token kommt als Authorization: Bearer <Token> an.

„Der Test ist fehlgeschlagen (HTTP 401).“

Dein Empfänger hat den Token abgelehnt. Prüf, ob er denselben Token erwartet und ihn aus dem Header Authorization nach Bearer liest.

„… (HTTP 301)“ oder ein anderer 3xx-Status

Die Adresse leitet weiter, etwa auf eine Variante mit Schrägstrich am Ende. Citapult folgt keiner Weiterleitung, damit der Token nicht bei einem anderen Server landet. Trag die Zieladresse ein.

„… (ENOTFOUND)“ oder „… (ECONNREFUSED)“

Den Hostnamen gibt es nicht, oder der Server nimmt keine Verbindung an. Prüf die Adresse und ob dein Empfänger läuft.

Der Empfänger braucht länger als 20 Sekunden

Nach 20 Sekunden bricht Citapult ab und zeigt den Fehler unter dem Button. Antworte zuerst mit 2xx und verarbeite den Artikel danach.

Wie prüfe ich, dass eine Anfrage von Citapult kommt?

Über den Token: Citapult schickt ihn bei jeder Anfrage als Authorization: Bearer <Token>. Eine Signatur gibt es nicht. Nimm also einen langen, zufälligen Token.

So funktioniert das Veröffentlichen

Drei Tage Pro für 1 €.

Danach Regulär199 € jetzt99 € pro Website im Monat, vorher jederzeit kündbar.