POST requests when key events (like invoice creations or stock adjustments) happen in real-time.
Webhook Architecture & Event Delivery Flow
The diagram below shows how events generated in the POS backend are queued in background workers, delivered to your server, and verified via HMAC signatures.Registering a Webhook
When creating an API integration (see API Key Management), you can optionally provide webhook configuration fields:[!IMPORTANT] You do not set the webhook secret yourself. When you provide awebhookUrl, the server automatically generates a strongwebhookSecret(prefixedveda_whs_) and returns it only once in the creation response. Copy it immediately and store it securely on your server — it cannot be retrieved again.
Example Request
Example Response
CopywebhookSecretand store it securely on your server as an environment variable (e.g.WEBHOOK_SECRET). You will use it to verify every incoming webhook request.
Supported Events
Choosing Which Events to Receive
ThewebhookEvents field is a subscription filter — it controls which of the above events are delivered to your endpoint.
You can subscribe to any combination of the supported events by passing them as a comma-separated string. To receive everything, simply omit the
webhookEvents field when creating the integration.
Webhook Request
All webhooks are delivered as an HTTPPOST request to your webhookUrl with the following headers and a JSON body.
Request Headers
Body Structure
How the Webhook Secret Works
ThewebhookSecret is the shared key between the POS system and your server. Here is the full lifecycle:
Step 1 — Secret is generated When you register a webhookUrl, the POS system generates a unique webhookSecret and returns it in the API response. You store this value on your server (e.g. as an environment variable).
Step 2 — POS signs the outgoing webhook Every time the POS system dispatches a webhook to your webhookUrl, it computes a signature:
x-pos-signature header.
[!NOTE] The signature is computed over the payload object only — not the entire request body.
Step 3 — Your server verifies the signature When your server receives the webhook, it recomputes the same signature using the stored webhookSecret and compares it against the x-pos-signature header. If they match, the request is authentic. If they don’t match, reject it.
Signature Verification Examples
Node.js (Express)
Python (Flask)
Retry Policy & Failure Handling
When an outgoing webhook attempt fails, the system executes an automated retry flow illustrated below:Delivery Expectations & Errors
Webhook Error Handling Examples
1. Signature Verification Failure on Client Server (401 Unauthorized)
If your webhook listener rejects a request due to signature mismatch, return HTTP 401:
2. Temporary Server Busy / Down (503 Service Unavailable)
If your server is undergoing maintenance, return 503 Service Unavailable. The POS system will register the delivery failure and retry automatically via exponential backoff.