in_transit to out_for_delivery — Varmo sends an HTTP POST request to your endpoint with the full updated payload. This removes polling overhead from your infrastructure and ensures your application always reacts to status changes in real time.
Configure your webhook endpoint
Register your webhook URL through the Varmo dashboard under Settings → Webhooks. Your endpoint must meet the following requirements before Varmo will deliver events to it:- Accept
POSTrequests with aContent-Type: application/jsonbody - Return
HTTP 200within 5 seconds of receiving the request - Validate the
X-Varmo-Signatureheader on every inbound request (see Validate webhook signatures)
webhook payload
data object matches the response shape of GET /v1/status/{id}, so you can use the same parsing logic for both polling and webhook-driven flows.
Validate webhook signatures
Every request Varmo sends to your endpoint includes anX-Varmo-Signature header containing an HMAC-SHA256 signature of the raw request body, signed with your webhook secret. Validate this signature before processing any payload to confirm the request originated from Varmo.
Retrieve your webhook secret from the Varmo dashboard under Settings → Webhooks. Then implement signature validation as follows:
Webhook event types
Subscribe only to the event types your application needs. Filtering at the subscription level reduces traffic to your endpoint and simplifies your event handler logic.
Retry behavior
If your endpoint returns a non-2xx status code or does not respond within 5 seconds, Varmo marks the delivery attempt as failed and schedules a retry using exponential backoff. Varmo retries up to 5 times over a 24-hour window before marking the event as permanently undeliverable. Retry schedule after the initial failure:
To avoid processing the same event more than once, treat webhook delivery as at-least-once. Use
data.id combined with event and timestamp as a deduplication key and check against a short-lived store (such as Redis) before updating your application state.