Skip to main content
Le operazioni durevoli, come importazioni, avvii, risposte e modifiche al warmup, terminano in un worker. Un endpoint webhook riceve un evento firmato quando una di queste arriva a un esito, così non devi interrogare get_api_operation di continuo. Servono gli scope webhooks:read e webhooks:manage, un’identità titolare o admin e un host con i webhook attivi. Se non sono attivi, l’host risponde 503 webhooks_unavailable.

Registrare un endpoint

Chiama create_api_webhook_endpoint con un URL https:// e i tipi di evento che ti interessano. L’URL deve puntare solo a indirizzi internet pubblici: Emailx lo controlla quando lo salvi e prima di ogni consegna, e non segue mai i reindirizzamenti. Il salvataggio non contatta l’URL. La risposta contiene secret una sola volta. Conservalo nel tuo gestore di segreti: Emailx non lo restituisce più. Se lo perdi, ruota il segreto. Gli eventi contengono ID, tipo, stato, codice di errore e risorsa dell’operazione, mai il suo risultato. Per i dettagli usa get_api_operation.

Verificare ogni consegna

Ogni consegna è una POST con corpo JSON e tre header:
  • webhook-id: l’ID dell’evento. Resta lo stesso nei nuovi tentativi e nelle nuove consegne.
  • webhook-timestamp: i secondi Unix in cui il tentativo è stato firmato.
  • webhook-signature: uno o più valori v1,<base64> separati da spazi.
La firma è un HMAC-SHA256 di {webhook-id}.{webhook-timestamp}.{corpo grezzo}, con chiave i byte base64 che seguono whsec_. Rifiuta un timestamp che si discosta di oltre cinque minuti dal tuo orologio e accetta la richiesta se almeno un valore v1 corrisponde.
Rispondi con un 2xx entro 10 secondi ed esegui il lavoro dopo. La stessa consegna può arrivare più di una volta: salva webhook-id e ignora le ripetizioni.

Nuovi tentativi e recupero

Un tentativo fallito (risposta diversa da 2xx, timeout o destinazione non sicura) viene ripetuto dopo 1 minuto, 5 minuti, 30 minuti, 2 ore, 8 ore e 24 ore. Dopo sette tentativi la consegna passa a abandoned. Dopo 50 tentativi falliti di fila l’endpoint si disattiva da solo con disabled_reason: too_many_failures; riattivalo con update_api_webhook_endpoint. Dalla CLI le stesse azioni sono sotto emailx webhooks. Tra gli strumenti MCP ci sono create_webhook_endpoint, send_webhook_test, list_webhook_deliveries e redeliver_webhook.