← Zurück zu RankBloom

Publish-API

RankBloom schreibt SEO-Blogartikel für die Websites, die Sie damit verbinden. Über die Publish-API verlässt der fertige Inhalt RankBloom und landet dort, wo Sie ihn haben wollen — auf einer WordPress-Website, in einem CMS, auf einer Automatisierungsplattform oder in Ihrem eigenen Code.

Es ist dieselbe API, die hinter dem offiziellen WordPress-Plugin und den Integrationen für Zapier und Make steckt.

Basis-URL

https://app.getrankbloom.com/api/publish

Authentifizierung

Jede Anfrage enthält ein Verbindungs-Token. Erstellen Sie eines in RankBloom unter Verbindungen: Wählen Sie die Website und die Plattform und klicken Sie auf Verbindung erstellen. Das Token wird nur einmal angezeigt und ausschließlich als Hash gespeichert — bewahren Sie es also gleich auf.

Ein Token gilt für genau eine Website. Senden Sie es in einem dieser Header:

Authorization: Bearer rb_live_xxxxxxxx
X-RankBloom-Token: rb_live_xxxxxxxx
X-API-KEY: rb_live_xxxxxxxx

Drei Varianten werden akzeptiert: Shared- und Managed-Hoster entfernen regelmäßig den Header Authorization, und manche Automatisierungsplattformen senden standardmäßig den Header X-API-KEY mit.

Schreiben Sie das Token niemals in einen Query-String. Es landet sonst in Access-Logs und bei jedem Proxy auf dem Weg. Die API liest es dort ohnehin nicht aus.

Das Widerrufen einer Verbindung wirkt sofort. Widerrufene und unbekannte Token liefern dieselbe Antwort, damit niemand über den Unterschied gültige Token erraten kann.

Endpunkte

GET /v1/ping

Prüft ein Token und meldet, woran es gebunden ist. Nutzen Sie den Endpunkt als Verbindungstest.

curl https://app.getrankbloom.com/api/publish/v1/ping \
  -H "Authorization: Bearer rb_live_xxxxxxxx"
{
  "ok": true,
  "contract_version": 1,
  "label": "Example Site",
  "connection": { "id": "…", "name": "Make — Example Site", "platform": "make" },
  "site": { "id": "…", "name": "Example Site", "url": "https://example.com" }
}

label ist ein flacher, gut lesbarer Name für die Verbindung. Automatisierungsplattformen beschriften damit das verbundene Konto.

GET /v1/posts

Aktuelle Beiträge der verbundenen Website, neueste zuerst. Nur lesend — der Aufruf ändert nichts und lässt sich gefahrlos getaktet abfragen.

ParameterTypStandardHinweise
limitinteger25Maximal 100
offsetinteger0So viele Beiträge überspringen
sinceISO 8601Nur Beiträge, die ab diesem Zeitpunkt erstellt wurden
curl "https://app.getrankbloom.com/api/publish/v1/posts?limit=100&offset=0" \
  -H "Authorization: Bearer rb_live_xxxxxxxx"
{
  "ok": true,
  "contract_version": 1,
  "count": 46,
  "limit": 100,
  "offset": 0,
  "posts": [ … ]
}

Paginierung. Erhöhen Sie offset um limit und arbeiten Sie sich so durch das Archiv zurück. Es gibt keine Gesamtzahl: Eine Seite mit weniger Einträgen als limit bedeutet, dass Sie das Ende erreicht haben. Die Ergebnisse sind nach Erstellungszeit und dann nach ID sortiert, sodass die Paginierung auch dann stabil bleibt, wenn zwei Beiträge denselben Zeitstempel tragen.

POST /v1/status

Melden Sie RankBloom, was mit einem Beitrag passiert ist. Erst das macht aus „wir haben ihn übergeben“ ein „er ist live“ — und der Beitrag wird nicht erneut angeboten.

curl -X POST https://app.getrankbloom.com/api/publish/v1/status \
  -H "Authorization: Bearer rb_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "post_id": "b86cbffe-…",
    "status": "delivered",
    "external_url": "https://example.com/my-post",
    "external_id": "123"
  }'
FeldPflichtHinweise
post_idjaDie id aus /v1/posts
statusjadelivered, failed oder skipped
external_urlneinWo er live gegangen ist
external_idneinDie eigene ID des Zielsystems
errorneinWarum es fehlgeschlagen ist, sofern zutreffend

Ein Token darf nur Beiträge melden, die zu seiner eigenen Website gehören.

Payload eines Beitrags

Ein kanonisches Format, versioniert über contract_version.

FeldTypHinweise
idstringStabil. Nutzen Sie den Wert als Idempotenz-Schlüssel
title, slug, excerptstringslug ist der endgültige, bereits eindeutige Slug
content_html, content_mdstringDer Beitragstext, in beiden Formaten
meta_title, meta_descriptionstringSEO-Metadaten
primary_keyword, keywords, category, tagsstring / arrayTaxonomie
canonical_urlstringCanonical, sofern gesetzt
schema_json_ldobjectGeparst, nie ein JSON-String
featured_image_urlstringGehostetes Bild, sofort nutzbar
audio_urlstringAudioversion, sofern der Beitrag eine hat
audio_duration_seconds, audio_voicenumber / stringDetails zur Audioversion
statusstringpublished oder draft
author, author_title, author_urlstringAutorenzeile
created_at, published_atISO 8601Zeitstempel

Jeder Schlüssel ist immer vorhanden. Ein nicht zutreffender Wert kommt als null zurück — er wird nie weggelassen. Ein Beitrag ohne Audioversion hat einfach audio_url: null; das ist der Normalfall und kein Fehler. Bauen Sie Ihre Integration so, dass sie mit null-Werten rechnet statt mit fehlenden Schlüsseln.

Der API-Vertrag ist rein additiv. Felder werden nie umbenannt, im Typ geändert oder entfernt, denn Integrationen im Produktivbetrieb fragen Version 1 auf unbestimmte Zeit weiter ab. Ein Breaking Change erschiene als neue Version, die parallel zu dieser ausgeliefert wird.

Fehler

Fehler liefern einen passenden HTTP-Status und einen JSON-Body mit einer verständlichen Fehlermeldung.

{ "ok": false, "error": "Invalid or revoked connection token." }
StatusBedeutung
400Ein Pflichtfeld fehlt oder ist fehlerhaft
401Token fehlt, ist unbekannt oder widerrufen
404Der Beitrag gehört nicht zu dieser Verbindung

Fertige Integrationen

Sie müssen keinen Code schreiben — für diese Plattformen ist die API bereits fertig integriert:

Support

Haben Sie Fragen zur API oder verhält sich etwas anders als dokumentiert? Schreiben Sie an support@getrankbloom.com.