Panoramica dei webhook
Sursa registra un evento per ogni modifica importante: una scheda viene pubblicata, verificata o archiviata, una comunicazione viene letta, una domanda resta senza risposta. Puoi ricevere gli eventi in due modi e usarli entrambi insieme:
| Webhook | Feed degli eventi | |
|---|---|---|
| Come | Sursa invia ogni evento al tuo indirizzo HTTPS nel momento in cui avviene. | Leggi GET /v1/webhook-events quando vuoi. |
| Latenza | Secondi. | Dipende da quanto spesso fai polling. |
| Requisiti | Un ricevitore HTTPS pubblico. | Solo una chiave API con il ruolo admin e l’ambito webhooks:manage. |
| Ideale per | Reagire alle modifiche: notificare, sincronizzare, avviare un flusso di lavoro. | Job batch, recupero dopo un’interruzione del servizio, riconciliazione. |
Entrambi trasportano gli stessi eventi con gli stessi ID. Ogni evento resta nel feed per 30 giorni, che un webhook lo abbia sottoscritto o no.
L’evento
{
"id": "evt_0123456789abcdef0123456789abcdef",
"type": "card.updated",
"created_at": "2026-10-24T10:00:03Z",
"org_id": 1,
"api_version": "1.60.0",
"sequence": 1042,
"object": {"type": "card", "id": "3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60"},
"payload": "full",
"data": {
"card": {"id": "3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60", "title": "Refund policy", "collection": "support", "version": 4},
"actor_id": 7,
"previous_attributes": {"title": "Refunds"}
},
"test": false
}
| Campo | Significato |
|---|---|
id | L’ID dell’evento, evt_ e 32 caratteri esadecimali. È lo stesso in ogni tentativo di consegna e nel feed. |
type | Cosa è successo, nella forma <object>.<past-tense verb>: card.updated, access_request.resolved. |
created_at | Quando è avvenuta la modifica, in UTC. |
api_version | La versione dell’API il cui schema è seguito da data. |
object | Il tipo e l’ID dell’oggetto a cui si riferisce l’evento. |
data | I dettagli. La sua forma dipende dal tipo ed è descritta nel catalogo degli eventi. |
data.previous_attributes | Negli eventi *.updated: i valori precedenti dei campi modificati. |
sequence, payload, test | Solo nelle consegne dei webhook: la posizione nell’ordine del webhook, la modalità del payload e se si tratta di un evento di test. |
data contiene solo ciò che qualsiasi lettore dell’oggetto potrebbe vedere tramite l’API. Non contiene mai elenchi di
accesso, permessi di altre persone o campi nascosti. I motivi negli eventi sono brevi codici neutri come no_hits,
restricted o index_failed.
Tipi di evento
Gli eventi coprono queste aree:
| Area | Esempi |
|---|---|
| Schede | card.created, card.updated, card.published, card.archived, card.deleted, card.indexed, card.index_failed |
| Verifica | card.verified, card.unverified, verification.expired, verification.requested |
| Struttura | collection.created, folder.updated |
| Collaborazione | comment.created, draft.publish_requested, announcement.sent, announcement.read |
| Risposte | question.unanswered, question.feedback_created, access_request.created |
| Persone e accesso | user.created, user.deactivated, group.member_added, api_key.expiring |
| Fonti e importazione | source.sync_completed, import.sync_completed, import.document_failed |
| Job | job.completed, job.failed, export.ready |
| Webhook | webhook.endpoint_disabled, webhook.ping |
L’elenco completo, con lo schema e un esempio di ogni evento, si trova nel catalogo degli eventi del
riferimento API. GET /v1/webhooks/catalog restituisce
i tipi disponibili nella tua installazione.
Nel tempo si aggiungono nuovi tipi di evento e gli eventi esistenti acquisiscono nuovi campi. I tipi di evento non vengono mai rinominati né rimossi. Il tuo ricevitore deve ignorare i tipi e i campi che non conosce.
Chi riceve cosa
Un webhook riceve un evento solo se l’oggetto dell’evento è visibile al webhook, come lo sarebbe per una chiave API: in
base al suo ruolo, al suo profilo dati e alle sue raccolte. Un webhook limitato alla raccolta support non riceve mai
eventi sulle schede di finance. Gli eventi su persone, chiavi, fonti, importazioni, job, esportazioni, fatturazione,
applicazioni e sui webhook stessi vanno solo ai webhook con il ruolo admin.
Entro questi limiti, ogni webhook sceglie i propri eventi:
- per tipo, con maschere:
card.*per ogni evento delle schede,*per ogni evento; - per raccolta e per tag, per gli eventi delle schede.
La modalità del payload di un webhook è full (l’evento con data, il valore predefinito) oppure thin (l’evento
senza data: il tuo ricevitore legge l’oggetto tramite l’API con la propria chiave e ne vede sempre lo stato attuale).
La consegna in breve
- Un
POSTHTTPS con l’evento in JSON, firmato con il segreto del webhook in due formati: Standard Webhooks (webhook-signature) e il precedenteX-KB-Signature. - Qualsiasi risposta
2xxentro 10 secondi è un successo. - Una consegna non riuscita viene ritentata per quasi tre giorni con pause sempre più lunghe.
Retry-Afterin una risposta429o503viene rispettato;410disattiva il webhook; 10 errori consecutivi lo mettono in pausa finché non viene ripreso. - Le consegne a uno stesso webhook vengono inviate rigorosamente in ordine. Un webhook lento non ritarda gli altri.
- Lo stesso evento può arrivare più di una volta: scarta i duplicati in base a
webhook-id.
Ricevere i webhook illustra un ricevitore completo, con la verifica delle firme in Node.js, Python e Go.
Gestire i webhook
| Attività | Endpoint |
|---|---|
| Creare un webhook e ottenerne il segreto | POST /v1/webhooks |
| Modificare l’indirizzo, gli eventi o lo stato | PATCH /v1/webhooks/{webhook_id} |
| Inviare un evento di test | POST /v1/webhooks/{webhook_id}/test |
| Ruotare il segreto | POST /v1/webhooks/{webhook_id}/rotate-secret |
| Riprendere un webhook in pausa | POST /v1/webhooks/{webhook_id}/resume |
| Vedere le consegne e le risposte | GET /v1/webhooks/{webhook_id}/deliveries |
| Inviare di nuovo una consegna | POST /v1/webhooks/{webhook_id}/deliveries/{delivery_id}/redeliver |
La gestione dei webhook richiede una chiave con il ruolo admin e l’ambito webhooks:manage, oppure un amministratore
nell’interfaccia di amministrazione. Un’organizzazione può avere fino a 20 webhook. I webhook fanno parte del piano
dell’organizzazione; senza di essi, questi endpoint rispondono 403 con il codice
webhooks.feature_disabled.