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
Ö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
Kopiere das Geheimnis des Endpunkts. Es wird nur einmal gezeigt, und damit prüfst du die Signatur jeder Anfrage.
- 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, etwatarget.published.x-spreva-event-id: dieselbe wie dieidim 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.
{
"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.
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);
}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.