Webhook in uscita
I webhook ti permettono di connettere Fotostudio a strumenti esterni come Make, Zapier, n8n o il tuo backend. A ogni evento importante (nuovo contatto, fattura pagata, contratto firmato...), Fotostudio invia automaticamente i dati verso l'URL che hai scelto.
Configurare un webhook
I webhook sono un modulo da attivare, disponibile in tutte le formule. Vai in Moduli > Tutti i moduli, categoria Avanzate, e attiva il modulo Webhook. Se avevi già creato un webhook, il modulo è già attivato per te.
Vai poi in Moduli > Webhook in uscita e clicca su Aggiungi un webhook.
Compila i seguenti campi:
Campo | Descrizione |
|---|---|
Etichetta (opzionale) | Un nome per riconoscerlo (es. "Make fatture") |
URL di destinazione | L'URL HTTPS fornito dal tuo strumento (Make, Zapier...) |
Eventi da sottoscrivere | Gli eventi da monitorare (puoi selezionarne più di uno) |
Una Chiave segreta HMAC viene generata automaticamente alla creazione. Copiala subito: non verrà più mostrata in questo modo in seguito. Serve a verificare che le chiamate provengano da Fotostudio.
Eventi disponibili
Evento | Si attiva quando... |
|---|---|
| Viene creato un nuovo contatto |
| Un contatto viene modificato (dati, info...) |
| Viene creato un nuovo servizio |
| Lo stato di un servizio cambia |
| Un servizio viene confermato |
| Viene creata una fattura |
| Una fattura viene segnata come pagata |
| Un pagamento viene registrato |
| Un preventivo viene accettato dal cliente |
| Un preventivo viene rifiutato dal cliente |
| Un contratto viene firmato |
Formato dei dati inviati
Ogni chiamata è un POST in JSON con la seguente struttura:
{
"event": "invoice.paid",
"timestamp": "2026-06-12T10:30:00Z",
"data": {
...
}
}Header HTTP
Header | Valore |
|---|---|
|
|
| Nome dell'evento (es. |
|
|
| Identificatore univoco della consegna |
Verificare la firma
La firma in X-FS-Signature viene calcolata così:
HMAC-SHA256(secret, body_json)In Node.js ad esempio:
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('Firma non valida')
Dettaglio dei dati per evento
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": "Matrimonio Dupont",
"start_time": "2026-07-20T14:00:00Z",
"end_time": "2026-07-20T18:00:00Z",
"project_type": "Matrimonio",
"status": "Confermato",
"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": "Matrimonio 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_payè il saldo restante da pagare (totale - pagamenti già ricevuti).
payment.created
{
"id": 101,
"amount": 750.00,
"payment_date": "2026-06-10",
"payment_type": "Bonifico",
"invoice_id": 789,
"contact_id": 123,
"created_at": "2026-06-10T14:00:00Z"
}estimate.accepted / estimate.refused
{
"id": 202,
"numero": "D2026-018",
"title": "Matrimonio 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": "Contratto Matrimonio 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"
}Cronologia delle consegne
Nell'elenco dei webhook, apri il menu Azioni di un webhook e poi Ultime consegne (50). Vedi la cronologia delle chiamate con:
- data e ora
- evento scatenante
- stato (Consegnato, Fallito o In attesa)
- numero di tentativi
- codice HTTP di risposta
- messaggio di errore in caso di fallimento
In caso di errore, Fotostudio riprova automaticamente fino a 3 volte con un ritardo esponenziale. Puoi anche rilanciare manualmente una chiamata con il pulsante Riprova.
Usare con Make
- In Make, crea un nuovo scenario e aggiungi un modulo Webhooks → Custom webhook
- Copia l'URL generato da Make
- In Fotostudio, crea un webhook con questo URL e seleziona gli eventi desiderati
- Scatena un evento di test da Fotostudio (crea un contatto, ad esempio)
- Make riceve i dati. Puoi poi costruire la tua automazione
Usare con Zapier
- In Zapier, crea un nuovo Zap e scegli Webhooks by Zapier → Catch Hook come trigger
- Copia l'URL fornito da Zapier
- In Fotostudio, crea un webhook con questo URL
- Scatena un evento di test. Zapier rileva automaticamente la struttura dei dati
- Configura la tua azione (Google Sheets, Notion, Slack...)
FAQ
Cosa succede se il mio server non è disponibile?
Fotostudio riprova 3 volte con un ritardo crescente. Dopo 3 tentativi, la consegna viene segnata come fallita ma rimane nella cronologia. Puoi rilanciarla manualmente.
Il mio webhook deve rispondere entro quanto tempo?
Il tuo endpoint deve rispondere entro 10 secondi. Oltre questo limite, la richiesta viene considerata fallita.
Posso avere più webhook?
Sì, puoi creare tutti i webhook che vuoi, ciascuno con i propri eventi e il proprio URL.
Come disattivare temporaneamente un webhook?
Nell'elenco, apri il menu Azioni del webhook e scegli Inattivo (o Attivo per riattivarlo): viene messo in pausa senza essere eliminato.
Cosa succede se disattivo il modulo Webhook?
I tuoi webhook vengono conservati, ma non viene più inviata nessuna chiamata e la voce Webhook in uscita scompare dal menu. Riattiva il modulo per riprendere gli invii.
Aggiornato il: 23/10/2026
Grazie!
