OptiWMS API

Webhooks

OptiWMS API callbacks to your base URL, and dashboard notification webhooks with the store field.

Webhooks

Two different outbound schemes touch your servers. Keep them separate.

1. OptiWMS API callbacks (OptiWMS to your base URL)

When you register a store you give OptiWMS an HTTPS base URL. OptiWMS POSTs to paths under that URL for stock and fulfillment. These calls use the same signing as the OptiWMS API (X-OptiWMS-Integration, X-OptiWMS-Timestamp, X-OptiWMS-Signature over timestamp.method.path.body). The signed path is the full path your server receives, including any path prefix on the base URL.

Topic Path on your server When
Stock POST .../stock Available quantity for a SKU changed
Shipment POST .../shipments A shipment left the warehouse
Tracking POST .../shipments/{shipmentId}/tracking Tracking for a parcel changed
Cancel POST .../orders/{orderId}/cancel The warehouse canceled an order

Stock example (OpenAPI)

{
  "sku": "TEE-BLK-M",
  "variantId": "301",
  "available": 42,
  "locationCode": "main"
}

available is the absolute figure your store may sell (after the integration's stock buffer). OptiWMS sends the same SKU again whenever the figure changes.

Shipment example (OpenAPI)

{
  "orderId": "5001",
  "shipmentId": "8812",
  "carrier": "Australia Post",
  "trackingNumber": "33ABC1234567",
  "trackingUrl": "https://auspost.com.au/mypost/track/details/33ABC1234567",
  "shippedAt": "2026-10-27T15:20:00+11:00",
  "lines": [
    { "lineId": "11", "quantity": 2 },
    { "lineId": "12", "quantity": 1 }
  ]
}

Line ids are your store's line ids from the order PUT. Answer 2xx when you accept the call; OptiWMS retries transient failures.

2. Dashboard notification webhooks

In the dashboard you can subscribe a URL to topics such as order.shipped, order.fulfilled, order.short_shipped, order.shipment_event and order.label_voided. Those deliveries are not OptiWMS API callbacks:

  • JSON body with snake_case keys
  • Header X-OptiWMS-Hmac-Sha256: Base64(HMAC-SHA256(body, subscription secret))
  • Header X-OptiWMS-Webhook-Version: 1
  • No X-OptiWMS-Timestamp / X-OptiWMS-Signature path binding

The store field

Order topics include a store object when the order came through a sales channel integration (Shopify, WooCommerce, OptiWMS API, and so on). Manual orders omit the key.

{
  "store": {
    "integration_id": 42,
    "name": "My Magento store",
    "store_order_id": "5001",
    "store_order_number": "#1001"
  }
}
Field Meaning
integration_id The OptiWMS tenant integration id
name The integration's display name (the name the store was registered under)
store_order_id Your store's order id (channel_order_id)
store_order_number Your store's order number (#1001)

On order.fulfilled for a multi-order fulfillment action, store is set only when every channel order on that action shares one integration; otherwise the key is omitted.

Use store when one organization has several custom stores (or a custom store next to Shopify) and your subscriber must route the event. See Several stores.

Connect your own store

Register the integration in the dashboard, then start with GET /ping.