Skip to main content
Instead of polling, register an HTTPS endpoint. BrandGate sends a small signed event when an order, invoice or stock level changes; you then fetch the object for its current state.

Create an endpoint

A company admin can add one in Settings → Developers → Webhooks, or your integration can create one with the webhooks:write scope:
The response contains a secret (whsec_…). It is shown once; store it with your other secrets. Endpoint rules: https:// on port 443, no user name or password in the URL, and a public address. Requests to private or internal networks are refused. A company can have up to 20 endpoints.

Events

An endpoint created with an API key or OAuth connection only receives events that the key or connection is allowed to read, and stops receiving them when the key is revoked or the app is disconnected.

Payload

Events are thin on purpose. They tell you what changed, not the data itself, so a delayed or repeated event can never overwrite newer data:
Fetch the current object with GET /v1/orders/{id}.

Headers

Verify the signature

The signature is an HMAC-SHA256, keyed with the whole secret string including whsec_, over <t>.<raw request body>. Always verify against the raw bytes you received, before parsing JSON, and reject timestamps more than 5 minutes old.

Respond quickly

Answer with any 2xx status within 10 seconds, then do the work in the background. Redirects are not followed and count as failures.

Retries

A failed delivery is retried after 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours, 12 hours and 24 hours, so up to 8 attempts over about two days. Events can arrive more than once and out of order: use BrandGate-Event-Id to skip duplicates and always fetch the current object. After 50 failed deliveries in a row the endpoint is paused and shown as Paused in BrandGate. Create it again once your receiver works.

Ordering and catching up

Webhooks are a signal, not a log. If your receiver was down for longer than the retry window, catch up with GET /v1/orders?updated_since=<last sync time> (see ERP sync).