Was ist ein Webhook?
Ein Webhook ist ein HTTP-Callback: Statt dass dein System pixx.io ständig fragt „Hat sich etwas geändert?“ (Polling), meldet sich pixx.io von selbst, sobald ein definiertes Ereignis eintritt (Push).
| Polling | Webhook | |
|---|---|---|
| Prinzip | Regelmäßige Anfrage an die API | pixx.io sendet aktiv einen HTTP-Request |
| Aktualität | Abhängig vom Abfrageintervall | Nahezu in Echtzeit |
| Ressourcen | Viele unnötige Anfragen | Nur bei tatsächlicher Änderung |
| Umsetzung | API-Client mit Zeitsteuerung nötig | Öffentlich erreichbarer Endpunkt nötig |
Bildlich gesprochen: Polling ist, alle fünf Minuten an der Wohnungstür nachzuschauen, ob Post gekommen ist. Ein Webhook ist die Türklingel — sie meldet sich, wenn's so weit ist.
Funktionsprinzip in pixx.io
Hinter der Ziel-URL kann technisch alles stecken — pixx.io kümmert sich nur um die Zustellung des Events, was danach passiert liegt vollständig bei dir.
Webhook in pixx.io einrichten
- Öffne die Einstellungen (Zahnrad-Symbol unten links) → Verwaltung → Webhooks.
- Klicke auf Neuer Webhook.
- Fülle das Formular „Webhook bearbeiten“ aus (siehe Tabelle unten).
- Wähle im Bereich Webhook Events die gewünschten Events aus. Events sind in Kategorien gruppiert (z. B. file, collection, comment). Jede Kategorie lässt sich aufklappen; ein ausgefülltes Minus-Symbol an der Kategorie-Checkbox zeigt eine Teilauswahl an.
- Speichern — der Webhook ist ab sofort aktiv.
| Feld | Beschreibung |
|---|---|
| Name | Sprechender Name, z. B. „KI-Verarbeitung“ |
| URL * | Öffentlich erreichbarer HTTPS-Endpunkt, an den pixx.io den Request schickt |
| Secret | Geheimer Schlüssel zur Signaturprüfung (dringend empfohlen, siehe Kapitel 05) |
| Beschreibung | Interne Doku, wofür der Webhook da ist |
Event-Kategorien im Überblick
Die Events sind nach Objekttyp gruppiert. Insgesamt stehen 781 Events in 55 Kategorien zur Verfügung (Stand: aktueller Export). Die größten Kategorien:
| Kategorie | Events | Betrifft |
|---|---|---|
| portal | 100 | Presseportale / externe Portale |
| permissionGroup | 61 | Rechtegruppen |
| space | 55 | Mediaspace-Konfiguration |
| file | 55 | Dateien — siehe Detailtabelle unten |
| settings | 51 | Branding, SMTP, Wasserzeichen u. a. |
| generalSettings | 40 | Allgemeine Systemeinstellungen |
| externalShare | 28 | Externe Freigaben |
| uploadLink | 26 | Upload-Links |
| spaceNavigation | 24 | Navigation (Header/Footer) |
| user | 21 | Benutzerkonten |
Die Kategorie file im Detail
Ein klares Namensschema deckt sowohl den Lebenszyklus einer Datei als auch jede einzelne Metadaten-Änderung granular ab.
| Event | Beschreibung |
|---|---|
| fileCreated | Neue Datei wurde hochgeladen |
| fileDeleted | Datei wurde gelöscht |
| fileDeletedDuplicate | Datei wurde als Dublette gelöscht |
| fileDownloaded | Datei wurde heruntergeladen |
fileModified*-Events (Auswahl) — für praktisch jedes Feld gibt es ein eigenes, granulares Event:
| Event | Beschreibung |
|---|---|
| fileModifiedFileName | Dateiname geändert |
| fileModifiedDescription | Beschreibung geändert |
| fileModifiedCreator | Urheber/Fotograf geändert |
| fileModifiedCreateDate | Erstellungsdatum geändert |
| fileModifiedUserID | Zuständiger Nutzer geändert |
| fileModifiedRating | Bewertung (Sterne) geändert |
| fileModifiedRotation | Datei gedreht |
| fileModifiedSubject | Motiv/Thema geändert |
| fileModifiedFileStateID | Datei-Status geändert (z. B. im Freigabe-Workflow) |
| fileModifiedDirectoryIDPath | Datei in anderen Ordner verschoben |
| fileModifiedKeywordsAdded / …Deleted | Schlagworte hinzugefügt / entfernt |
| fileModifiedKeywordsRecognitionAdded / …Deleted | KI-erkannte Schlagworte hinzugefügt / entfernt |
| fileModifiedRecognizedText | Texterkennung (OCR) aktualisiert |
| fileModifiedFaces | Gesichtserkennung aktualisiert |
| fileModifiedLocation | Standort-Metadaten geändert |
| fileModifiedLanguageCodesAdded / …Removed | Sprachcode hinzugefügt / entfernt |
| fileModifiedCollectionIDsAdded / …Removed | Datei einer Sammlung hinzugefügt / entfernt |
| fileModifiedExternalShareIDsAdded / …Removed | Externe Freigabe hinzugefügt / entfernt |
| fileModifiedLicenseFilesAdded / …Deleted | Lizenzdatei hinzugefügt / gelöscht |
| fileModifiedModelFilesAdded / …Deleted | Model-Release-Datei hinzugefügt / gelöscht |
| fileModifiedPropertyFilesAdded / …Deleted | Property-Release-Datei hinzugefügt / gelöscht |
| fileModifiedMarkedUserIDsAdded / …Removed | Markierung für Nutzer gesetzt / entfernt |
| fileModifiedIsCheckedOut | Checkout-Status geändert |
| fileModifiedIsDownloadLocked | Download-Sperre geändert |
| fileModifiedMainVersionFileID | Hauptversion einer Datei geändert |
| fileModifiedVariantStack | Zuordnung zu einem Variant Stack geändert |
| fileModifiedUploadDate / …UploadLink | Upload-Datum bzw. verwendeter Upload-Link geändert |
| fileModifiedMetadataField… | Änderung an einem Custom-Metadaten-Feld: Datum, Text, gekürzter Text, Einfach-/Mehrfachauswahl, Sprache, Standort, Ausrichtung, Fokuspunkt |
| fileReplaced | Datei durch neue Version ersetzt |
| fileReplacedPreviewFile / fileRestoredPreviewFile | Vorschaubild ersetzt / wiederhergestellt |
Sicherheit: Das Secret & die Signaturprüfung
Ohne Signaturprüfung kann grundsätzlich jeder, der die URL kennt, gefälschte Requests an deinen Endpunkt schicken. Mit einem Secret stellst du sicher, dass eine eingehende Anfrage tatsächlich von pixx.io stammt.
Gängiges, empfohlenes Verfahren (wie bei GitHub, Stripe & Co.):
- pixx.io berechnet über den Request-Body eine HMAC-SHA256-Signatur unter Verwendung deines Secrets.
- Die Signatur wird als zusätzlicher Header mitgeschickt.
- Dein Endpunkt berechnet die Signatur über den empfangenen Rohbody erneut und vergleicht sie zeitkonstant (
hash_equals()in PHP,crypto.timingSafeEqual()in Node.js). - Nur bei Übereinstimmung wird die Payload als vertrauenswürdig verarbeitet.
X-Pixxio-Signature als Platzhalter.Aufbau der Payload (Beispiel)
Jeder Webhook-Aufruf liefert eine JSON-Payload mit Informationen zum Event:
{
"event": "fileModifiedKeywordsAdded",
"timestamp": "2026-08-19T10:42:00Z",
"webhookId": "wh_12345",
"fileId": 987654,
"changes": {
"keywordsAdded": ["Sommer", "Kampagne2026"]
},
"triggeredBy": {
"userId": 42,
"userName": "c.trautbeck"
}
}
Best Practices für den Empfänger
- HTTPS verwenden — Klartext-HTTP-Endpunkte sind ein Sicherheitsrisiko.
- Signatur zuerst prüfen, bevor die Payload überhaupt verarbeitet wird.
- Schnell antworten: Empfang zügig mit 2xx bestätigen, Verarbeitung asynchron auslagern (Queue, Background-Job).
- Idempotent verarbeiten: Events können theoretisch doppelt zugestellt werden — eindeutige IDs helfen bei der Duplikaterkennung.
- Granular abonnieren: Lieber gezielte fileModified*-Events als die gesamte Kategorie file.
- Logging & Monitoring: Eingehende Events und Fehlerraten protokollieren.
- Massenoperationen einplanen: Ein Bulk-Upload kann in kurzer Zeit sehr viele Events auslösen — Queue statt synchroner Verarbeitung.
Anwendungsfälle
KI-gestützte Nachbearbeitung
fileCreated → externer KI-Dienst generiert Alt-Text/Keywords → Rückschreiben per API in Custom-Metadata bzw. Schlagworte.
Benachrichtigungen
Neue Datei, neuer Kommentar oder neue externe Freigabe → Nachricht in Slack/Microsoft Teams.
PIM-/Shop-/CMS-Sync
fileModifiedFileName / …MetadataField… → Asset-Referenz in Storyblok, Shopware o. Ä. aktualisieren.
Compliance & Rechte
fileModifiedLicenseFilesAdded / …Deleted → Ablaufdaten prüfen, automatische Erinnerung vor Lizenzende.
Archivierung & Backup
fileDeleted → automatische Kopie in externem Storage, bevor der Papierkorb geleert wird.
Freigabeprozesse
externalShare* → Genehmigungs-Workflow anstoßen, z. B. Vier-Augen-Prinzip vor Veröffentlichung.
Kombination mit Automatisierungsplattformen
Für viele Anwendungsfälle ist gar kein eigener Server nötig — Automatisierungsplattformen übernehmen Empfang, Logik und Rückruf:
- Make (ehemals Integromat): pixx.io bietet eine eigene Make-App mit vorgefertigten Modulen. Alternativ lässt sich auch der generische „Custom Webhook“-Trigger von Make direkt als Webhook-URL in pixx.io eintragen.
- Zapier / n8n: Beide bieten einen generischen Webhook-Trigger mit eindeutiger URL. Diese URL wird 1:1 in das URL-Feld des pixx.io-Webhooks eingetragen — danach lässt sich mit Filtern, Routern und HTTP-Modulen die gewünschte Logik bauen, inklusive Rückruf an die pixx.io API.
Der Vorteil: Filterung nach Event-Typ, Datenumformung und Fehlerbehandlung lassen sich visuell konfigurieren, ganz ohne eigenen Code.
Eigener Skript-Empfänger (PHP)
<?php
// webhook-receiver.php
$secret = getenv('PIXXIO_WEBHOOK_SECRET');
$payload = file_get_contents('php://input');
$signatureHeader = $_SERVER['HTTP_X_PIXXIO_SIGNATURE'] ?? '';
$expectedSignature = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expectedSignature, $signatureHeader)) {
http_response_code(401);
exit('Invalid signature');
}
// Payload sofort bestätigen, Verarbeitung asynchron auslagern
http_response_code(200);
$data = json_decode($payload, true);
switch ($data['event'] ?? '') {
case 'fileCreated':
// z. B. Job in eine Queue legen: KI-Verarbeitung anstoßen
break;
case 'fileModifiedKeywordsAdded':
// z. B. eigenen Suchindex aktualisieren
break;
}
Der Kreis schließt sich: Zurückschreiben über die API
Ein Webhook allein liefert nur Informationen — die eigentliche Automatisierung entsteht erst im Zusammenspiel mit der pixx.io REST-API. Typischer Ablauf am Beispiel einer automatischen Alt-Text-Generierung:
- Trigger: fileCreated feuert nach einem Upload.
- Kontext holen: Das Skript lädt bei Bedarf weitere Datei-Informationen über die API nach.
- Verarbeitung: Ein externer KI-Dienst generiert Alt-Text bzw. Schlagworte.
- Rückschreiben: Das Skript aktualisiert die Datei in pixx.io über die API — Custom-Metadata-Feld, Schlagworte oder Kommentar.
Für das Rückschreiben stehen je nach Objekt eigene API-Endpunkte bereit (Dateien, Sammlungen, Schlagworte, Custom-Metadaten, externe Freigaben u. v. m.) — die vollständige, aktuelle Referenz inklusive Authentifizierung findest du in der API-Dokumentation.
Checkliste vor dem Go-Live
- Endpunkt ist über HTTPS öffentlich erreichbar
- Secret ist gesetzt, Signaturprüfung ist implementiert
- Nur die tatsächlich benötigten Events sind abonniert
- Antwort erfolgt schnell (2xx), Verarbeitung läuft asynchron
- Duplikate/Wiederholungen werden idempotent behandelt
- Logging und Monitoring sind aktiv
- Vor dem Rollout mit einem einzelnen Test-Event geprüft
Weiterführende Links
Anhang: Vollständige Event-Liste
Alle 781 Events in 55 Kategorien — durchsuchbar und filterbar. Für die Weiterverarbeitung steht die komplette Liste auch als CSV-Datei zum Download bereit.
| Kategorie | Event | Aktion |
|---|