Skip to Content
APIWebhook

Webhook

Un webhook è un indirizzo del tuo sistema che la piattaforma chiama quando succede qualcosa: lo stato di una spedizione cambia, una spedizione viene creata, una giacenza si apre o si chiude. È il modo consigliato per restare aggiornati, al posto di interrogare le API a intervalli regolari.

Registrare un endpoint

Dal pannello

In Impostazioni → Webhooks inserisci l’Endpoint URL, una descrizione facoltativa e scegli gli eventi da ricevere (tieni premuto Ctrl o Cmd per selezionarne più di uno).

Pagina Webhooks: nuovo endpoint ed elenco

Dalle API – POST /webhooks

{ "url": "https://example.com/webhook/spedisci", "description": "Gestionale ordini", "events": ["tracking.update", "stock.opened", "stock.closed"] }

Risposta 201:

{ "id": 12, "url": "https://example.com/webhook/spedisci", "description": "Gestionale ordini", "events": ["tracking.update", "stock.opened", "stock.closed"], "isActive": true, "secret": "<secret>", "createdAt": "2026-09-30T10:00:00+02:00" }

Il secret è restituito solo alla creazione. Conservalo subito: serve a verificare la firma di ogni invio.

EndpointDescrizione
GET /webhooksGli endpoint registrati
GET /webhooks/{id}Dettaglio di un endpoint
DELETE /webhooks/{id}Elimina l’endpoint e il suo storico
GET /webhooks/{id}/deliveriesGli invii degli ultimi 10 giorni, con esito, codice e corpo della risposta
POST /webhooks/{id}/testInvia subito un evento tracking.update reale e firmato

Eventi

EventoQuando viene inviato
tracking.updateLo stato della spedizione cambia
shipment.createdUna spedizione viene creata, da API, dal pannello o dagli ordini
stock.openedIl corriere apre una giacenza sulla spedizione
stock.closedLa giacenza si chiude: la spedizione è ripartita, è stata consegnata o è stata resa

Vengono inviati solo gli eventi scelti alla registrazione. Un endpoint registrato senza elenco di eventi riceve tracking.update, stock.opened e stock.closed.

Contenuto degli invii

tracking.update

{ "event": "tracking.update", "timestamp": "2026-10-01T08:15:02+02:00", "ldv": "3UW0WTQ069239", "vector_name": "PosteDeliveryBusiness", "order_id": "ORD-1234", "client_store_id": null, "TrackingDettaglio": [ { "Data": "01/10/2026 08:12", "Stato": "In transito", "Luogo": "Roma" }, { "Data": "30/09/2026 10:26", "Stato": "Spedizione generata. In attesa di ritiro.", "Luogo": "Telese Terme" } ], "statusCode": 3, "contractCode": "poste-express", "domain": "demo.spedisci.online" }
CampoSignificato
ldvNumero di spedizione
order_idIl riferimento dell’ordine
client_store_idIl negozio online di provenienza, se presente
TrackingDettaglio[]Gli eventi di tracking, dal più recente: Data (gg/mm/aaaa hh:mm), Stato, Luogo
statusCodeCodice numerico dello stato: vedi Stato della spedizione
contractCodeCodice del contratto
domainLa piattaforma che invia l’avviso

shipment.created

{ "event": "shipment.created", "timestamp": "2026-09-30T10:26:54+02:00", "ldv": "3UW0WTQ069239", "shipping_id": 48210, "client_id": 1, "client_store_id": null, "order_id": "ORD-1234", "vector_name": "PosteDeliveryBusiness", "contractCode": "poste-express", "statusCode": 2, "domain": "demo.spedisci.online" }

stock.opened e stock.closed

{ "event": "stock.opened", "timestamp": "2026-09-29T09:00:12+02:00", "ldv": "3UW0WTQ069239", "giacenza_id": "<numero della giacenza presso il corriere>", "opened_at": "2026-09-29T09:00:00+02:00", "stock_id": 912, "shipping_id": 48210, "statusCode": 6, "contractCode": "poste-express", "domain": "demo.spedisci.online" }

stock_id è l’identificativo da usare con /stocks/{id} per leggere la giacenza e inviare le istruzioni.

Verificare la firma

Ogni invio è firmato con il secret dell’endpoint:

Webhook-Timestamp: <unix> Webhook-Signature: t=<unix>,v1=<HMAC-SHA256 di "<unix>.<corpo>">

Prima di elaborare un invio verifica la firma e la freschezza del timestamp. La procedura completa, con esempi in PHP e Node.js, è in Sicurezza dei webhook (firma HMAC).

Tentativi e disattivazione

  • Il tuo endpoint deve rispondere con un codice 2xx in tempi brevi: registra l’invio ed elaboralo in un secondo momento.
  • Su errori di rete e risposte 5xx l’invio viene ritentato 3 volte, dopo 30 secondi, 2 minuti e 5 minuti.
  • Una risposta 4xx non viene ritentata.
  • Un endpoint che non risponde 2xx per 72 ore viene disattivato automaticamente e ricevi un avviso via e-mail.
  • Ogni tentativo è registrato e consultabile con GET /webhooks/{id}/deliveries.

Lo stesso evento può arrivare più di una volta, ad esempio dopo un nuovo tentativo. Rendi l’elaborazione ripetibile: usa ldv, event e timestamp per riconoscere un invio già trattato.

Last updated on