Back to Documentation
Real-time Events

Webhooks & Events

Push real-time notifications to your systems when orders change, inventory updates, or integrations need attention. Full HMAC signing, automatic retries, and event replay.

Quick Start

1

Register your endpoint

POST /partner/v1/webhooks
Authorization: Bearer ww_live_xxx
Content-Type: application/json

{
  "url": "https://your-server.com/webhooks/warpware",
  "events": ["order.created", "order.shipped", "order.failed"],
  "secret": "your_webhook_secret_here"
}
2

Test your endpoint

POST /partner/v1/webhooks/{id}/test
Authorization: Bearer ww_live_xxx

Sends a webhook.test event to your URL so you can verify receipt and signature validation.

3

Verify signatures

// Node.js example
const crypto = require('crypto');

function verifySignature(body, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(body)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature), Buffer.from(expected)
  );
}

// Check X-WarpWare-Signature header
const isValid = verifySignature(
  rawBody, req.headers['x-warpware-signature'], secret
);

Order Events

Fired when orders change status in the pipeline.

order.created

New order ingested into WarpWare from any source (Shopify, API, email, CSV)

Full order object with items, shipping address, customer

order.status_changed

Order transitioned between any two statuses

Order with current status, previous status, timestamp

order.shipped

Order marked as shipped with tracking number and carrier

Order with tracking_number, carrier, shipped_at

order.delivered

Carrier confirmed delivery

Order with delivered_at timestamp

order.failed

Order failed to push to fulfillment (Extensiv rejection, invalid SKU, etc.)

Order with error_message, error_type

order.cancelled

Order cancelled in source platform or manually

Order with cancellation reason

order.held

Order placed on hold by automation rule, pre-order check, or manual action

Order with hold_reason, hold_until

order.released

Held order released — now queued for fulfillment

Order with release info

Inventory Events

Fired when stock levels change or sync cycles complete.

inventory.updated

Inventory level changed for a SKU (from Extensiv sync or manual adjustment)

SKU, quantity, source, location

inventory.low_stock

SKU fell below configured buffer threshold

SKU, current quantity, buffer, threshold

inventory.sync_completed

Inventory sync cycle completed for a source

Source, updated count, failed count, duration

System Events

Operational events for monitoring and debugging.

webhook.test

Test event sent via the test endpoint — use to verify your receiver works

Test payload with timestamp

connection.error

An integration connection encountered an error (token expired, API down)

Connection ID, platform, error message

fulfillment.created

Fulfillment/tracking pushed back to source platform (Shopify, Veeqo, etc.)

Order ID, tracking number, carrier, platform

Payload Format

Every webhook delivery is a POST with JSON body and signature header:

Headers

Content-Type: application/json
X-WarpWare-Signature: a1b2c3d4e5f6...  (HMAC-SHA256 of body)
X-WarpWare-Event: order.shipped
X-WarpWare-Delivery: evt_abc123def456

Body

{
  "event": "order.shipped",
  "timestamp": "2026-03-30T14:30:00Z",
  "data": {
    "id": "a1b2c3d4-e5f6-...",
    "external_id": "#1234",
    "client_id": "bestway:her_huntress",
    "status": "shipped",
    "source": "shopify",
    "carrier": "UPS",
    "tracking_number": "1Z999AA10123456784",
    "shipped_at": "2026-03-30T14:25:00Z",
    "updated_at": "2026-03-30T14:30:00Z"
  }
}

Management API

MethodEndpointDescription
POST/partner/v1/webhooksRegister a new webhook endpoint
GET/partner/v1/webhooksList all registered webhooks
DELETE/partner/v1/webhooks/{id}Remove a webhook and cancel pending events
POST/partner/v1/webhooks/{id}/testSend a test event to verify your endpoint

Security: The webhook secret is write-only — it's never returned in API responses. To rotate a secret, delete the webhook and create a new one. All payloads are signed with HMAC-SHA256 using your secret.

Delivery & Retries

Delivery

  • Expects 2xx response within 10 seconds
  • Events polled every 30 seconds for status changes
  • Deduplication: same order+event within 5 minutes is skipped
  • Events logged to partner_webhook_events table

Retry Schedule

  • Retry 1 1 minute after failure
  • Retry 2 5 minutes
  • Retry 3 30 minutes
  • Retry 4 2 hours
  • Retry 5 12 hours (final)

After all retries fail: The event is marked as permanently failed and logged. Failed events can be replayed manually via the Partner API or the WarpWare dashboard.

Ready to integrate?

Check the Partner API docs for authentication, or reach out for help with your integration.