- ›
/clips— turn a long video into multiple captioned, vertical, ready-to-post shorts in one call - ›
Async job pattern— create returns a job, poll status until the clips are rendered - ›
Auto-editing— captions, reframing, and highlight selection handled for you, not a timeline to scrub - ›
/media— a managed asset library that holds every generated and uploaded file by Company - ›
Edit pass— refine an existing clip with a second editing call before publishing - ›
Composes with /video, /image, and /social— generate, store, clip, and post through one key
Today we're launching /clips and /media — the production layer for video content. /clips turns a long-form video into multiple captioned, vertical, ready-to-post shorts in a single call. /media is the managed library that holds every asset your agent generates or uploads. Together they're the difference between an agent that can make media and an agent that can run a content operation.
The problem: clipping is the bottleneck of every content business
Short-form is where attention lives, but the workflow behind it is brutally manual. A single podcast or stream becomes a dozen clips only after someone:
- Watches the whole thing to find the highlights.
- Cuts each moment, reframes it to vertical, and burns in captions.
- Exports, names, files, and tracks every output so it can actually be posted.
Generation primitives like /video create net-new footage. But most content businesses don't need more footage — they need the long thing they already have, turned into many short things. That's editing, not generation, and it's exactly the step that keeps a "faceless content channel" a full-time human job. Until now.
How /clips works
/clips takes a source video and produces social-ready shorts — selecting highlights, reframing to vertical, and adding captions automatically. It's an async job: you create the job, then poll for the result.
// Kick off a clipping job
const job = await naive.clips.create({
video_url: "https://cdn.example.com/episode-42.mp4",
language: "en",
});
// Poll until the clips are rendered
let status = await naive.clips.status(job.job_id);
while (status.status !== "completed") {
await new Promise((r) => setTimeout(r, 5000));
status = await naive.clips.status(job.job_id);
}
// status now carries the rendered clip URLsThis is the same job model as /image and /video, and every clipping job also surfaces under the unified /jobs primitive, so an agent tracks all its async work in one place.
Refine before you publish
When a clip is close but not perfect, run a second editing pass instead of regenerating from scratch:
const edit = await naive.clips.edit({
clip_id: "clip-uuid",
captions: { style: "bold", position: "bottom" },
});
const result = await naive.clips.status(edit.job_id);/media: the asset library that ties it together
Every file an agent touches needs a home. /media is the Company's managed library — generated images and videos, uploaded source footage, and finished clips all live here, queryable by Company and reusable everywhere else.
# List the library
curl https://api.usenaive.ai/v1/media \
-H "Authorization: Bearer $NAIVE_API_KEY"
# Add an asset by URL
curl -X POST https://api.usenaive.ai/v1/media/upload/url \
-H "Authorization: Bearer $NAIVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://cdn.example.com/logo.png" }'Because media is a first-class store, an asset generated in one step is available to the next without you shuttling files between services.
What you can build with /clips and /media
Run a faceless clipping channel on autopilot — This is the missing piece for the workflow in our faceless clipping channel guide. An Employee ingests a long video, clips it, stores the outputs in /media, and posts them via /social — no human in the edit bay.
Repurpose every long-form drop into a week of shorts — One podcast episode becomes ten clips, scheduled across platforms. The library keeps track of what's been produced and what's been posted.
Build a brand-consistent asset pipeline — Generate logos and B-roll with /image and /video, store them in /media, and pull from the same library across every clip and post.
Give an orchestrated team a shared media store — With /orchestration, a designer Employee generates assets and an editor Employee clips and publishes them — both reading and writing the same /media library.
Get started
Drop this starter prompt into any coding agent to wire up Naïve:
Read https://usenaive.ai/skill.md and use it to set up Naïve in my project.
- Read the docs: usenaive.ai/docs/getting-started/clips
- The full workflow: How to Build a Faceless Clipping Channel
- API reference: usenaive.ai/docs/api-reference/overview
- Quickstart: usenaive.ai/docs/getting-started/quickstart
- Join the community on Discord