Skip to main content
Stella emits HMAC-SHA256-signed webhook events for every meaningful state change. You point us at a URL, pick events, and your system gets pinged on every order, customer, inventory, or product change. The wire format is Stripe-style: t=<unix>,v1=<hex> in the X-Stella-Signature header, signed payload is <timestamp>.<rawBody>.

Register an endpoint

In the dashboard at Settings → Webhooks:
  1. Click Add endpoint.
  2. URL — your receiver (https://kasa.com/api/stella/webhooks).
  3. Pick events. The v1 taxonomy:
    • order.created, order.paid, order.fulfilled, order.cancelled, order.refunded
    • customer.created, customer.updated
    • inventory.updated
    • product.updated
  4. Save. The signing secret (whsec_…) is shown once — copy it.

Verify a delivery

Pseudocode (real implementation: see @stella/webhooks):
Use @stella/webhooks (PR #81) once published — the manual implementation above is just to show the wire format.

Retry policy

Failed deliveries (any non-2xx, or timeout > 30s) are retried with exponential backoff:
After the fifth failure, the delivery is marked failed and shown red in the dashboard’s delivery log. You can replay it from there.

Delivery log

Every event surfaces:
  • Event type, merchant ID, payload hash
  • Each attempt’s status, response body, response time, ACAO header
  • Replay button per delivery
Replays carry the original timestamp + signature — your verifier should still accept them inside the 5-minute skew window. (If you’ve gone past the skew, the dashboard’s “Replay with fresh signature” mints a new signature stamp.)

Idempotency on your end

Every event carries an event_id that’s stable across replays. Your receiver should:
This protects against duplicate deliveries from retries or operator replays.