Uitgaande webhooks
Met webhooks verbind je Fotostudio met externe tools zoals Make, Zapier, n8n of je eigen back-end. Bij elke belangrijke gebeurtenis (nieuw contact, betaalde factuur, ondertekend contract...) stuurt Fotostudio de gegevens automatisch naar de URL van jouw keuze.
Een webhook instellen
Webhooks zijn een module die je moet activeren, beschikbaar in alle formules. Ga naar Modules > Alle modules, categorie Geavanceerd, en activeer de module Webhooks. Had je al een webhook aangemaakt, dan is de module al voor je geactiveerd.
Ga daarna naar Modules > Uitgaande webhooks en klik op Webhook toevoegen.
Vul de volgende velden in:
Veld | Beschrijving |
|---|---|
Label (optioneel) | Een naam om je webhook terug te vinden (bv. "Make facturen") |
Doel-URL | De HTTPS-URL die je tool (Make, Zapier...) je geeft |
Gebeurtenissen om op te abonneren | De gebeurtenissen die je wilt volgen (je kunt er meerdere aanvinken) |
Bij het aanmaken wordt automatisch een HMAC geheime sleutel gegenereerd. Kopieer hem meteen: hij wordt daarna niet meer zo getoond. Hij dient om te controleren dat de oproepen echt van Fotostudio komen.
Beschikbare gebeurtenissen
Gebeurtenis | Uitgelokt wanneer... |
|---|---|
| Een nieuw contact wordt aangemaakt |
| Een contact wordt gewijzigd (contactgegevens, info...) |
| Een nieuwe fotoshoot wordt aangemaakt |
| De status van een fotoshoot verandert |
| Een fotoshoot wordt bevestigd |
| Een factuur wordt aangemaakt |
| Een factuur wordt als betaald gemarkeerd |
| Een betaling wordt geregistreerd |
| Een offerte wordt door de klant geaccepteerd |
| Een offerte wordt door de klant geweigerd |
| Een contract wordt getekend |
Formaat van de verzonden gegevens
Elke aanroep is een POST in JSON met de volgende structuur:
{
"event": "invoice.paid",
"timestamp": "2026-06-12T10:30:00Z",
"data": {
...
}
}HTTP-headers
Header | Waarde |
|---|---|
|
|
| Naam van de gebeurtenis (bv: |
|
|
| Unieke identificatie van de levering |
De handtekening verifiëren
De handtekening in X-FS-Signature wordt als volgt berekend:
HMAC-SHA256(secret, body_json)In Node.js bijvoorbeeld:
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('Ongeldige handtekening')
Detail van de gegevens per gebeurtenis
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": "Huwelijk Dupont",
"start_time": "2026-07-20T14:00:00Z",
"end_time": "2026-07-20T18:00:00Z",
"project_type": "Huwelijk",
"status": "Bevestigd",
"validated": true,
"location": "Château de 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": "Huwelijk 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_payis het resterende te betalen saldo (totaal - reeds ontvangen betalingen).
payment.created
{
"id": 101,
"amount": 750.00,
"payment_date": "2026-06-10",
"payment_type": "Overschrijving",
"invoice_id": 789,
"contact_id": 123,
"created_at": "2026-06-10T14:00:00Z"
}estimate.accepted / estimate.refused
{
"id": 202,
"numero": "D2026-018",
"title": "Huwelijk 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": "Contract Huwelijk 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"
}Geschiedenis van de leveringen
Open in de lijst met webhooks het menu Acties van een webhook en daarna Laatste leveringen (50). Daar zie je de geschiedenis van de oproepen met:
- de datum en het uur
- de gebeurtenis die de oproep uitlokte
- de status (Afgeleverd, Mislukt of In behandeling)
- het aantal pogingen
- de HTTP-responscode
- de foutmelding bij een mislukking
Bij een mislukking probeert Fotostudio het automatisch tot 3 keer opnieuw, met een exponentieel oplopende wachttijd. Je kunt een oproep ook zelf opnieuw versturen met de knop Opnieuw proberen.
Gebruiken met Make
- Maak in Make een nieuw scenario aan en voeg een module Webhooks → Custom webhook toe
- Kopieer de URL die Make genereert
- Maak in Fotostudio een webhook aan met die URL en kies de gewenste gebeurtenissen
- Lok in Fotostudio een testgebeurtenis uit (maak bijvoorbeeld een contact aan)
- Make ontvangt de gegevens. Daarna kun je je automatisering opbouwen
Gebruiken met Zapier
- Maak in Zapier een nieuwe Zap aan en kies Webhooks by Zapier → Catch Hook als trigger
- Kopieer de URL die Zapier je geeft
- Maak in Fotostudio een webhook aan met die URL
- Lok een testgebeurtenis uit. Zapier herkent de structuur van de gegevens automatisch
- Stel je actie in (Google Sheets, Notion, Slack...)
FAQ
Wat gebeurt er als mijn server niet bereikbaar is?
Fotostudio probeert het 3 keer opnieuw, met een steeds langere wachttijd. Na 3 pogingen wordt de levering als mislukt gemarkeerd, maar ze blijft in de geschiedenis staan. Je kunt ze zelf opnieuw versturen.
Binnen hoeveel tijd moet mijn webhook antwoorden?
Je endpoint moet binnen 10 seconden antwoorden. Daarna wordt het verzoek als mislukt beschouwd.
Kan ik meerdere webhooks hebben?
Ja, je kunt zoveel webhooks aanmaken als je wilt, elk met eigen gebeurtenissen en een eigen URL.
Hoe schakel ik een webhook tijdelijk uit?
Open in de lijst het menu Acties van de webhook en kies Inactief (of Actief om hem weer aan te zetten): hij wordt gepauzeerd zonder verwijderd te worden.
Wat gebeurt er als ik de module Webhooks deactiveer?
Je webhooks blijven bewaard, maar er worden geen oproepen meer verstuurd en het menu-item Uitgaande webhooks verdwijnt uit het menu. Activeer de module opnieuw om de verzendingen te hervatten.
Bijgewerkt op: 23/10/2026
Dankuwel!
