Overview
Webhook delivery is the transmission of an event notification from one software system to a subscriber’s HTTP endpoint when a specified event occurs. In logistics, a notification might report that an order was created, inventory changed, a shipment was dispatched, or a carrier recorded an exception. Unlike scheduled polling, in which a recipient repeatedly asks for updates, a webhook lets the event producer initiate the notification.
Webhooks can connect warehouse management systems (WMS), transportation management systems, ecommerce platforms, carriers, and enterprise resource planning systems. For example, an integration may notify an order-management application when a shipment status changes. SkuSavvy’s integrations illustrate the broader system connections relevant to fulfillment, while GitHub’s webhook documentation provides a general model for receiving and processing HTTP event deliveries. The existence of an integration does not by itself establish which webhook events or delivery guarantees a particular provider supports.
Etymology and Origins
The term webhook combines “web” with hook, a programming term for a point at which one program can invoke or extend another. A webhook applies that idea across the web: an event in one service prompts an HTTP request to a registered endpoint in another. The term is also commonly described as a user-defined HTTP callback. Its first documented use and attribution are not established here.
The approach builds on the web’s request-and-response architecture rather than on a separate logistics-specific protocol. Roy Fielding’s 2000 dissertation on REST described architectural principles for distributed web systems; modern webhooks use HTTP to deliver notifications, although REST does not itself define a webhook delivery contract. Current HTTP semantics define the methods and response codes used in such exchanges. CloudEvents later defined a common event envelope that some systems adopt; it is not required for a webhook and is not a logistics protocol.
Historical Development
- 1970s–1990s: Logistics data exchange developed around electronic identification and structured business messages before webhooks became common. The first retail scan of a UPC barcode occurred on 26 June 1974, a milestone in the wider adoption of machine-readable product identification. Barcodes identify or capture data; they are not themselves a notification mechanism.
- 2000s: Web APIs expanded alongside the architecture described in Fielding’s 2000 dissertation. Webhooks emerged as a way for services to notify other applications of events without requiring continuous polling. A single inventor or founding publication is not established in the sources cited here.
- 2010s: Cloud commerce platforms, carriers, and warehouse applications increasingly exposed APIs and event notifications. Logistics implementations could combine barcode or RFID capture, application events, and HTTP integrations, although their formats and reliability rules varied by provider.
- 2020s: Implementations increasingly emphasize signed requests, duplicate handling, and asynchronous processing. For example, Stripe’s webhook guidance describes signature verification, retries, and duplicate events. Logistics data standards such as GS1 EPCIS provide a separate framework for sharing visibility-event information; EPCIS is not synonymous with webhooks.
No single inventor, publication, or universal standard is established here as the origin of all webhook delivery. The evolution reflects the convergence of web APIs, event-driven software, and logistics visibility requirements.
Core Concepts
A typical delivery follows these steps:
- Subscription: A customer or integrator registers an endpoint and selects event types, subject to the provider’s authorization and configuration rules.
- Event creation: A source system records a business event, such as a carrier scan or completed pick.
- Delivery: The provider sends an HTTP request, commonly a POST with a JSON payload, to the endpoint. A payload may contain an event identifier, type, timestamp, and reference to the affected order or shipment. Some producers wrap that data in a CloudEvents envelope; others use a proprietary schema.
- Verification and acknowledgment: The receiver validates the request according to the provider’s scheme and returns an appropriate HTTP response. A successful response should generally follow durable acceptance of the event, not merely its receipt in memory.
- Processing: A worker applies business logic, such as updating a shipment record, notifying a customer, or raising an exception.
- Recovery: Depending on the contract, failed deliveries may be retried or require manual redelivery and reconciliation.
HTTP response codes communicate the outcome of the request, but the provider’s documentation determines which codes it treats as successful and whether it retries. GitHub’s delivery guidance illustrates the endpoint-and-response model; behavior should not be assumed identical across vendors.
Event data and business meaning
An event is not necessarily a complete or final business state. A carrier’s “label created” event, for example, does not prove that a parcel has been collected. Payloads can contain the full changed object or only a reference that requires a subsequent API call. GS1 EPCIS addresses the structure and meaning of visibility events, while SkuSavvy’s order fulfillment guide provides operational context for the warehouse activities that integrations may represent.
Reliability and Delivery Guarantees
Webhook delivery should not be assumed to be exactly once, ordered, or instantaneous. A provider may retry after a timeout even when the recipient processed the original request, producing a duplicate. Events can also arrive out of order or be lost after a retry window expires. Stripe documents both duplicate and unordered events; other providers may use different policies. Some providers require failed deliveries to be redelivered explicitly rather than retrying automatically, so the contract must be checked. For example, GitHub does not automatically redeliver failed webhook deliveries.
Practical controls include:
- Idempotency: Store processed event identifiers and ensure a duplicate does not repeat a side effect. Scope the identifier appropriately to the provider and account. Where a provider distinguishes event IDs from delivery IDs, choose the deduplication key according to its contract; GitHub recommends using its delivery identifier to help protect against replay attacks.
- Durable intake: Persist the verified message or enqueue it reliably before acknowledging it. Process it asynchronously to reduce timeout risk. GitHub recommends responding promptly and processing deliveries asynchronously.
- Ordering safeguards: Use source-provided versions or sequence numbers where available. Otherwise, fetch current state or apply business-specific rules instead of assuming arrival order reflects event order.
- Reconciliation: Periodically compare local records against the source API or another authoritative record, especially after outages or expired retry windows.
- Failure management: Monitor delivery failures, maintain a replay procedure, and retain failed work in a queue or dead-letter store for investigation.
For example, if a delivery-completed event arrives before an earlier in-transit event, the recipient should avoid reverting the shipment to in-transit merely because that message arrived later. GitHub’s delivery documentation and the sending provider’s own specifications should guide timeout, response, and recovery behavior.
Producer-side reliability
A sender also needs to avoid recording a business change without recording the corresponding notification. The transactional outbox pattern addresses this dual-write problem by saving the business change and an outgoing event record in the same database transaction; a separate process then publishes the event. This pattern does not eliminate duplicate delivery, so recipients still need idempotent processing.
Security and Data Protection
Webhook endpoints are publicly reachable interfaces and should be treated as untrusted until a request is authenticated. GitHub’s signature-validation guidance describes verifying a signature generated from a shared secret and the request body. Implementations should follow the sender’s exact algorithm, verify the original bytes before modifying the payload, and compare signatures safely. If a provider includes signed timestamps, enforce its replay-protection rules; do not assume every webhook scheme includes them.
Use HTTPS, protect and rotate secrets, restrict access where the provider supports it, and validate payload size and schema. Avoid logging unnecessary personal data such as recipient addresses or phone numbers. A valid signature authenticates the message under the provider’s scheme; it does not automatically establish that every field is suitable for every downstream business action. Stripe’s webhook guidance similarly emphasizes signature verification and secure endpoint handling.
Logistics Applications and Implementation
Webhook notifications can support several common workflows:
- Warehouse fulfillment: A fulfillment event can trigger an order-status update or a downstream shipping task. The physical pick, pack, and ship activities remain distinct from the software notification; SkuSavvy’s fulfillment guide describes the operational context.
- Inventory synchronization: A stock change can prompt another system to refresh availability. The integration must define whether quantities mean on-hand, available, reserved, or another measure, and how locations are mapped. SkuSavvy’s Shopify inventory-sync guide addresses a related synchronization workflow; it should not be read as proof that every update uses webhooks.
- Transportation visibility: A carrier status event can update an estimated delivery or alert a customer-service team to an exception. The receiver should preserve the carrier’s event time and meaning rather than treating every scan as proof of delivery.
- Traceability: A notification can signal that a traceability event is available, while a structured record carries details such as what, when, where, and why. GS1 EPCIS provides a visibility-event standard independent of any particular webhook mechanism.
Worked example: carrier exception
In a hypothetical integration, a carrier sends an exception event for a shipment. The receiver verifies the request, records it durably, acknowledges it, and then queues an alert for customer service. If the same event is redelivered, the receiver uses the provider’s documented identifier to avoid creating a second alert. If processing fails after acknowledgment, an operator investigates and replays the queued work; if the original delivery never arrived, the team uses the provider’s recovery mechanism and reconciles shipment status. This design follows the general principles in GitHub’s webhook best practices and Stripe’s guidance on duplicate events; actual carrier behavior depends on its contract.
Before deployment, document event definitions, schema versions, identifiers, retry policies, ownership, and recovery procedures with each partner. Test duplicate, delayed, malformed, and out-of-order messages, as well as endpoint outages. Monitor successful delivery rate, event-processing lag, queue depth, and unreconciled records; distinguish the time an event occurred from the time it was received and processed.
