{
  "description": "Machine-readable catalog of SKU.io outbound webhook events. Subscribe via POST /api/webhook-subscriptions (scope: webhooks:manage). Deliveries are signed with HMAC-SHA256 over the raw JSON body; hex digest in the X-SKU-Signature header as 'sha256=<hex>', using the whsec_-prefixed secret shown once at subscription creation.",
  "docs_url": "https://developer.sku.io/docs/guides/webhooks",
  "envelope": {
    "event": "sales_order.created",
    "delivery_id": "uuid",
    "occurred_at": "ISO-8601 UTC timestamp",
    "data": { "...": "event-specific payload" }
  },
  "headers": {
    "X-SKU-Event": "event name",
    "X-SKU-Delivery-Id": "unique delivery UUID",
    "X-SKU-Signature": "sha256=<hex HMAC of raw body>",
    "User-Agent": "SKU.io-Webhook/1.0"
  },
  "delivery": {
    "attempts": 3,
    "backoff_seconds": [30, 300],
    "timeout_seconds": 15,
    "deactivation": "HTTP 410 from the receiver deactivates the subscription immediately; 25 consecutive failures deactivate it and notify the account.",
    "rate_cap": "600 outbound deliveries/min per tenant; excess deliveries are dropped, not queued.",
    "ordering": "Not guaranteed — use occurred_at and delivery_id to de-duplicate and order."
  },
  "events": [
    { "event": "sales_order.created", "fires_when": "A sales order is created (any channel or manual)", "required_scope": "orders:read" },
    { "event": "sales_order.shipped", "fires_when": "A sales order is fully fulfilled / shipped", "required_scope": "orders:read" },
    { "event": "sales_order.cancelled", "fires_when": "A sales order is cancelled (manual or channel-sync)", "required_scope": "orders:read" },
    { "event": "purchase_order.created", "fires_when": "A purchase order is created", "required_scope": "purchase-orders:read" },
    { "event": "purchase_order.approved", "fires_when": "A purchase order is approved", "required_scope": "purchase-orders:read" },
    { "event": "purchase_order.submitted", "fires_when": "A purchase order is submitted to the supplier", "required_scope": "purchase-orders:read" },
    { "event": "purchase_order.received", "fires_when": "Goods are received against a purchase order", "required_scope": "purchase-orders:read" },
    { "event": "inventory.adjusted", "fires_when": "Inventory levels are adjusted (manual or system)", "required_scope": "inventory:read" },
    { "event": "product.created", "fires_when": "A product is created (UI, API, or import)", "required_scope": "products:read" },
    { "event": "customer.created", "fires_when": "A customer is created (manual or first-seen-from-channel)", "required_scope": "customers:read" }
  ]
}
