How It Works
- You register an endpoint URL and subscribe it to one or more event types.
- When a matching event occurs, Verial signs the JSON payload and
POSTs it to your URL. - Your endpoint verifies the signature, deserializes the payload, and acts on the event.
- Non-2xx responses are retried with exponential backoff. Persistent failures are surfaced in the dashboard and the webhook is paused if a circuit breaker trips.
Set Up an Endpoint
Webhooks are managed from the organization dashboard under Webhooks.- Click Add endpoint.
- Enter the destination URL (must be HTTPS).
- Paste or generate a shared secret. Save a copy; you will use it to verify signatures.
- Choose the event types to subscribe to.
- Save. The endpoint starts receiving events immediately.
Event Types
The webhook delivery pipeline is in place, but no event types are published
yet. The subscribable event catalog is empty today and will be populated as
lifecycle events ship (benchmark-run and task-run completion are the
expected first shipments, likely under dotted names such as
run.completed). Consult your dashboard for the authoritative list once
events are available.Payload Shape
Every webhook delivery carries a JSON body shaped like this:id: unique event identifier. Use it to deduplicate; Verial may retry the same event on transient failures.type: event type code (for examplerun.completed).timestamp: ISO 8601 timestamp of when the event occurred.data: event-specific payload. Resource fields are snake_case on the wire.
Signature Verification
Every request carries three headers:| Header | Description |
|---|---|
X-Webhook-Id | The webhook endpoint’s ID (informational) |
X-Webhook-Timestamp | Unix seconds when the request was signed |
X-Webhook-Signature | Signature in the form v1=<hex> |
${timestamp}.${raw_body} with your shared secret. Verify it on the raw request body, before any JSON parsing.
Node.js
Always verify on the raw request body, not a re-serialized JSON string.
In Express, use
express.raw({ type: "application/json" }) for the webhook
route; in Hono, read await c.req.text() before JSON.parse.Retries and Delivery Guarantees
Delivery is at-least-once with exponential backoff. Verial retries on 5xx responses and network errors up to the webhook’s configuredmaxRetries (default 5). 4xx responses are treated as non-retryable: fix your endpoint and re-send from the dashboard if needed.
A webhook with repeated failures has its circuit breaker tripped and delivery pauses until the endpoint recovers or an operator re-enables it. The dashboard surfaces last success, last failure, and consecutive failure count for every webhook.
Return a 2xx response as soon as you have accepted the event. Do heavy work asynchronously; if your handler takes longer than the webhook’s timeoutMs (default 30 seconds), Verial will treat the delivery as failed.
Idempotency
Your handler should be idempotent on theid field of the event. Retries can redeliver the same event; deduplicate by recording id in a short-lived store (Redis set, database unique index, etc.).
Next Steps
Run Results
Drill into a completed run after you receive
benchmark_run.completed.GitHub Actions
Pair webhooks with CI to notify PR authors asynchronously.
Authentication
Manage the organization API key used to configure webhooks.
Benchmark Runs
Event payloads mirror the benchmark-run and task-run object shapes.