Webhooks
Understand incoming provider webhooks and build customer integrations with scheduled public API polling.
The scoped-key public API currently has no customer webhook registration or outbound callback delivery contract.
Incoming provider hooks and customer callbacks
VideoNest receives incoming provider hooks for services such as TikTok, Dropbox, and Stripe as part of their own integration workflows. These receivers are distinct from customer callbacks and are not scoped-key public API endpoints.
The public API does not offer customer event subscriptions, a signing-secret setup, or a delivery retry policy. A webhook trigger in your automation can receive requests from a system you control; VideoNest does not automatically send public API events to it.
Poll videos instead
Create a scoped vn_live_ key in the dashboard and select its channels. Send Authorization: Bearer vn_live_YOUR_SCOPED_KEY from your automation server. Reading videos requires read_videos. Metadata updates require write_videos and permission for the key owner to edit the selected channel. A key cannot grant access its owner lacks. Store keys in your tool's credential store. See API Authentication.
Run this GET request from your own scheduled worker or HTTP automation:
GET https://api1.videonest.co/v1/videos?channel=chn_4412&limit=50 Authorization: Bearer vn_live_YOUR_SCOPED_KEY
A complete list response example:
{
"object": "list",
"has_more": false,
"next_cursor": null,
"data": [
{
"id": "vid_981234",
"object": "video",
"created_at": "2026-09-02T08:00:14Z",
"updated_at": "2026-09-02T08:05:41Z",
"title": "Building the Harbor Bridge",
"description": "How the bridge went up in 14 months.",
"tags": [
"engineering",
"documentary"
],
"channel": "chn_4412",
"duration": 1325,
"thumbnail_url": "https://cdn.videonest.co/videos/981234/thumb.jpg",
"published_at": "2026-09-01T12:00:00Z",
"visibility": "visible",
"access_mode": "public",
"view_count": 18204,
"source_platform": "youtube",
"evergreen_eligible": true
}
]
}Iterate over data. When has_more is true, send next_cursor as the next request's cursor parameter with the same filters. Stop when has_more is false. limit accepts 1–100, default 50. There is no numbered page parameter.
Track changes in your integration
Store handled video IDs in your own durable state and mark them after your destination action succeeds. For metadata synchronization, compare updated_at or the fields you use on later scans. created_at_min filters ingestion time, not later edits; use overlapping windows and deduplication for new-video discovery. A listed video is not a processing-complete or partner-publication event. The public video object has no processing-status field.
published_at and visibility do not establish processing completion or distribution delivery. Polling returns the current resource representation, not a replayable event log.
Errors and write retries
Branch on the HTTP status. Errors use error.type, error.code, error.message, error.param, error.doc_url, and error.request_id; missing-scope errors also include error.required_scope. Correct credentials or access on 401/403, fix invalid input on 400, and honor Retry-After on 429. Record the Request-Id header for support.
Generate an Idempotency-Key for each logical PATCH or POST. Reuse it with the same method, URL, and body when retrying a timed-out write; use a new key for a different update. Results are retained for 24 hours. Keep write retries separate from polling.
See Make & n8n or Zapier for user-configured polling workflows.