Webhooks

Send SKUSavvy order, inventory, and shipment events to your own systems in real time, with signed, verifiable payloads.

What Are Webhooks

A webhook sends a signed HTTP request to your own endpoint the moment something happens in SKUSavvy — a new order, a picked shipment, a completed cycle count. Use webhooks when your own systems need to react immediately, instead of repeatedly polling the API for changes.

Create a Subscription

Go to **Account > Webhooks** and click **Create**.

  • 1) Enter the endpoint that will receive events — only the host and path, since SKUSavvy always delivers over https

  • 2) Check every topic you want to subscribe to, grouped by record type: Vendor Order, Customer Order, Transfer Order, Qty Change, Notification, Vendor, Product, Variant

  • 3) Click Create

Subscription limit

You can have at most 3 subscriptions per topic. If you're already at the limit, delete an existing subscription for that topic before adding another.

Verify Your Endpoint

A new webhook doesn't deliver events until it's verified. SKUSavvy posts to your endpoint with the header **X-Webhook-Verification: true** and a 6-digit code in the body — so verification itself arrives as a webhook-style request, not an email.

  • 1) Enter the 6-digit code on the webhook's page and click Verify

  • 2) Didn't get it? Click Resend Code

Verify the Signature

Every delivery is signed so you can confirm it actually came from SKUSavvy, not a spoofed request. Compute an HMAC-SHA256 hash of the raw request body using your webhook secret (shown on the Webhooks page), base64-encode it, and compare it to the **X-Savvy-Signature** header using a constant-time comparison.

Headers sent with every delivery: X-Savvy-Signature (the HMAC), X-Topic (e.g. QtyChange.Allocate), X-Webhook-Id, and X-Company-Id.
Respond with a 2xx status within 30 seconds — anything else counts as a failed delivery and queues a retry.

Topics Reference

Topics use a Record.Action format, for example QtyChange.Allocate. Here's what triggers each one:

TopicFires when

QtyChange.Allocate

Imported inventory is assigned to a bin location

QtyChange.Change

Inventory quantity is manually adjusted by a user

QtyChange.CheckIn

Inventory is received from a purchase order

QtyChange.CycleCount

A cycle count discrepancy reconciles inventory

QtyChange.Delete

Inventory is deleted by a user

QtyChange.Export

An order is fulfilled outside of SKUSavvy

QtyChange.KitConvert

A kit's inputs are combined into the kitted output

QtyChange.KitPick

A component is picked and added to a kit

QtyChange.Pick

Inventory is picked during shipment fulfillment

QtyChange.Reconcile

Exported inventory reconciles after fulfillment by an external system

QtyChange.Restock

Inventory is restocked after a refund or cancellation

QtyChange.Transfer

Inventory moves between bins within a warehouse

CustomerOrder.LineItem.Created

Items are added to a new customer order (Vendor/Transfer variants also exist)

CustomerOrder.LineItem.Updated

Order line items are modified (Vendor/Transfer variants also exist)

CustomerOrder.LineItem.Cancelled

Order line items are cancelled (Vendor/Transfer variants also exist)

Notification.LotExpiring

A lot expiration warning triggers based on your notification settings

CustomerOrder.Shipment.Created

A shipment is created for an order (Vendor/Transfer variants also exist)

VendorOrder.Shipment.CheckedIn / TransferOrder.Shipment.CheckedIn

A vendor or transfer order shipment is partially or fully checked in

CustomerOrder.Shipment.Fulfilled / TransferOrder.Shipment.Fulfilled

A shipment is partially or fully fulfilled

CustomerOrder.Created / VendorOrder.Created / TransferOrder.Created

A new order is created

CustomerOrder.Cancelled / VendorOrder.Cancelled / TransferOrder.Cancelled

An order is cancelled

VendorOrder.Confirmed

A vendor confirms a purchase order

CustomerOrder.Fulfilled / TransferOrder.Fulfilled

An order is partially or fully fulfilled

VendorOrder.CheckedIn / TransferOrder.CheckedIn

A vendor or transfer order is partially or fully received

CustomerOrder.Deleted / VendorOrder.Deleted / TransferOrder.Deleted

An order is archived

Vendor.Created / Product.Created / Variant.Created

A new vendor, product, or variant is created

Retries & Delivery History

If your endpoint doesn't return a 2xx response, SKUSavvy retries up to 10 times, spacing out further after each failure: immediately, 1 minute, 10 minutes, 1 hour, 2 hours, 8 hours, 12 hours, 24 hours, 48 hours, then 1 week later. After the 10th attempt fails, the delivery is marked failed and isn't retried again.

Open a webhook's page and check the Deliveries table to see every attempt: topic, when it was created, when (or if) it delivered, attempt count, and the response status.

Edit, Delete, and Your Secret

You can change a subscription's topics at any time, but not its endpoint — create a new subscription instead if the endpoint changes. Click Delete to remove a subscription entirely; there's no pause option, so deleting is also how you stop delivery.

Your webhook secret is shared across every subscription on your account and can't be rotated from the app — it's shown once on the Webhooks page for you to copy.