CMS Integrations
Connect VideoNest to WordPress, Ghost, and other CMS platforms to embed and sync your published videos.
Embedding VideoNest in your CMS
The most direct way to use VideoNest with any CMS is to copy your video's embed code from the Media Library and paste it into your post or page. This works with WordPress, Ghost, and any other CMS that supports custom HTML or iframe embeds.
See Embedding the Player for full embed code documentation, and Responsive Embeds for making the player fluid in your CMS layout.
WordPress
VideoNest embeds work in both the Block Editor (Gutenberg) and the Classic Editor.
Block Editor: In your post or page, add a Custom HTML block and paste your VideoNest iframe embed code directly. The player previews in the editor and renders in the published post.
Classic Editor: Switch to the Text tab (not Visual) and paste the iframe embed code at the cursor position. Do not paste in Visual mode — the editor may strip iframe tags.
Shortcode: If you prefer shortcodes, paste your iframe code into a reusable block or use a shortcode plugin that registers an HTML passthrough. VideoNest does not currently publish its own WordPress plugin, but standard iframe embed codes are compatible with all major shortcode managers.
Wrap the iframe in a <div> with position:relative; padding-bottom:56.25%; height:0; and set position:absolute; top:0; left:0; width:100%; height:100%; on the iframe itself. This maintains 16:9 aspect ratio at any container width.
Ghost
In the Ghost editor, insert an HTML card (type /html to add one). Paste your VideoNest iframe embed code into the card. Ghost renders the iframe as-is in the published post. The same responsive wrapper technique described for WordPress applies here.
Sync metadata with scheduled API requests
Configure your own worker or HTTP automation in Make or n8n, or use the Zapier HTTP workflow. You supply the automation and CMS accounts, credentials, and create/update logic. The public API provides polling rather than processing or publication callbacks.
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.
Start each run with:
GET https://api1.videonest.co/v1/videos?channel=chn_4412&limit=50 Authorization: Bearer vn_live_YOUR_SCOPED_KEY
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.
- Read each video from
dataand look up itsidin a durable mapping from VideoNest video ID to CMS post ID. - For a new ID, call your CMS create-post API with that CMS's authentication. Map
titleto the title anddescriptionto the excerpt or text body. Create a draft for editorial review. - Save the CMS post ID after creation succeeds. Compare metadata or
updated_aton subsequent scans and update the existing post through your CMS API. Use the CMS's own deduplication or retry mechanism for uncertain writes. - For a player, copy iframe embed code from the VideoNest dashboard and store it in your mapping. The public video object has no
embed_url; do not construct an iframe URL from the video ID.
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.
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.