Skip to main content
Webhooks let Run notify your server when shipment events happen. You register one HTTPS endpoint per Business. Run POSTs a signed JSON envelope for each event.

Configure

Set your webhook URL, subscribed event types, and signing secret from the Business Dashboard → Developers → Setup (dashboard session — not via API key).
Run Business Manage Webhook settings

Developers → Setup — webhook URL, signing secret, and event subscriptions

  • On first save, the signing secret is returned once (looks like whsec_•••••••••••••••• when masked) — store the full value securely.
  • Default subscription when omitted: ["shipment.status_changed"].
  • Use Rotate secret if the secret may be compromised. The previous secret remains valid for about 24 hours.
Inspect attempts under Developers → Webhook deliveries.
Webhook delivery attempts table

Developers → Webhook deliveries

Event types

One durable event is stored per transition. type is the most specific mapped type. Subscribing to shipment.status_changed receives status transitions (including create). See Shipment statuses for how lifecycle statuses map to these events.

Event envelope

Every delivery is a JSON POST with this shape. Headers:

Delivery and retries

Return a 2xx status to acknowledge receipt. Delivery is at-least-once. Retries reuse the same event id (evt_…) — make your handler idempotent. Run does not promise global ordering; use occurred_at, previous_status, and status. In production, webhook URLs must use HTTPS. Run blocks private/reserved destinations and disables redirects when delivering.

Verify signatures

HMAC-SHA256 of orderId + status + timestamp, keyed with your whsec_… secret. Compare the hex digest to X-Run-Webhook-Signature. Reject timestamps older than about 5 minutes. Always verify before trusting the body.