Zum Inhalt springen

Schnellstart mit der Feedivo-API

Entwicklerhandbuch · Zuletzt aktualisiert am 21.08.2026

Auf dieser Seite
  1. Der Weg zum ersten Ergebnis
  2. API-Token erzeugen
  3. Einen Feed abrufen
  4. Einheitliche Antwortstruktur
  5. Mit Cursor blättern
  6. Antworten effizient zwischenspeichern
  7. Nur das Neue holen
  8. Mediendaten verarbeiten
  9. Fehler zuverlässig behandeln
  10. Rate-Limits einhalten
  11. Push-Benachrichtigungen für eigene Apps

Mit der versionierten JSON-API bindest du gefilterte Feedivo-Feeds in eigene Anwendungen und serverseitige Websites ein. Der API-Zugriff ist ab dem Pro-Tarif verfügbar.

Der Weg zum ersten Ergebnis#

  1. API-Verknüpfung erstellen und Feed-Umfang festlegen.
  2. Das einmal angezeigte Token sicher speichern.
  3. Einen Feed mit Bearer-Authentifizierung abrufen.
  4. Für regelmäßige Abrufe ETag und updated_since verwenden.

API-Token erzeugen#

Die API-Verknüpfung in Feedivo: Token-Präfix, Basis-URL und die Feeds, auf die der Zugriff reicht

Unter Verknüpfungen → Individuell legst du eine API-Verknüpfung an und bestimmst, welche Feeds sie sehen darf. Das Token wird einmal angezeigt.

Vorsicht

Geht das Token verloren, lässt es sich nicht wiederherstellen. Erzeuge in diesem Fall ein neues und ersetze das alte in deiner Anwendung.

Einen Feed abrufen#

curl -H "Authorization: Bearer $FEEDIVO_TOKEN" \
  "https://feedivo.de/api/v1/feeds/DEINE-FEED-UUID/posts?limit=25"
$ch = curl_init('https://feedivo.de/api/v1/feeds/DEINE-FEED-UUID/posts?limit=25');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('FEEDIVO_TOKEN')],
]);
$response = json_decode(curl_exec($ch), true);
const res = await fetch(
  'https://feedivo.de/api/v1/feeds/DEINE-FEED-UUID/posts?limit=25',
  { headers: { Authorization: `Bearer ${process.env.FEEDIVO_TOKEN}` } }
);
const { data, meta } = await res.json();

Einheitliche Antwortstruktur#

Jede Antwort hat dieselben drei Schlüssel:

{
  "data":   [ /* das Ergebnis */ ],
  "meta":   { /* Feed-Angaben, Paginierung */ },
  "errors": [ /* leer, wenn alles gut ging */ ]
}

Das gilt auch im Fehlerfall; du kannst also immer gleich auswerten. meta ist null, wo es nichts zu sagen gibt — nie ein leeres Objekt.

Mit Cursor blättern#

Die Postsliste blättert über einen Cursor, nicht über Seitenzahlen:

"meta": { "pagination": { "next_cursor": "eyJ…", "count": 25 } }

Den Wert hängst du als cursor an den nächsten Aufruf. Ist next_cursor null, war das die letzte Seite.

Hinweis

Warum kein ?page=2? Weil zwischen zwei Aufrufen neue Posts dazukommen können. Mit Seitenzahlen würdest du dann Posts doppelt sehen oder überspringen; der Cursor merkt sich die Position im Datenbestand.

Antworten effizient zwischenspeichern#

Antworten tragen ein ETag. Sende es beim nächsten Mal als If-None-Match mit:

curl -H "Authorization: Bearer $FEEDIVO_TOKEN" \
     -H 'If-None-Match: "abc123"' \
     "https://feedivo.de/api/v1/feeds/DEINE-FEED-UUID/posts"

Hat sich nichts geändert, antwortet die API mit 304 und ohne Rumpf. Für regelmäßige Abrufe ist das der schonendste Weg.

Der ETag gilt für genau diese Abfrage — Feed samt limit, cursor und Zeitfiltern. Frag deshalb regelmäßig dieselbe erste Seite ab; ändert sich vorn nichts, kostet der Abgleich fast nichts.

Nur das Neue holen#

Zwei Zeitfilter, die leicht zu verwechseln sind:

Parameter Filtert auf Wofür
since Veröffentlichungszeitpunkt „Zeig mir den Sommer 2026"
updated_since Zeitpunkt, zu dem Feedivo den Post erstmals gesehen hat „Was ist seit meinem letzten Abgleich dazugekommen?"

Für einen inkrementellen Abgleich ist fast immer updated_since die richtige Wahl:

curl -H "Authorization: Bearer $FEEDIVO_TOKEN" \
     "https://feedivo.de/api/v1/feeds/DEINE-FEED-UUID/posts?updated_since=2026-08-13T09:00:00%2B00:00"

Setze den Wert auf den Zeitpunkt deines letzten erfolgreichen Laufs.

Achtung

Mit since geht das nicht zuverlässig: Ein Post trifft bis zu ein Abruf-Intervall später bei uns ein, als er veröffentlicht wurde. Wer since exakt auf den letzten Abgleich setzt, verpasst deshalb Posts. Wenn du bei since bleiben musst, überlappe großzügig — etwa zwei Tage.

Hinweis

Gelöschtes erkennt kein Zeitfilter. Ist ein Post beim Netzwerk verschwunden, verschwindet er auch bei uns — aber ein inkrementeller Abruf kann davon nicht berichten, er liefert ja nur Vorhandenes. Wer einen Feed spiegelt, braucht dafür in Abständen einen Vollabgleich (alle Seiten durchblättern) und entfernt lokal, was nicht mehr vorkam.

Mediendaten verarbeiten#

Jeder Eintrag in media trägt neben den Adressen auch width/height (bei Videos die des Vorschaubilds — dasselbe Seitenverhältnis), mime, bytes und cached:

{ "url": "…", "thumbnail_url": "…", "type": "image", "embed_url": null,
  "width": 1080, "height": 1350, "mime": "image/jpeg", "bytes": 284913, "cached": true }

Mit den Maßen baust du dein Layout, bevor das erste Bild geladen ist — kein Nachrücken. null heißt „nicht gemessen", nie „0".

Wichtig

cached: false heißt: Mindestens eine Adresse dieses Mediums zeigt noch auf die ursprüngliche Plattform und kann zeitlich begrenzt sein. Ein Ladefehler ist dort möglicherweise vorübergehend und kein Grund, den Post sofort zu verwerfen. Bei cached: true stehen stabile Feedivo-Adressen bereit.

Fehler zuverlässig behandeln#

Jeder Fehler trägt einen stabilen code. Steuere deine Programmlogik über diesen Code, nicht über den Meldungstext:

{ "data": null, "meta": null,
  "errors": [{ "status": 403, "code": "entitlement_paused", "message": "…" }] }
code Status Was zu tun ist
invalid_token 401 Neues Token erzeugen. Wiederholen hilft nie
entitlement_paused 403 Tarif prüfen. Ein neues Token hilft nicht
feed_not_found 404 Feed-UUID und Umfang der Verknüpfung prüfen
post_not_found 404 Der Feed liefert diesen Post nicht (mehr)
invalid_parameter 422 Anfrage korrigieren; die Meldung nennt den Parameter
rate_limited 429 Warten, Retry-After bzw. X-RateLimit-Reset beachten
server_error 5xx Mit wachsendem Abstand erneut versuchen

Wichtig

401 und 403 sind nicht austauschbar. Bei 401 prüfst du das Token, bei 403 den Tarif und den freigegebenen Umfang. Eine 429-Antwort bedeutet, dass der Client vor dem nächsten Versuch warten soll.

Hinweis

Ein Ausfall ist keine Aussage über deinen Feed. Bei Verbindungsfehlern, 5xx oder unlesbarer Antwort behältst du deine lokale Kopie. Nur eine wohlgeformte Antwort, die etwas nicht mehr enthält, rechtfertigt Aufräumen.

Rate-Limits einhalten#

Je Verknüpfung stehen in Pro 300 und in Business 600 Anfragen je Minute zur Verfügung. Die verbleibende Zahl und der nächste Reset stehen in den X-RateLimit-*-Kopfzeilen jeder Antwort.

Push-Benachrichtigungen für eigene Apps#

Deine App muss neue Posts nicht selbst laufend abfragen, um Nutzer zu benachrichtigen: Mit einer OneSignal-Verknüpfung sendet Feedivo bei neuen Posts automatisch eine Push-Benachrichtigung über dein OneSignal-Konto. Feed- und Post-Kennung reisen im Datenfeld der Benachrichtigung mit, sodass deine App den Post direkt öffnen kann (im Business-Tarif).

Der vollständige Endpunkt-Katalog steht in der API-Referenz.

Frage nicht beantwortet? Schreib uns — wir ergänzen die Seite.