Zum Inhalt springen

SPREVA startet bald.

Trag dich in die Warteliste ein und wir schreiben dir ein einziges Mal, sobald dein Konto bereit ist.

Kein Newsletter. Nur eine E-Mail, wenn SPREVA startet.

Referenz

Webhooks

Bekomme eine signierte Anfrage auf deinem eigenen Server, wenn ein Beitrag veröffentlicht wird oder fehlschlägt, eine Datei bereit ist oder ein soziales Konto Aufmerksamkeit braucht.

Einen Endpunkt hinzufügen

  1. 1

    Öffne in SPREVA Entwicklung, dann Webhooks, füge die Adresse deines Servers hinzu und wähle die Ereignisse, die er bekommen soll. Die Adresse muss öffentlich erreichbar sein und innerhalb von 10 Sekunden mit einem 2xx-Status antworten.

  2. 2

    Kopiere das Geheimnis des Endpunkts. Es wird nur einmal gezeigt, und damit prüfst du die Signatur jeder Anfrage.

  3. 3

    Nutze Test senden. Es schickt ein webhook.test-Ereignis, signiert wie die echten, und Letzte Zustellungen zeigt, welchen Status dein Server geantwortet hat und wie lange es gedauert hat.

Einen Endpunkt kannst du auch über die REST-API hinzufügen, mit einem Schlüssel mit webhooks:write.

Was jede Anfrage enthält

Ein POST mit einem JSON-Körper und vier Headern:

  • x-spreva-event: das Ereignis, etwa target.published.
  • x-spreva-event-id: dieselbe wie die id im Körper, und gleich bei jeder Wiederholung und jedem erneuten Senden.
  • x-spreva-timestamp: wann die Anfrage signiert wurde, in Unix-Sekunden.
  • x-spreva-signature: v1= gefolgt von der Signatur.
JSON
{
  "id": "7f3c2d10-0000-4000-8000-000000000000",
  "type": "target.published",
  "createdAt": "2026-10-01T09:00:02.412Z",
  "workspaceId": "0b9f6c1e-0000-4000-8000-000000000001",
  "data": {
    "type": "TargetPublished",
    "workspaceId": "0b9f6c1e-0000-4000-8000-000000000001",
    "postId": "5d2a7c3e-0000-4000-8000-000000000002",
    "targetId": "9a1f4b7d-0000-4000-8000-000000000003",
    "provider": "instagram",
    "remoteId": "17900000000000000",
    "remoteUrl": "https://www.instagram.com/p/EXAMPLE/"
  }
}

data ist das Ereignis selbst, und data.type ist sein Name innerhalb von SPREVA. Mit den Ids in data holst du das ganze Objekt über die REST-API.

Ereignisse

Ein Endpunkt bekommt die Ereignisse, die er gewählt hat. Test senden erreicht ihn unabhängig davon.

Beiträge

post.created
Ein Beitrag wurde erstellt
post.scheduled
Ein Beitrag hat ein Datum bekommen
post.published
Ein Beitrag ging in jedes Konto raus
post.partial
Ein Beitrag endete mit unterschiedlichen Ergebnissen je Konto
post.failed
Ein Beitrag ist in jedem Konto fehlgeschlagen

Veröffentlichungen (eine pro Konto)

target.published
Ein Konto hat den Beitrag veröffentlicht
target.failed
Ein Konto konnte nicht veröffentlichen
target.awaiting_user
Ein Konto braucht dich, um die Veröffentlichung in seiner eigenen App abzuschließen

Medien

media.ready
Eine hochgeladene Datei ist fertig
media.failed
Eine Datei konnte nicht verarbeitet oder erzeugt werden

Soziale Konten

connection.expired
Ein soziales Konto muss neu verbunden werden
connection.revoked
Ein soziales Konto hat seine Berechtigung zurückgezogen

Statistiken

analytics.updated
Für einen veröffentlichten Beitrag sind neue Zahlen da

Die Signatur prüfen

Die Signatur ist ein HMAC-SHA256 aus dem Zeitstempel, einem Punkt und dem Rohtext des Körpers, mit dem Geheimnis des Endpunkts als Schlüssel. Weise jede Anfrage zurück, deren Signatur nicht passt.

JavaScript
import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody: the request body as a string, before any JSON parsing
export function isFromSpreva(rawBody, headers, secret) {
  const signed = headers["x-spreva-timestamp"] + "." + rawBody;
  const expected = Buffer.from("v1=" + createHmac("sha256", secret).update(signed).digest("hex"));
  const received = Buffer.from(headers["x-spreva-signature"] ?? "");
  return received.length === expected.length && timingSafeEqual(received, expected);
}
Prüfe sie mit dem Körper genau so, wie er ankam, bevor du ihn als JSON liest: Einlesen und neu Schreiben ändert die Bytes, und die Signatur passt nicht mehr.

Wiederholungen und erneutes Senden

  • Antworte innerhalb von 10 Sekunden mit einem 2xx-Status. Alles andere, oder keine Antwort, wird bis zu 5-mal wiederholt: nach 30 Sekunden, 2 Minuten, 10 Minuten, 1 Stunde und 6 Stunden.
  • Weiterleitungen werden nicht verfolgt, also nutze die endgültige Adresse deines Endpunkts.
  • Eine Wiederholung oder ein erneutes Senden trägt dieselbe x-spreva-event-id: daran erkennst du ein Ereignis, das du schon verarbeitet hast.
  • Zustellung erneut senden unter Letzte Zustellungen schickt ein Ereignis noch einmal, samt Wiederholungen, falls dein Server noch fehlschlägt, du kannst deinen Endpunkt also reparieren, ohne zweimal zu veröffentlichen.