Skip to main content
When you create an order with a callback object, Origin One sends an HTTP POST to your URL every time the order or one of its services changes status. Each delivery is a small event that names the order; fetch the order for its current state. See the Order updated webhook reference for the exact payload.

Payload

The event carries no status. GET the order at data.url with your API token to read its current status, isFinal, and services — see Order lifecycle for how to interpret them. Retries of the same delivery carry the same id.

Configure the callback

Pass a callback object when creating an order. Only url is required; it must be an HTTPS endpoint you control.

Authentication options

Set callback.auth.type to control how Origin One authenticates with your endpoint: Independently of type, you can also set secretKey to receive an HMAC signature with every delivery — see below.

Verify the signature

When callback.auth.secretKey is set, every delivery includes an X-Signature header in the form sha256=<hex>: the HMAC-SHA256 of the raw JSON request body, keyed with your secret. Verify it against the raw body bytes — before any JSON parsing or re-serialization — and compare using a constant-time function:

Request headers

Every delivery includes: Plus any custom headers you configured in callback.headers and the authentication headers from callback.auth.

Outbound IP addresses

Webhook deliveries originate from a fixed set of IP addresses. If your endpoint sits behind a firewall, allowlist the addresses for the environment you integrate with:

Delivery and retries

Respond with any 2xx status within 30 seconds to acknowledge a delivery. A non-2xx response or a timeout counts as a failure, and the delivery is retried with exponential backoff: After the fifth failed attempt the delivery is abandoned. Later status changes on the same order trigger new deliveries as usual.

Best practices

  • Acknowledge fast, process async. Return 2xx immediately and process the payload in a background job, so slow processing doesn’t get counted as a failed delivery.
  • Handle duplicates and ordering. Retries and closely-spaced status changes mean deliveries can arrive more than once or out of order. Drop events whose id you have already seen, and because every delivery makes you fetch the order’s current state, compare its statusUpdatedAt against the last value you processed to discard stale updates.
  • Don’t rely on webhooks alone. If your endpoint is down past the retry window, deliveries for that change are lost — reconcile periodically with Get an order.
  • Use secretKey so you can verify deliveries genuinely come from Origin One.