Ausgehende Webhooks
Mit Webhooks verbindest du Fotostudio mit externen Tools wie Make, Zapier, n8n oder deinem eigenen Backend. Bei jedem wichtigen Ereignis (neuer Kontakt, bezahlte Rechnung, unterschriebener Vertrag...) schickt Fotostudio die Daten automatisch an die URL deiner Wahl.
Einen Webhook einrichten
Webhooks sind ein Modul, das du aktivierst, und in allen Tarifen verfügbar. Gehe zu Module > Alle Module, Kategorie Erweitert, und aktiviere das Modul Webhooks. Hattest du bereits einen Webhook angelegt, ist das Modul für dich schon aktiviert.
Gehe dann zu Module > Ausgehende Webhooks und klicke auf Webhook hinzufügen.
Fülle diese Felder aus:
Feld | Beschreibung |
|---|---|
Bezeichnung (optional) | Ein Name zur Orientierung (z. B. „Make Rechnungen“) |
Ziel-URL | Die HTTPS-URL, die dein Tool (Make, Zapier...) dir gibt |
Zu abonnierende Ereignisse | Die Ereignisse, die gesendet werden sollen (du kannst mehrere auswählen) |
Beim Anlegen wird automatisch ein HMAC-Geheimschlüssel erzeugt. Kopiere ihn sofort: Er wird danach nicht mehr so angezeigt. Mit ihm prüfst du, dass die Aufrufe wirklich von Fotostudio kommen.
Verfügbare Ereignisse
Ereignis | Ausgelöst, wenn... |
|---|---|
| ein neuer Kontakt angelegt wird |
| ein Kontakt geändert wird (Kontaktdaten, Infos...) |
| ein neues Shooting angelegt wird |
| sich der Status eines Shootings ändert |
| ein Shooting bestätigt wird |
| eine Rechnung erstellt wird |
| eine Rechnung als bezahlt markiert wird |
| eine Zahlung erfasst wird |
| ein Angebot vom Kunden angenommen wird |
| ein Angebot vom Kunden abgelehnt wird |
| ein Vertrag unterschrieben wird |
Format der gesendeten Daten
Jeder Aufruf ist ein POST in JSON mit folgender Struktur:
{
"event": "invoice.paid",
"timestamp": "2026-06-12T10:30:00Z",
"data": {
...
}
}HTTP-Header
Header | Wert |
|---|---|
|
|
| Name des Ereignisses (z. B. |
|
|
| Eindeutige Kennung der Zustellung |
Die Signatur prüfen
Die Signatur in X-FS-Signature wird so berechnet:
HMAC-SHA256(secret, body_json)Zum Beispiel in Node.js:
const crypto = require('crypto')
const sig = 'sha256=' + crypto.createHmac('sha256', SECRET).update(rawBody).digest('hex')
if (sig !== req.headers['x-fs-signature']) throw new Error('Ungültige Signatur')
Die Daten je Ereignis
contact.created / contact.updated
{
"id": 123,
"firstname": "Marie",
"lastname": "Dupont",
"email": "marie@example.com",
"phone": "+33 6 12 34 56 78",
"company": "Studio Photo",
"street": "12 rue de la Paix",
"zipcode": "75001",
"city": "Paris",
"country": "France",
"created_at": "2026-01-15T09:00:00Z",
"url": "https://www.fotostudio.io/app/contacts/123"
}project.created / project.status_changed / project.confirmed
{
"id": 456,
"name": "Hochzeit Dupont",
"start_time": "2026-07-20T14:00:00Z",
"end_time": "2026-07-20T18:00:00Z",
"project_type": "Hochzeit",
"status": "Bestätigt",
"validated": true,
"location": "Schloss Versailles",
"contact_id": 123,
"created_at": "2026-01-15T09:00:00Z",
"url": "https://www.fotostudio.io/app/projects/456"
}invoice.created / invoice.paid
{
"id": 789,
"numero": "F2026-042",
"title": "Hochzeit Dupont",
"invoice_date": "2026-06-01",
"total_price": 1500.00,
"amount_to_pay": 750.00,
"paid": false,
"draft": false,
"contact_id": 123,
"project_id": 456,
"created_at": "2026-06-01T10:00:00Z",
"url": "https://www.fotostudio.io/app/invoices/789"
}
amount_to_payist der noch offene Betrag (Gesamtbetrag minus bereits erhaltene Zahlungen).
payment.created
{
"id": 101,
"amount": 750.00,
"payment_date": "2026-06-10",
"payment_type": "Überweisung",
"invoice_id": 789,
"contact_id": 123,
"created_at": "2026-06-10T14:00:00Z"
}estimate.accepted / estimate.refused
{
"id": 202,
"numero": "D2026-018",
"title": "Hochzeit Dupont",
"total_price": 1500.00,
"accepted": true,
"refused": false,
"accepted_at": "2026-06-05T16:00:00Z",
"contact_id": 123,
"project_id": 456,
"created_at": "2026-05-20T09:00:00Z",
"url": "https://www.fotostudio.io/app/estimates/202"
}contract.signed
{
"id": 303,
"title": "Vertrag Hochzeit Dupont",
"signed_at": "2026-06-08T11:30:00Z",
"project_id": 456,
"contact_id": 123,
"created_at": "2026-05-25T10:00:00Z",
"url": "https://www.fotostudio.io/app/contracts/303"
}Verlauf der Zustellungen
Öffne in der Liste der Webhooks das Menü Aktionen eines Webhooks und dann Letzte Lieferungen (50). Dort siehst du den Verlauf der Aufrufe mit:
- Datum und Uhrzeit
- dem ausgelösten Ereignis
- dem Status (Zugestellt, Fehlgeschlagen oder Ausstehend)
- der Anzahl der Versuche
- dem HTTP-Antwortcode
- der Fehlermeldung bei einem Fehlschlag
Schlägt ein Aufruf fehl, versucht Fotostudio es automatisch bis zu 3-mal erneut, mit exponentiell wachsendem Abstand. Du kannst einen Aufruf auch selbst mit dem Button Erneut versuchen neu auslösen.
Mit Make verwenden
- Erstelle in Make ein neues Szenario und füge das Modul Webhooks → Custom webhook hinzu.
- Kopiere die von Make erzeugte URL.
- Lege in Fotostudio einen Webhook mit dieser URL an und wähle die gewünschten Ereignisse.
- Löse in Fotostudio ein Testereignis aus (lege zum Beispiel einen Kontakt an).
- Make empfängt die Daten. Danach kannst du deine Automatisierung aufbauen.
Mit Zapier verwenden
- Erstelle in Zapier einen neuen Zap und wähle Webhooks by Zapier → Catch Hook als Trigger.
- Kopiere die URL, die Zapier dir gibt.
- Lege in Fotostudio einen Webhook mit dieser URL an.
- Löse ein Testereignis aus. Zapier erkennt die Datenstruktur automatisch.
- Richte deine Aktion ein (Google Sheets, Notion, Slack...).
Häufige Fragen
Was passiert, wenn mein Server nicht erreichbar ist?
Fotostudio versucht es 3-mal mit wachsendem Abstand erneut. Nach 3 Versuchen wird die Zustellung als fehlgeschlagen markiert, bleibt aber im Verlauf. Du kannst sie von Hand erneut auslösen.
Wie schnell muss mein Webhook antworten?
Dein Endpoint muss innerhalb von 10 Sekunden antworten. Danach gilt die Anfrage als fehlgeschlagen.
Kann ich mehrere Webhooks haben?
Ja, du kannst so viele Webhooks anlegen, wie du möchtest, jeden mit eigenen Ereignissen und eigener URL.
Wie deaktiviere ich einen Webhook vorübergehend?
Öffne in der Liste das Menü Aktionen des Webhooks und wähle Inaktiv (oder Aktiv, um ihn wieder einzuschalten): Er wird pausiert, ohne gelöscht zu werden.
Was passiert, wenn ich das Modul Webhooks deaktiviere?
Deine Webhooks bleiben erhalten, aber es werden keine Aufrufe mehr verschickt, und der Eintrag Ausgehende Webhooks verschwindet aus dem Menü. Aktiviere das Modul wieder, um die Zustellungen fortzusetzen.
Aktualisiert am: 23/10/2026
Danke!
