Riferimento dei webhook
Ricevi i messaggi MailContact nella tua app o automazione. Disponibile con Pro e Plus.
Vuoi avvisi email, Slack o Discord? Segui la guida alle notifiche.
Il payload
Ogni nuovo messaggio genera un HTTP POST al tuo URL con un Content-Type: application/json body:
POST https://your-app.example/hooks/mailcontact
{
"id": "d8f2e71a20b4",
"event": "message.created",
"project": {
"id": "prj_8f2k1q",
"name": "acme-site"
},
"source": {
"type": "form",
"name": "Website contact form"
},
"url": "https://mailcontact.app/app/projects/prj_8f2k1q?message=msg_4t9s2e",
"reply": {
"url": "https://mailcontact.app/app/projects/prj_8f2k1q?message=msg_4t9s2e",
"method": "open_conversation"
},
"message": {
"id": "msg_4t9s2e",
"from": {
"name": "Ada Lovelace",
"email": "[email protected]"
},
"subject": "Question about pricing",
"body": "Hi, quick question about the Pro plan...",
"receivedAt": "2026-07-14T09:30:00.000Z"
}
}Campi
event:message.createdper un messaggio in arrivo, oppurenotification.testper il pulsante Prova. Gli eventi di prova hanno un valore nullo permessageesource.project: il progetto la cui casella ha ricevuto il messaggio (il suoidename).source: da dove proviene il messaggio.typeè"form"(il endpoint del modulo) oppure"email"(il indirizzo email di progetto);nameè l’etichetta della fonte nella casella.message.from: del mittenteemail(sempre presente) ename(può essere vuoto se il mittente non l’ha indicato).message.subject: facoltativo nei moduli, quindi può essere vuoto.message.receivedAt: data e ora ISO 8601, UTC.reply.url: apre questa conversazione in Mailcontact, dove il proprietario può rispondere dopo l’accesso. Da solo non concede alcun accesso. Gli eventi di prova hanno un valore null perreply.
Consegna
- Rispondi velocemente. Restituisci uno stato 2xx appena accetti il payload ed esegui il lavoro effettivo in modo asincrono. Le consegne scadono dopo 10 secondi.
- Almeno una volta. Una risposta lenta o un errore temporaneo può far consegnare lo stesso messaggio più volte. Deduplica usando il campo del payload
id, inviato anche inIdempotency-KeyeX-Mailcontact-Event-Idheader. - Gli errori temporanei e HTTP 429 vengono ritentati fino a cinque tentativi, con attese esponenziali. Quasi tutte le altre risposte 4xx fermano la consegna.
- Usa un endpoint HTTPS pubblico sulla porta 443. Reti private, credenziali negli URL e reindirizzamenti sono rifiutati.
Sicurezza
I payload non sono ancora firmati: chi scopre l’URL webhook può inviarvi un POST falso. Segui queste precauzioni:
- Usa un percorso lungo e imprevedibile per l’URL del webhook e non pubblicarlo.
- Tratta ogni payload come dati non affidabili: convalidalo prima di agire.
- Non attivare azioni distruttive o irreversibili da un webhook non firmato. Notificare, registrare e accodare va bene; eliminare no.
La firma dei webhook non è attualmente disponibile. Ricevere un payload non prova chi l’ha inviato.
Webhook e canali di notifica a confronto
Usa il guida alle notifiche per avvisi email, Slack e Discord. Questo riferimento descrive il formato webhook generico per il tuo codice. Vedi prezzi per le offerte attuali.