Webhooks
Receive real-time event notifications from VideoNest via webhooks when videos publish, process, or fail.
See the Webhooks integration overview for feature highlights and use cases.
What webhooks do
Webhooks let VideoNest push event notifications to your server in real time. Instead of polling the API to check whether a video has processed or published, your endpoint receives a POST request the moment the event occurs.
Common use cases
- Trigger downstream workflows when a video finishes processing
- Update a CMS record when a video publishes to a distribution partner
- Send internal notifications when distribution errors occur
- Sync VideoNest events with your data warehouse or analytics system
Registering a webhook endpoint
- Navigate to Settings → Webhooks in your VideoNest dashboard.
- Click Add Endpoint and enter your server URL (must be publicly reachable over HTTPS).
- Select the event types you want to receive. You can subscribe to individual events or all events.
- Save. VideoNest will immediately send a test ping to verify the endpoint is reachable.
Use a tunneling tool such as ngrok to expose a local server during development. Register the tunnel URL as your webhook endpoint, test your handler, then swap in your production URL before going live.
Event types
| Event | Description |
|---|---|
video.processed | A video has finished transcoding and is ready for playback. |
video.published | A video has been published and is live on one or more distribution feeds. |
video.failed | A video failed to process. Includes an error code in the payload. |
distribution.completed | A distribution push to a specific partner completed successfully. |
distribution.failed | A distribution push to a specific partner failed. Includes partner ID and error detail. |
Payload schema
All webhook payloads are JSON and share the same top-level structure:
{
"event": "video.processed",
"timestamp": "2026-03-30T10:15:00Z",
"data": {
"id": "vid_abc123",
"title": "My Video Title",
"status": "ready",
"duration": 142,
"channel_id": "ch_abc123"
}
}For distribution.completed and distribution.failed, the data object includes feed_id, partner_name, and (on failure) error_code and error_message.
Signature verification
VideoNest signs every webhook request using HMAC-SHA256. The signature is sent in the X-VideoNest-Signature header as a hex digest. Your signing secret is shown in Settings → Webhooks when you create or view an endpoint.
To verify a request, compute the HMAC-SHA256 of the raw request body using your signing secret and compare it to the header value. Reject requests that do not match.
// Node.js example
const crypto = require('crypto');
function verifySignature(rawBody, signingSecret, signatureHeader) {
const expected = crypto
.createHmac('sha256', signingSecret)
.update(rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signatureHeader)
);
}Do not process webhook payloads without verifying the signature. Any server that accepts unauthenticated POST requests from the internet is exposed to spoofed events.
Retry behavior
If your endpoint does not respond with a 2xx status within 10 seconds, VideoNest marks the delivery as failed and retries up to 3 times using exponential backoff: after 1 minute, 5 minutes, then 30 minutes. If all retries fail, the event is recorded as undelivered in your webhook log.
Your endpoint should respond with 200 OK as quickly as possible and process the event asynchronously if needed. Returning a 2xx response before completing your handler logic prevents unnecessary retries.
Best practices
- Respond with
200 OKimmediately and defer heavy processing to a background queue. - Store the event
idand skip processing if you receive the same event twice (idempotency). - Validate the
X-VideoNest-Signatureheader on every request before acting on the payload. - Monitor your webhook log in Settings for failed deliveries and investigate promptly.