ShipBob webhooks automatically notify your app when key events occur, allowing you to keep your data in sync.

Getting Started

1

Subscribe to webhooks

Create a webhook to subscribe to an event and define a subscription URL.
2

Receive Webhook Events

When the event occurs, ShipBob sends a POST request to your subscription URL with relevant data.
3

Acknowledge Receipt

Your system should return a 2XX response to confirm successful receipt.
4

Handle Retries

If no 2XX response is received, ShipBob retries delivery using an exponential backoff strategy.

Key Concepts

  • Subscription: A request to receive webhook notifications at a specified URL.
  • Subscription URL: The endpoint where webhook data is sent.
  • Event: A trigger that generates webhook data (e.g., an order being shipped).
  • Topic: The category of event data being sent.
  • Payload: The actual event data sent in the webhook.
  • Response: A 2XX HTTP response is required to confirm webhook receipt.

Common Use Cases

  • Real-time Order Tracking - Receive order_shipped and shipment_delivered events to provide live tracking updates to customers.
  • Inventory Management - Monitor shipment_exception events to detect and respond to stock shortages.
  • Automated Customer Notifications - Trigger automated emails or SMS notifications when shipments are delayed (shipment_onhold) or delivered (shipment_delivered).
  • Order Cancellation Handling - Use shipment_cancelled events to update your system when a shipment is canceled.
  • Multi-Channel Support - Filter webhook data by sales channel to manage orders from different platforms separately.

Webhook Topics & Events

TopicDescriptionScopes Required
order_shippedFires when a shipping label is purchased, printed, and scanned. If the order is split into multiple shipments, this fires per shipment.orders_read
shipment_deliveredFires when a shipment is delivered to the customer.orders_read or fulfillments_read
shipment_exceptionFires when a shipment is moved to exception status (e.g., out-of-stock items).orders_read or fulfillments_read
shipment_onholdFires when a shipment moves to On-Hold status due to missing information (e.g., address issues).orders_read or fulfillments_read
shipment_cancelledFires when a shipment is canceled. Does not fire for manually canceled or imported orders.orders_read or fulfillments_read

Webhook Headers

ShipBob sends webhook notifications with the following headers:
{
  "shipbob-subscription-id": "1582",
  "shipbob-topic": "order_shipped",
  "content-type": "application/json; charset=utf-8"
}

Webhook Payloads (Example Responses)

Unless specified in the table above, the webhook notification sends the full data model of the underlying resource, that is available in the GET endpoint.

Retry Schedule

Each message is attempted based on the following schedule, where each period is started following the failure of the preceding attempt: 
  • Immediately 
  • 5 seconds 
  • 5 minutes 
  • 30 minutes 
  • 2 hours 
  • 5 hours 
  • 10 hours 
  • 10 hours (in addition to the previous) 
If an endpoint is removed or disabled delivery attempts to the endpoint will be disabled as well.  For example, an attempt that fails three times before eventually succeeding will be delivered roughly 35 minutes and 5 seconds following the first attempt.  Indicating successful delivery  The way to indicate that a webhook has been processed is by returning a 2xx (status code 200-299) response to the webhook message within a reasonable time-frame (15s). Any other status code, including 3xx redirects are treated as failures.  Failed delivery handling  After the conclusion of the above attempts the message will be marked as Failed for this endpoint, and the webhook sender’s account will get email notification for notifying them of this error.  Manual retries  You can also use the application portal to manually retry each message at any time, or automatically retry (“Recover”) all failed messages starting from a given date. Webhooks Manual Retries Pn

Static Source IP Addresses

In case your webhook receiving endpoint is behind a firewall or NAT, you may need to allow traffic from static IP addresses. This is the full list of IP addresses that webhooks may originate from.
44.228.126.217
50.112.21.217
52.24.126.164
54.148.139.208
2600:1f24:64:8000::/56

Best Practices

Use HTTPS - Subscription URLs must support SSL. Use RequestBin for testing if needed. Implement Redundancy - Webhooks may be delayed or lost. Use GET endpoints to periodically reconcile data. Retry Handling - Events may arrive out of order due to retries—handle them as independent updates. Use Idempotency - Store webhook event ids and discard duplicates to prevent redundant processing. Logging & Monitoring - Log webhook requests and responses to diagnose issues.

Troubleshooting Guide