Skip to main content

Make & n8n Integration

Build advanced multi-step automation workflows with VideoNest using Make and n8n.

Connect through HTTP

Use a schedule you configure with Make's HTTP module or n8n's HTTP Request node. You set up the automation account, credentials, and destination services yourself. This workflow uses generic HTTP requests.

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.

1. Poll videos on a schedule

Configure a scheduled run, then a GET request with no body. Set the URL, query parameters, and header as follows:

GET https://api1.videonest.co/v1/videos?channel=chn_4412&limit=50
Authorization: Bearer vn_live_YOUR_SCOPED_KEY

A complete list response with one video:

{
  "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.

2. Map the response into your workflow

In Make, iterate over data; in n8n, split data into individual items before the next HTTP step. Map the item's id into the update URL and transform title, description, or tags as needed. channel is a channel ID such as chn_4412, not a name.

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.

Update video metadata

Send PATCH https://api1.videonest.co/v1/videos/vid_981234, replacing the last segment with the target video's id. Add Authorization, Content-Type: application/json, and an Idempotency-Key. The body supports these four fields:

{
  "title": "Building the Harbor Bridge",
  "description": "How the bridge went up in 14 months.",
  "tags": [
    "engineering",
    "documentary"
  ],
  "evergreen_eligible": true
}

Send only fields you intend to change. tags replaces the full list; description: null clears the description. An explicit evergreen_eligible choice is preserved against automatic evergreen checks. PATCH returns the updated video.

Uploads and reliable runs

To upload a file, follow the upload endpoints: POST /uploads, PUT the returned parts directly to their signed storage URLs, then POST /uploads/{upload_id}/complete. This requires file bytes; there is no public URL-import POST /videos or feed-publish action.

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.

Was this article helpful?

Thanks for your feedback.

Need help now? Contact support