Webhooks & Integrationen

Verbinde CreatorDesk mit den Tools, die du ohnehin nutzt.

17 Events, HMAC-signiert, ohne Code via Zapier, Make oder n8n — oder per eigenem Webhook-Endpoint. Newsletter-Sync, Buchungs-Backup, Slack-Notify und mehr.

Kostenlos testen

Wie es funktioniert

Drei Schritte vom Event in CreatorDesk zur Aktion im Ziel-Tool.

1

Webhook anlegen

Im CreatorDesk-Dashboard unter Integrationen → Webhooks: Ziel-URL eintragen, Events auswählen, AVV bestätigen.

2

Empfänger einrichten

Zapier, Make, n8n oder eigenes Backend — Hauptsache, der Endpoint kann JSON entgegennehmen und HMAC verifizieren.

3

Aktion wird ausgelöst

Sobald ein Event eintritt, sendet CreatorDesk den Payload. Dein Tool reagiert automatisch — du musst nichts mehr anfassen.

Technische Doku

Alle Events, Header, HMAC-Verifikation, Retry-Verhalten und Troubleshooting — die gleichen Snippets, die wir auch unseren Bestand-Nutzer:innen zeigen.

Schritt-für-Schritt-Anleitungen

Konkrete Setup-Pfade für die wichtigsten Tools. Klicke auf einen Service, um die Anleitung zu öffnen.

Empfohlenes Event client.created
Empfohlene Plattform Zapier (Make.com / n8n analog)

Schritt für Schritt

  1. 1

    Webhook in CreatorDesk anlegen

    Dashboard → Integrationen → Webhooks → Neuer Webhook. Event „client.created" wählen, URL erstmal leer lassen, AVV bestätigen, speichern.

  2. 2

    Neuen Zap in Zapier erstellen

    Trigger: „Webhooks by Zapier“ → „Catch Hook“ → Continue. Zapier zeigt eine eindeutige URL — kopieren.

  3. 3

    URL in den CreatorDesk-Webhook eintragen

    Zurück zum Webhook in CreatorDesk, Zapier-URL einfügen, speichern.

  4. 4

    Test-Webhook auslösen

    In CreatorDesk auf „Test-Webhook“ klicken. In Zapier auf „Test Trigger“ — der Payload sollte ankommen.

  5. 5

    Action konfigurieren: MailerLite → Create/Update Subscriber

    Account einmalig per OAuth verbinden, dann Felder mappen (siehe Tabelle unten).

  6. 6

    Test-Action ausführen + Publish

    Im Zapier-Editor „Test Action“ — sicherstellen, dass im Ziel-Tool alles korrekt ankommt. Dann oben rechts „Publish“.

Field-Mapping

CreatorDesk-Feld MailerLite-Feld
client_email Email (Pflicht)
client_first_name Name
client_last_name Custom-Field: Nachname
client_phone Custom-Field: Telefon
(statisch) Tags: creatordesk

Tipps

  • Zapier akzeptiert ohne HMAC-Verifikation — die Catch-Hook-URL ist bereits geheim.
  • Mehrere Events syncen? Eigenen Webhook + eigenen Zap pro Event anlegen.
  • Funktioniert analog mit Make.com oder n8n — der Trigger ist dort jeweils ein „Webhook“ / „Generic Webhook“, die Action ist MailerLite.

Variante B — über ein Public-Formular

Newsletter-Signup direkt aus einem Public-Formular — keine CRM-Anlage nötig.

Trigger-Event form.submitted
Vorteil Form-Felder direkt als data.*
CreatorDesk-Feld MailerLite-Feld
data.email Email (Pflicht)
data.vorname Name
(statisch) Tags: newsletter-signup
Empfohlenes Event client.created
Empfohlene Plattform Zapier (Make.com / n8n analog)

Schritt für Schritt

  1. 1

    Webhook in CreatorDesk anlegen

    Dashboard → Integrationen → Webhooks → Neuer Webhook. Event „client.created" wählen, URL erstmal leer lassen, AVV bestätigen, speichern.

  2. 2

    Neuen Zap in Zapier erstellen

    Trigger: „Webhooks by Zapier“ → „Catch Hook“ → Continue. Zapier zeigt eine eindeutige URL — kopieren.

  3. 3

    URL in den CreatorDesk-Webhook eintragen

    Zurück zum Webhook in CreatorDesk, Zapier-URL einfügen, speichern.

  4. 4

    Test-Webhook auslösen

    In CreatorDesk auf „Test-Webhook“ klicken. In Zapier auf „Test Trigger“ — der Payload sollte ankommen.

  5. 5

    Action konfigurieren: Mailchimp → Add/Update Member to List

    Account einmalig per OAuth verbinden, dann Felder mappen (siehe Tabelle unten).

  6. 6

    Test-Action ausführen + Publish

    Im Zapier-Editor „Test Action“ — sicherstellen, dass im Ziel-Tool alles korrekt ankommt. Dann oben rechts „Publish“.

Field-Mapping

CreatorDesk-Feld Mailchimp-Feld
client_email Email Address (Pflicht)
client_first_name Merge-Field FNAME
client_last_name Merge-Field LNAME
(statisch) Tags: creatordesk

Tipps

  • Mailchimp-Action benötigt Audience-ID — einmalig im Zap-Editor wählen.
  • Doppelt-Anmeldungen: Mailchimp dedupliziert automatisch nach E-Mail-Adresse.
  • Funktioniert analog mit Make.com oder n8n — der Trigger ist dort jeweils ein „Webhook“ / „Generic Webhook“, die Action ist Mailchimp.
Empfohlenes Event booking.confirmed
Empfohlene Plattform Zapier (Make.com / n8n analog)

Schritt für Schritt

  1. 1

    Webhook in CreatorDesk anlegen

    Dashboard → Integrationen → Webhooks → Neuer Webhook. Event „booking.confirmed" wählen, URL erstmal leer lassen, AVV bestätigen, speichern.

  2. 2

    Neuen Zap in Zapier erstellen

    Trigger: „Webhooks by Zapier“ → „Catch Hook“ → Continue. Zapier zeigt eine eindeutige URL — kopieren.

  3. 3

    URL in den CreatorDesk-Webhook eintragen

    Zurück zum Webhook in CreatorDesk, Zapier-URL einfügen, speichern.

  4. 4

    Test-Webhook auslösen

    In CreatorDesk auf „Test-Webhook“ klicken. In Zapier auf „Test Trigger“ — der Payload sollte ankommen.

  5. 5

    Action konfigurieren: Brevo → Add or Update Contact

    Account einmalig per OAuth verbinden, dann Felder mappen (siehe Tabelle unten).

  6. 6

    Test-Action ausführen + Publish

    Im Zapier-Editor „Test Action“ — sicherstellen, dass im Ziel-Tool alles korrekt ankommt. Dann oben rechts „Publish“.

Field-Mapping

CreatorDesk-Feld Brevo-Feld
client_email EMAIL (Pflicht)
client_first_name FIRSTNAME
client_last_name LASTNAME
slot_date Custom-Attribut SHOOTING_DATE

Tipps

  • Brevo-Listen müssen vorher in Brevo angelegt sein — Zap referenziert via Listen-ID.
  • Custom-Attribut SHOOTING_DATE in Brevo als Datums-Feld anlegen, sonst landet es als Text.
  • Funktioniert analog mit Make.com oder n8n — der Trigger ist dort jeweils ein „Webhook“ / „Generic Webhook“, die Action ist Brevo.

Variante B — über ein Public-Formular

Form-Submissions als Brevo-Kontakte mit allen Form-Feldern als Custom-Attribute.

Trigger-Event form.submitted
Vorteil Form-Felder direkt als data.*
CreatorDesk-Feld Brevo-Feld
data.email EMAIL (Pflicht)
data.vorname FIRSTNAME
data.nachname LASTNAME
data.* (alle Felder) Custom-Attribute pro Form-Frage
Empfohlenes Event booking.created
Empfohlene Plattform Zapier (Make.com / n8n analog)

Schritt für Schritt

  1. 1

    Webhook in CreatorDesk anlegen

    Dashboard → Integrationen → Webhooks → Neuer Webhook. Event „booking.created" wählen, URL erstmal leer lassen, AVV bestätigen, speichern.

  2. 2

    Neuen Zap in Zapier erstellen

    Trigger: „Webhooks by Zapier“ → „Catch Hook“ → Continue. Zapier zeigt eine eindeutige URL — kopieren.

  3. 3

    URL in den CreatorDesk-Webhook eintragen

    Zurück zum Webhook in CreatorDesk, Zapier-URL einfügen, speichern.

  4. 4

    Test-Webhook auslösen

    In CreatorDesk auf „Test-Webhook“ klicken. In Zapier auf „Test Trigger“ — der Payload sollte ankommen.

  5. 5

    Action konfigurieren: ActiveCampaign → Create/Update Contact + Add Tag

    Account einmalig per OAuth verbinden, dann Felder mappen (siehe Tabelle unten).

  6. 6

    Test-Action ausführen + Publish

    Im Zapier-Editor „Test Action“ — sicherstellen, dass im Ziel-Tool alles korrekt ankommt. Dann oben rechts „Publish“.

Field-Mapping

CreatorDesk-Feld ActiveCampaign-Feld
email email (Pflicht)
customer_name firstName + lastName (Split)
phone phone
(statisch) Tag: creatordesk-lead

Tipps

  • Optional: 2. Zap-Step „Add Contact to Automation" startet einen Welcome-Funnel.
  • Für saubere Split: in Zapier ein Formatter-Step zwischen Webhook und ActiveCampaign-Action.
  • Funktioniert analog mit Make.com oder n8n — der Trigger ist dort jeweils ein „Webhook“ / „Generic Webhook“, die Action ist ActiveCampaign.

Variante B — über ein Public-Formular

Public-Form direkt als ActiveCampaign-Lead — mit Form-Feldern als Tags.

Trigger-Event form.submitted
Vorteil Form-Felder direkt als data.*
CreatorDesk-Feld ActiveCampaign-Feld
data.email email (Pflicht)
data.interesse Tag pro Interessen-Feld
form.title Tag: form-<title>
Empfohlenes Event invoice.paid
Empfohlene Plattform Zapier (Make.com / n8n analog)

Schritt für Schritt

  1. 1

    Webhook in CreatorDesk anlegen

    Dashboard → Integrationen → Webhooks → Neuer Webhook. Event „invoice.paid" wählen, URL erstmal leer lassen, AVV bestätigen, speichern.

  2. 2

    Neuen Zap in Zapier erstellen

    Trigger: „Webhooks by Zapier“ → „Catch Hook“ → Continue. Zapier zeigt eine eindeutige URL — kopieren.

  3. 3

    URL in den CreatorDesk-Webhook eintragen

    Zurück zum Webhook in CreatorDesk, Zapier-URL einfügen, speichern.

  4. 4

    Test-Webhook auslösen

    In CreatorDesk auf „Test-Webhook“ klicken. In Zapier auf „Test Trigger“ — der Payload sollte ankommen.

  5. 5

    Action konfigurieren: Slack → Send Channel Message

    Account einmalig per OAuth verbinden, dann Felder mappen (siehe Tabelle unten).

  6. 6

    Test-Action ausführen + Publish

    Im Zapier-Editor „Test Action“ — sicherstellen, dass im Ziel-Tool alles korrekt ankommt. Dann oben rechts „Publish“.

Field-Mapping

CreatorDesk-Feld Slack-Feld
invoice_number im Message-Text einsetzen
total Betrag im Message-Text
client.name Kundenname im Message-Text

Tipps

  • Message-Template: 💰 Rechnung #{invoice_number} ({total}€) bezahlt von {client.name}
  • Channel wird beim Verbinden des Slack-Accounts ausgewählt — pro Zap einer.
  • Funktioniert analog mit Make.com oder n8n — der Trigger ist dort jeweils ein „Webhook“ / „Generic Webhook“, die Action ist Slack.

Variante B — über ein Public-Formular

„Neue Form-Einreichung"-Notify direkt im Channel — sehr beliebt für Lead-Capture.

Trigger-Event form.submitted
Vorteil Form-Felder direkt als data.*
CreatorDesk-Feld Slack-Feld
form.title Form-Name im Message-Text
data.email Kontakt-Email im Message-Text
submission_id Verweis-ID

1. Ueberblick

Bei jedem abonnierten Event sendet CreatorDesk einen HTTP-POST an die konfigurierte Ziel-URL. Der Body ist JSON, mit HMAC-SHA256-signiertem Header. Bei voruebergehenden Fehlern (5xx, Timeout) wird mit exponentiellem Backoff bis zu fuenfmal retried (1m, 5m, 30m, 2h, 12h).

Aktuell stehen 17 Event-Typen zur Verfuegung. Du abonnierst pro Webhook nur die, die du brauchst — keine ist Pflicht.

2. Request-Header

Jeder POST kommt mit diesen Headern. Custom-Header aus der Webhook-Konfiguration werden gemerged, koennen aber keine reservierten X-CreatorDesk-* ueberschreiben.

Header Beispiel
Content-Typeapplication/json
X-CreatorDesk-Eventclient.created
X-CreatorDesk-Signaturesha256=a1b2c3...
X-CreatorDesk-Timestamp2026-05-12T09:30:00Z
X-CreatorDesk-Request-ID8d3f2e4a-1c5b-...
User-AgentCreatorDesk-Webhooks/1.0

3. HMAC-Signatur verifizieren

Der signierte String ist {timestamp}.{raw_body}. Mit dem Webhook-Secret laesst sich nachrechnen, dass die Nachricht echt von CreatorDesk kommt. Verwende konstante-Zeit-Vergleiche (z. B. hmac.compare_digest), nicht ==.

Python (Flask / Django)

import hmac, hashlib

WEBHOOK_SECRET = "dein_secret_aus_creatordesk"

def verify(request):
    timestamp = request.headers["X-CreatorDesk-Timestamp"]
    received = request.headers["X-CreatorDesk-Signature"]  # "sha256=..."
    body = request.get_data()  # raw bytes, NICHT request.json

    message = f"{timestamp}.".encode() + body
    expected = "sha256=" + hmac.new(
        WEBHOOK_SECRET.encode(), message, hashlib.sha256
    ).hexdigest()

    if not hmac.compare_digest(expected, received):
        return "invalid signature", 401

    # Replay-Schutz: Timestamp darf nicht aelter als 5 min sein
    # → return 401 bei zu altem Timestamp

    return "ok", 200

Node.js (Express)

const crypto = require("crypto");
const WEBHOOK_SECRET = process.env.WEBHOOK_SECRET;

// WICHTIG: raw body capturen, nicht JSON-parsen vor verify
app.post("/webhook",
  express.raw({ type: "application/json" }),
  (req, res) => {
    const ts = req.headers["x-creatordesk-timestamp"];
    const received = req.headers["x-creatordesk-signature"];
    const body = req.body;  // Buffer

    const message = Buffer.concat([Buffer.from(ts + "."), body]);
    const expected = "sha256=" + crypto
      .createHmac("sha256", WEBHOOK_SECRET)
      .update(message).digest("hex");

    if (!crypto.timingSafeEqual(
        Buffer.from(expected), Buffer.from(received))) {
      return res.status(401).send("invalid signature");
    }

    const payload = JSON.parse(body.toString());
    // ... verarbeiten
    res.send("ok");
});

PHP

<?php
$secret = getenv("WEBHOOK_SECRET");
$body = file_get_contents("php://input");  // raw bytes
$ts = $_SERVER["HTTP_X_CREATORDESK_TIMESTAMP"];
$received = $_SERVER["HTTP_X_CREATORDESK_SIGNATURE"];

$message = $ts . "." . $body;
$expected = "sha256=" . hash_hmac("sha256", $message, $secret);

if (!hash_equals($expected, $received)) {
    http_response_code(401);
    exit("invalid signature");
}

$payload = json_decode($body, true);
// ... verarbeiten
echo "ok";

4. Beispiel-Payloads

Je ein repraesentatives Beispiel pro Event-Kategorie. Felder sind je nach Event leicht unterschiedlich — Vollreferenz pro Event-Typ via gleichen Payload-Builder, hier nur Auszuege.

client.created — Neuer Kontakt im CRM
{
  "id": 42,
  "uuid": "8d3f2e4a-1c5b-4d6e-9a8b-7c5d4e3f2a1b",
  "email": "[email protected]",
  "name": "Anna Beispiel",
  "first_name": "Anna",
  "last_name": "Beispiel",
  "company": null,
  "phone": "+49 123 456789",
  "tags": ["Hochzeit", "2026"],
  "project_count": 0,
  "source": "instagram",
  "client_number": "K-2026-0042",
  "created_at": "2026-05-12T09:30:00Z"
}
booking.confirmed — Termin bestaetigt
{
  "id": 17,
  "customer_name": "Anna Beispiel",
  "email": "[email protected]",
  "phone": "+49 123 456789",
  "slot_date": "2026-08-14",
  "slot_time_start": "10:00:00",
  "project_id": 38,
  "quote_id": null,
  "booked_at": "2026-05-12T09:15:00Z",
  "confirmed_at": "2026-05-12T09:30:00Z"
}
invoice.paid — Rechnung bezahlt
{
  "id": 89,
  "invoice_number": "R-2026-0089",
  "title": "Hochzeit Anna & Tobias",
  "status": "paid",
  "total": "1450.00",
  "subtotal": "1218.49",
  "issue_date": "2026-05-01",
  "due_date": "2026-05-31",
  "paid_at": "2026-05-12T09:30:00Z",
  "client": {
    "id": 42,
    "email": "[email protected]",
    "name": "Anna Beispiel",
    "first_name": "Anna",
    "last_name": "Beispiel"
  },
  "project_id": 38,
  "quote_id": 23
}
order.paid — Galerie-Bestellung bezahlt
{
  "id": 156,
  "order_number": "GS-2026-00156",
  "gallery_id": 73,
  "customer_email": "[email protected]",
  "customer_name": "Anna Beispiel",
  "total": "199.00",
  "payment_method": "stripe",
  "status": "paid",
  "items": [
    {"id": 412, "product_type": "digital_image_package",
     "quantity": 1, "unit_price": "199.00"}
  ],
  "paid_at": "2026-05-12T09:30:00Z"
}
gallery.published — Galerie veroeffentlicht
{
  "id": 73,
  "uuid": "f6146aa2-0335-4af2-8c0f-cfcbb0f7d3d0",
  "title": "Hochzeit Anna & Tobias",
  "status": "published",
  "distribution_mode": "shop",
  "project_id": 38,
  "image_count": 342,
  "allow_sale": true,
  "published_at": "2026-05-12T09:30:00Z"
}
Alle 17 Event-Typen — Vollstaendige Liste
client.created Ein Kontakt wurde im CRM angelegt.
client.updated Felder eines Kontakts wurden geaendert.
client.deleted Ein Kontakt wurde geloescht (DSGVO-Loeschungsrecht — Empfaenger sollte lokale Kopie entfernen).
booking.created Ein Kunde hat ueber den Buchungs-Kalender eine Anfrage gestellt (noch nicht bestaetigt).
booking.confirmed Ein Termin wurde bestaetigt (SlotBooking.confirmed_at gesetzt).
project.created Ein neues Projekt wurde im CRM angelegt.
project.status_changed Der Status eines Projekts hat sich veraendert.
quote.created Ein neues Angebot wurde erstellt.
quote.accepted Der Kunde hat ein Angebot akzeptiert.
invoice.issued Eine Rechnung wurde an den Kunden geschickt.
invoice.paid Eine Rechnung wurde als bezahlt markiert.
contract.signed Ein Vertrag wurde vom Kunden unterschrieben.
gallery.published Eine Galerie hat den Status published erhalten.
gallery.delivered Galerie.delivered_at wurde gesetzt — Lieferschein ist raus.
order.paid Ein Endkunde hat eine Galerie-Bestellung bezahlt.
order.shipped Eine Galerie-Bestellung mit Druck-Artikeln wurde versandt.
form.submitted Ein Public-Formular wurde abgeschickt — Payload enthaelt alle Felder.

5. Zapier / Make / n8n — Quickstart

Zapier

  1. Neuer Zap → Trigger: Webhooks by Zapier
  2. Event: Catch Hook → Continue
  3. Generierte URL kopieren
  4. In CreatorDesk neuen Webhook anlegen mit dieser URL
  5. Test-Event aus CreatorDesk senden, Zap-Test ausloesen
Offizielle Doku →

Make (Integromat)

  1. Neues Scenario → Webhook-Modul
  2. Custom Webhook → Add → Save
  3. Webhook-URL kopieren
  4. In CreatorDesk neuen Webhook anlegen mit dieser URL
  5. Make wartet auf ersten Test-POST — Test-Event senden
Offizielle Doku →

n8n

  1. Neuer Workflow → Webhook-Trigger-Node
  2. Method: POST, Path eigene Wahl
  3. Test-URL kopieren (oder Production-URL nach Activation)
  4. In CreatorDesk neuen Webhook anlegen mit dieser URL
  5. Test-Event ausloesen
Offizielle Doku →
Tipp: Zapier/Make/n8n verifizieren die HMAC-Signatur nicht automatisch. Fuer Production-Use eigene Filter/Function-Step einbauen, der die Signatur prueft — sonst kann jeder mit der URL gefakete Events senden.

6. Retry-Verhalten

Response Verhalten
2xxErfolg, failure_count = 0
4xx (außer 408)Permanenter Fehler, kein Retry — Receiver-Konfig pruefen
5xx / 408 / TimeoutExponential Backoff: 1m → 5m → 30m → 2h → 12h (max. 5 Versuche)
5 Failures in FolgeWebhook wird automatisch deaktiviert

HTTP-Timeout pro Versuch: 10 Sekunden. Plane dein Receiver-Endpoint so, dass er ein 2xx innerhalb 10s zurueckgibt — und schwere Verarbeitung asynchron macht (Queue, Background-Worker).

7. Troubleshooting

Webhook kommt nicht an
  • Pruefen: ist der Webhook aktiv? (Detail-Ansicht zeigt Status-Pille)
  • Pruefen: ist das relevante Event abonniert?
  • Im Delivery-Log: gibt es ueberhaupt einen Eintrag fuer das Event?
  • Falls nein: vielleicht hat dein Bestand-Code das Event-ausloesende Save nicht durchgefuehrt (z. B. .update() statt .save()).
Delivery-Status zeigt failed
  • Im Delivery-Log auf den Eintrag klicken → Response-Body-Ausschnitt zeigt den Fehler
  • 401 vom Receiver: HMAC-Verifikation passt nicht — Secret falsch oder Body wurde geparsed statt raw verifiziert
  • 404: Ziel-URL nicht erreichbar oder Path falsch
  • 5xx vom Receiver: dein Endpoint crasht — Receiver-Logs pruefen
  • Manueller Re-Trigger ueber Erneut-versuchen-Knopf in der Detail-Ansicht
Webhook wurde auto-deaktiviert

Nach 5 Fehlern in Folge wird der Webhook automatisch deaktiviert, damit defekte Receiver nicht endlos retried werden. Fehler beheben, dann ueber Aktivieren in der Detail-Ansicht reaktivieren — failure_count wird dabei auf 0 zurueckgesetzt.

Doppelte Events

Eigentlich nicht moeglich — bei Status-Transitions feuern wir nur bei echtem Uebergang (alt != neu). Falls doch: pruefe ob mehrere Webhooks denselben Event auf dieselbe URL schicken.

Idempotenz auf Receiver-Seite: nutze den X-CreatorDesk-Request-ID-Header als Dedup-Key. Bei manuellem Re-Trigger entsteht NEUE Request-ID; das ist Absicht — du willst ja wirklich nochmal liefern.

8. DSGVO

Outbound-Webhooks geben Endkunden-Daten (Name, E-Mail, ggf. Telefon) an einen externen Empfaenger weiter. Du bist als Fotograf verantwortlich, dass mit dem Empfaenger ein Auftragsverarbeitungsvertrag (AVV) besteht — oder dass der Empfaenger dein eigenes System ist.

Beim Anlegen eines Webhooks im CRM bestaetigst du das per Checkbox. Ohne AVV-Bestaetigung kann der Webhook nicht aktiviert werden.

Datensparsamkeit: Payloads enthalten nur das Noetigste pro Event. Adressdaten und Telefonnummern werden bewusst nicht durchgereicht, wenn nicht explizit Bestandteil des Events.

Endkunden-Loeschungsrecht: bei Client.delete senden wir automatisch client.deleted mit der E-Mail an alle aktiven Webhooks — damit der Receiver seine lokale Kopie entfernen kann.

FAQ

Was passiert, wenn mein Endpoint mal down ist?

CreatorDesk retried bei voruebergehenden Fehlern (5xx, Timeout) mit Exponential-Backoff: 1 Minute → 5 Minuten → 30 Minuten → 2 Stunden → 12 Stunden. Nach 5 Fehlversuchen in Folge wird der Webhook automatisch deaktiviert, damit du es bemerkst.

Wie sichere ich, dass ein Webhook wirklich von CreatorDesk kommt?

Jeder Request ist HMAC-SHA256-signiert. Du verifizierst die Signatur mit deinem Webhook-Secret — wir liefern Code-Snippets für Python, Node.js und PHP weiter oben. Zapier/Make verifizieren nicht automatisch; dort baust du einen Filter-Step ein.

Welche Plan-Stufe brauche ich?

Webhooks sind in jeder Plan-Stufe enthalten — auch im Free-Tarif. Keine zusätzlichen Add-ons nötig.

Kann ich auch Daten aus CreatorDesk RAUSholen statt nur Push?

Aktuell ist die Integration Push-only (Webhooks). Eine Pull-REST-API ist in Planung — wenn du sie konkret brauchst, sag uns Bescheid, dann priorisieren wir.

Welche 17 Events stehen zur Verfügung?
client.created — Ein Kontakt wurde im CRM angelegt.
client.updated — Felder eines Kontakts wurden geaendert.
client.deleted — Ein Kontakt wurde geloescht (DSGVO-Loeschungsrecht — Empfaenger sollte lokale Kopie entfernen).
booking.created — Ein Kunde hat ueber den Buchungs-Kalender eine Anfrage gestellt (noch nicht bestaetigt).
booking.confirmed — Ein Termin wurde bestaetigt (SlotBooking.confirmed_at gesetzt).
project.created — Ein neues Projekt wurde im CRM angelegt.
project.status_changed — Der Status eines Projekts hat sich veraendert.
quote.created — Ein neues Angebot wurde erstellt.
quote.accepted — Der Kunde hat ein Angebot akzeptiert.
invoice.issued — Eine Rechnung wurde an den Kunden geschickt.
invoice.paid — Eine Rechnung wurde als bezahlt markiert.
contract.signed — Ein Vertrag wurde vom Kunden unterschrieben.
gallery.published — Eine Galerie hat den Status published erhalten.
gallery.delivered — Galerie.delivered_at wurde gesetzt — Lieferschein ist raus.
order.paid — Ein Endkunde hat eine Galerie-Bestellung bezahlt.
order.shipped — Eine Galerie-Bestellung mit Druck-Artikeln wurde versandt.
form.submitted — Ein Public-Formular wurde abgeschickt — Payload enthaelt alle Felder.
Ist das DSGVO-konform?

Du bist als Fotograf:in verantwortlich, mit dem Empfänger des Webhooks einen Auftragsverarbeitungsvertrag (AVV) zu haben — oder der Empfänger ist dein eigenes System. Beim Anlegen eines Webhooks bestätigst du das per Checkbox. Bei Kontakt-Löschungen senden wir automatisch ein client.deleted-Event, damit der Empfänger seine Kopie entfernen kann.

In 5 Minuten eingerichtet

Webhook anlegen, Events abonnieren, Aktion in Zapier/Make/n8n verknüpfen — fertig. Beratung brauchst du keine, die Doku reicht.