Webhooks: das Ergebnis jedes Uploads erhalten
Webhook-Ereignisse, Inhalt, die HMAC-SHA256-Signatur-Header, ein Prüfbeispiel in Node.js, Wiederholungen und das Test-Ereignis unter API & Webhooks.
Ein Webhook ruft Ihre Adresse auf, sobald etwas passiert – ein Beitrag wurde veröffentlicht oder ist fehlgeschlagen, ein Konto wurde verbunden oder muss neu verbunden werden. Sie müssen den Status nicht mehr regelmäßig abfragen.
Webhook einrichten
- Öffnen Sie API & Webhooks.
- Klicken Sie unter Webhooks auf Neuer Webhook.
- Geben Sie eine HTTPS-Adresse ein, die aus dem Internet erreichbar ist, und wählen Sie die Ereignisse.
- Klicken Sie auf Anlegen und kopieren Sie das Signatur-Geheimnis – es wird nur einmal angezeigt.
Die Upload-Post-kompatible API bietet dasselbe: POST /api/uploadposts/users/notifications mit webhook_url und webhook_events; ein neues Geheimnis liefert POST /api/uploadposts/users/webhook-secret. Die Anzahl der Webhooks hängt von Ihrem Plan ab.
Ereignisse
| Ereignis | Wann |
|---|---|
upload_completed |
eine Plattform hat einen Beitrag abgeschlossen – erfolgreich oder nicht (ein Ereignis je Plattform) |
social_account_connected |
ein Konto wurde verbunden oder neu verbunden |
social_account_disconnected |
ein Konto wurde entfernt |
social_account_reauth_required |
ein Zugang ist abgelaufen, das Konto muss neu verbunden werden |
Inhalt
Jede Zustellung ist ein POST mit JSON:
{
"event": "upload_completed",
"request_id": "2c0f…",
"job_id": null,
"external_id": "video-123",
"profile_username": "meine-marke",
"platform": "youtube",
"media_type": "video",
"title": "Mein Video",
"caption": "",
"result": { "success": true, "url": "https://www.youtube.com/watch?v=…", "post_id": "…" },
"user_email": "inhaber@example.com",
"created_at": "2026-11-07T12:00:03.412Z"
}
Hat die Plattform einen Hinweis gegeben (etwa YouTube hat ein Video auf privat gesetzt), steht er in result.warnings.
Signatur prüfen
Jede Zustellung hat diese Header:
X-VA-SignatureundX-Upload-Post-Signature– jeweilssha256=gefolgt vom Hex-HMAC-SHA256 über"<timestamp>.<roher Inhalt>"mit Ihrem Signatur-GeheimnisX-Upload-Post-Timestamp– Unix-Zeit in SekundenX-Upload-Post-Event– der Name des Ereignisses
Berechnen Sie die Signatur über den rohen Inhalt der Anfrage, vor dem JSON-Parsen, und vergleichen Sie zeitkonstant. Weisen Sie alte Zeitstempel ab, um Wiederholungsangriffe zu verhindern.
// Node.js (Express): app.post('/hook', express.raw({ type: 'application/json' }), handler)
const crypto = require('crypto');
function verify(req, secret) {
const ts = req.get('X-Upload-Post-Timestamp');
const sig = req.get('X-VA-Signature') || req.get('X-Upload-Post-Signature') || '';
if (!ts || Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(`${ts}.${req.body.toString('utf8')}`).digest('hex');
return sig.length === expected.length && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
}
function handler(req, res) {
if (!verify(req, process.env.VA_WEBHOOK_SECRET)) return res.sendStatus(401);
const event = JSON.parse(req.body.toString('utf8'));
// … Ihre Logik …
res.sendStatus(200);
}
Wiederholungen
Antworten Sie innerhalb weniger Sekunden mit einem 2xx-Status. Ist Ihr Server nicht erreichbar oder antwortet mit einem Fehler, versuchen wir es bis zu 6-mal mit wachsendem Abstand erneut. Längere Arbeiten erledigen Sie besser nach der Antwort. Die letzten Zustellungen mit Statuscode und Fehler sehen Sie unter Letzte Zustellungen in API & Webhooks.
Durch Wiederholungen kann ein Ereignis zweimal ankommen. Erkennen Sie Doppelte an request_id plus platform.
Test-Ereignis senden
Klicken Sie in API & Webhooks auf Test-Ereignis senden. Jeder Webhook erhält ein upload_completed mit "test": true und einer Beispiel-YouTube-Adresse – ideal, um Ihre Signaturprüfung zu testen.
Mit n8n, Make und Zapier
Richten Sie den Webhook auf einen Webhook-Auslöser Ihres Werkzeugs (n8n-Knoten „Webhook“, Make „Custom webhook“, Zapier „Catch Hook“). Beispiele stehen auf den Seiten zu n8n, Make und Zapier sowie auf der Webhook-Integrationsseite.