Skip to main content
Webhooks allow Vendaze to notify your application when events occur in the workspace. Instead of polling, your server receives an HTTP POST the moment something changes. Webhooks can be created and managed in two ways:
  • By the Vendaze customer directly in the platform dashboard
  • Via the public API using the webhooks:manage scope

How it works

  1. A webhook is created with a destination URL and the list of events to subscribe to
  2. When a subscribed event fires, Vendaze enqueues the delivery and sends a POST to that URL
  3. Your server processes the payload and returns 2xx within 10 seconds

Managing webhooks via API

Webhooks created via the API are only visible to the OAuth app that created them. They do not appear in the Vendaze dashboard and cannot be managed by other apps, even if they access the same workspace.

Authenticated deliveries

When auth_enable: true is sent on webhook creation, Vendaze generates a webhook_secret (format: whsec_...) and includes it in the POST /v1/webhooks response. Store it: it will be used to verify incoming deliveries. Each delivery to your endpoint will include the Webhook-Signature header. See Signature verification for implementation details. Changing auth_enable on an existing webhook affects the secret:
  • false to true: a new webhook_secret is generated and returned
  • true to false: the existing webhook_secret is permanently deleted

Payload

Every delivery is a POST with Content-Type: application/json. The envelope structure is:

Signature verification

When auth_enable is true, every delivery includes:
The value is HMAC-SHA256 computed over the raw request body, hex-encoded. Always read the raw bytes before parsing: re-serializing the body may alter whitespace or key order and cause verification to fail. Node.js:
Python:
Always use constant-time comparison (timingSafeEqual / hmac.compare_digest). Standard string equality is vulnerable to timing attacks.

Available events

Retries and delivery guarantees

If your server does not return 2xx within 10 seconds, Vendaze retries the delivery up to 3 times, each attempt delayed by 15 minutes. After all retries are exhausted, the event is permanently dropped. There is no suspension mechanism: missed deliveries are lost. Vendaze delivers with at-least-once semantics. The same event may be delivered more than once due to network issues or retry overlap. Deduplicate using the id field in the envelope.

Best practices

  • Return 200 immediately and process asynchronously. Any handler that takes more than 10 seconds will trigger a retry.
  • Reject missing or invalid signatures with 401. Never process a delivery from an authenticated endpoint without verifying the signature first.
  • Retain received payloads for at least 30 days to aid debugging and auditing.
  • Return 200 for unrecognized event types. New events will be added over time and silently ignoring them keeps your handler stable across API updates.