37 — Custom Webhook (Zapier, Make, n8n, eigene Systeme)

Aktualisiert am 1. Juni 2026

37 — Custom Webhook (Zapier, Make, n8n, eigene Systeme)

Der Custom-Webhook-Endpoint ermöglicht jeder beliebigen Quelle, Sales an PartnerDesk zu pushen — egal ob Zapier/Make/n8n, ein eigener Server oder ein nicht nativ unterstützter Payment-Provider.

Webhook-URL

POST https://<tenant-slug>.partnerdesk.io/api/webhooks/<tenant-slug>/custom

Authentifizierung

X-Webhook-Signature: sha256=<HMAC-SHA256(payload, secret)>

Das Secret konfigurieren Sie in Admin → „Zahlungsanbieter" → Custom.

Standardisiertes JSON-Schema

{
  "event": "transaction.created | transaction.refunded",
  "externalId": "ext-tx-12345",
  "partnerId": "P-001",
  "campaignSlug": "summer-promo",
  "productName": "Subscription",
  "productId": "prod-abc",
  "grossAmount": "199.00",
  "netAmount": "167.23",
  "taxAmount": "31.77",
  "taxRate": "19.00",
  "currency": "EUR",
  "transactionDate": "2026-05-21T10:00:00Z",
  "isRecurring": false,
  "recurringNumber": 1,
  "customer": {
    "externalId": "cust-001",
    "email": "kunde@example.com",
    "firstName": "Max",
    "lastName": "Mustermann"
  }
}

Event-Typen

Event Effekt
transaction.created Neue Transaction + MLM-Provisionen
transaction.refunded Bestehende TX (via externalId) auf refunded

Affiliate-Identifikation

Bei Custom-Webhook ist die partnerId explizit im Body — die übliche 5-stufige Resolution (Cookie/Fingerprint) wird übersprungen. Sie kennen Ihren Partner besser als jede Heuristik.

Falls partnerId fehlt: TX landet als STATUS_UNASSIGNED, Admin kann manuell zuordnen.

Use-Cases

Zapier

Trigger: New Row in Google Sheets
Action: Webhooks by Zapier → POST → ...

Body (JSON):
{
  "event": "transaction.created",
  "externalId": "{{1.Row Number}}",
  "partnerId": "{{1.Partner_ID}}",
  ...
}

Make (Integromat)

Analog: HTTP-Module → POST → Body mit Mapped Fields.

Eigener Server

$payload = json_encode([...]);
$signature = 'sha256=' . hash_hmac('sha256', $payload, $secret);

$ch = curl_init('https://tenant.partnerdesk.io/api/webhooks/tenant/custom');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $payload,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        "X-Webhook-Signature: $signature",
    ],
    CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);

Nicht-unterstützte Provider

Z. B. Shopify oder WooCommerce — Sie schreiben einen kleinen Adapter, der das jeweilige Provider-Format ins PartnerDesk-Schema übersetzt und per Custom-Webhook sendet.

Signatur erstellen — Test-Snippet

In Bash:

PAYLOAD='{"event":"transaction.created",...}'
SECRET='your-secret-here'
SIGNATURE="sha256=$(echo -n "$PAYLOAD" | openssl dgst -sha256 -hmac "$SECRET" | cut -d' ' -f2)"

curl -X POST \
  -H "Content-Type: application/json" \
  -H "X-Webhook-Signature: $SIGNATURE" \
  -d "$PAYLOAD" \
  https://tenant.partnerdesk.io/api/webhooks/tenant/custom

Idempotenz

externalId ist der Idempotenz-Key. Zweimaliges Senden mit derselben externalId → zweiter Request wird als skipped quittiert.

Verwandte Kapitel


Technische Tiefen-Doku: ../057-custom-webhook-handler.md