Webhook in uscita
I webhook ti permettono di connettere Fotostudio a strumenti esterni come Make, Zapier, n8n o il tuo backend. Ad ogni evento importante (nuovo contatto, fattura pagata, contratto firmato...), Fotostudio invia automaticamente i dati verso l'URL che hai scelto.
Configurare un webhook
Vai su Moduli → Webhook in uscita e clicca su Nuovo webhook.
Compila i seguenti campi:
Campo | Descrizione |
|---|---|
Etichetta | Un nome per riconoscerlo (es. "Make – fatture") |
URL di destinazione | L'URL HTTPS fornito dal tuo strumento (Make, Zapier...) |
Eventi | Gli eventi da monitorare (puoi selezionarne più di uno) |
Un secret viene generato automaticamente alla creazione. Copialo subito: non verrà più mostrato 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 creata una nuova sessione |
| Lo stato di una sessione cambia |
| Una sessione viene confermata |
| 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
Nella scheda di ogni webhook, la scheda Log mostra la cronologia delle chiamate con:
- data e ora
- evento scatenante
- stato (successo / errore)
- 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 dai log.
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 nei log. 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, usa il pulsante di attivazione per abilitare o disabilitare un webhook senza eliminarlo.
Aggiornato il: 26/06/2026
Grazie!
