Skip to main content
Vellaro can notify your backend whenever something happens in your store (order created, paid, shipped, product changed), so you can keep ERPs, back-office systems, or external pipelines in sync without polling.

How it works

  1. You register one or more endpoints from the admin panel or with the Admin API (POST /admin/webhooks, system permission), choosing the events.
  2. Vellaro sends a POST to your URL on every subscribed event, with a JSON payload describing the event and the resource.
  3. The request is signed: verify the signature with your secret before trusting the content.
  4. Respond with 2xx within 10 seconds to acknowledge receipt; failed deliveries are retried.
The response contains the signing secret (whsec_...), shown only once: store it right away. Later reads only show secret_last_four.

URL rules

The URL must be https to a public host, with no credentials in the URL. The check runs on save (with a DNS lookup) and again on every delivery: A delivery to a destination that meanwhile resolves to an internal network ends as failed, with no further attempts. Redirects are not followed: a 3xx counts as a failure.

Events

GET /admin/webhooks/events returns the list of events you can subscribe to: Test deliveries carry the webhook.test event, which can’t be subscribed to.

Payload

For product.* events, data contains id, name, slug, and is_active. For the full detail, read the resource again with the Admin API.

Verifying the signature

Every request carries these headers: Compute the signature over the received bytes, not over re-serialized JSON, compare it in constant time, and reject timestamps that are too old.

Retries and idempotency

  • Any response other than 2xx (redirects included), a timeout, or a network error is a failed attempt. The delivery is retried with growing waits (1, 2, 4, 8, and 16 minutes).
  • Attempts of the same delivery share the same X-Vellaro-Delivery. A manual redelivery instead creates a new delivery with the same payload: make your processing idempotent (for example on event, data.id, and occurred_at).
  • Answer 2xx right away and do the heavy work in a queue.

Management tools

All routes live under /admin/webhooks/{id} (system permission); a webhook of another store answers 404. Each delivery in the log has event_type, status, attempt, response_status, next_retry_at, delivered_at, and response_body: a safe excerpt of your endpoint’s response (at most 256 printable characters), enough to recognize the error.
After rotate-secret signatures use the new secret immediately and the old one stops verifying. Get your endpoint ready to accept both secrets, rotate, then remove the old one.
Webhooks are not needed for delivering digital products: after payment, the API issues signed download links, documented in the API Reference.