Overview
Webhooks are the push half of Async Inference. Instead of pollingGET /v1/async/.../{job_id} until a job reaches a terminal state, register an endpoint once and Bifrost delivers a signed HTTP POST the moment the job completes or fails.
Every delivery is signed in the Standard Webhooks format so your receiver can verify it came from your Bifrost instance and was not altered in transit.
Webhooks fire only for async inference jobs. Like Async Inference, this is a gateway-only feature and requires a Logs Store to be configured.
How It Works
Delivery is at-least-once: a failed attempt is retried with exponential backoff, and every attempt for the same event reuses the samewebhook-id. Your receiver must be idempotent — dedupe on webhook-id.
The Delivery Payload
Each delivery is aPOST with a JSON body and three signing headers:
The body:
Verifying Deliveries
Always verify the signature before trusting a delivery. The signature isHMAC-SHA256 over the exact bytes {webhook-id}.{webhook-timestamp}.{body}, keyed with your endpoint’s signing secret, encoded as v1,<base64>.
To verify a delivery:
- Recompute and compare. Recompute the HMAC from the secret and the received
webhook-id,webhook-timestamp, and raw body, then compare it (in constant time) against every candidate in thewebhook-signatureheader. Accept if any matches — the header can carry more than one signature during secret rotation. - Check the timestamp. Reject deliveries whose
webhook-timestampis outside a tolerance window (5 minutes is a good default) to blunt replay attacks. - Dedupe on
webhook-id. Retries reuse the id, so process each id at most once.
whsec_...) is shown once when you create the endpoint. Store it where your receiver can read it, and never hard-code it.
Managing Endpoints
- Web UI
- API
- config.json
Open Webhooks in the sidebar to see your endpoints and their status.




- Select Add Endpoint.
- Enter a unique Name and the delivery URL (HTTPS unless the endpoint allows private networks).
- Choose the events to subscribe to (
async_job.completed,async_job.failed). - Optionally add custom headers (for example an
Authorizationvalue your receiver requires) and toggle Include response to inline job responses.

- Save. The signing secret is shown once in a dialog — copy it now; you cannot retrieve it again.

- Open an endpoint to view its delivery history, send a Test delivery, or Rotate secret if a secret is ever exposed. Rotation takes effect immediately with no grace window, so update your receiver in the same change.

Tuning Deliveries
Each endpoint exposes per-endpoint controls. All are optional and fall back to the defaults below.Next Steps
- Async Inference — submit jobs and poll for results; webhooks notify you when those jobs finish.
- Keys Management — manage the virtual keys used to submit async jobs and fetch results.

