API · v1
Vyclo API
Send a link and get vertical clips with captions, from your code or from Zapier, Make or n8n. We let you know with a signed webhook when they're ready.
Authentication
Create a key in Vyclo → Settings → API keys (workspace owner only; included in the Agency plan and during the free trial). Send it with every request as Authorization: Bearer vy_live_… (or in the X-Api-Key header). The key acts on its workspace: clips also show up in your library and use your plan's minutes like any other video.
Create clips · POST /v1/clips
curl https://api.vyclo.studio/v1/clips \
-H "Authorization: Bearer vy_live_…" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.youtube.com/watch?v=…",
"rightsConfirmed": true,
"count": 5,
"duration": "medium",
"captions": "twitch",
"translateTo": "en",
"webhookUrl": "https://your-server.com/vyclo"
}'HTTP/1.1 202 Accepted
{ "jobId": "5f1c…", "projectId": "9a2e…", "status": "queued", "clips": [] }| Field | Description |
|---|---|
url | Required. https link to a Twitch or Kick VOD or clip, YouTube, Google Drive, Dropbox, an MP4 or an audio file. |
rightsConfirmed | Required, true: you confirm you have the rights to the video. |
count | Number of clips, 1 to 10 (default 5). |
duration | short (~25 s), medium (~45 s, default) or long (~75 s). |
format | vertical (9:16, default), square (1:1) or source (16:9). |
captions | dynamic, impact, modern, neon, twitch, kick, karaoke, minimal, default or none. |
cutPauses | Remove long pauses (default true). |
hookTitle | On-screen hook for the first 3 s (default true). |
progressBar | Progress bar (default false). |
translateTo | en or pt for translated captions; leave it out for the original language. |
profile | Content type for the weekly copy: general, stream, podcast, curso (class), iglesia (church) or negocio (business). |
broll | true to cut in Pixabay stock shots where something visual is mentioned (default false). |
retention | true for the retention background: the speaker on top and a licensed satisfying video below (default false). |
focus | Optional, up to 160 characters: which moments to look for, in your own words (“when I talk about pricing”, “the funny moments”). |
style | Optional: a one-click style (viral, retencion, stream, podcast, predicacion, educativo, negocio; list at GET /api/v1/styles). Sets length, captions and extras; anything you send explicitly wins. |
projectName | Project name in your library (optional). |
webhookUrl | Public https URL we notify when done (optional). |
Status and clips · GET /v1/jobs/{jobId}
curl https://api.vyclo.studio/v1/jobs/5f1c… -H "Authorization: Bearer vy_live_…"
{
"jobId": "5f1c…", "projectId": "9a2e…",
"status": "rendering", // queued · importing · transcribing · selecting · rendering · completed · failed
"clips": [ // appear while they render
{ "id": "…", "title": "¿Cuántas veces aparece la letra R…?", "score": 9, "reason": "abre con una pregunta",
"startSeconds": 913.1, "endSeconds": 950.7, "durationSeconds": 35.2,
"videoUrl": "https://…", "posterUrl": "https://…", "subtitlesUrl": "https://…" }
]
}Video, thumbnail and subtitle (SRT) links are signed and expire after 2 hours: ask for the status again to get fresh links. You can also list a project's clips with GET /v1/projects/{projectId}/clips and see your usage with GET /v1/usage.
Webhooks
If you send webhookUrl, we POST the clips.ready or clips.failed event (up to 3 attempts). Verify the signature with the whsec_… secret shown when you create the key: it's an HMAC-SHA256 of t + "." + body.
POST https://your-server.com/vyclo
Vyclo-Signature: t=1790000000,v1=5d2c…
{ "event": "clips.ready", "jobId": "5f1c…", "projectId": "9a2e…", "clipCount": 5,
"statusUrl": "https://api.vyclo.studio/v1/jobs/5f1c…", "sentAt": "2026-09-28T20:00:00Z" }Verify the signature · Node.js
import crypto from "node:crypto";
function verify(rawBody, header, secret) { // secret: whsec_…
const { t, v1 } = Object.fromEntries(header.split(",").map((part) => part.split("=")));
const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}Python
import hashlib, hmac, time
def verify(raw_body: bytes, header: str, secret: str) -> bool:
parts = dict(part.split("=", 1) for part in header.split(","))
expected = hmac.new(secret.encode(), f"{parts['t']}.".encode() + raw_body, hashlib.sha256).hexdigest()
return abs(time.time() - int(parts["t"])) < 300 and hmac.compare_digest(parts["v1"], expected)AI assistants (MCP)
Vyclo is also an MCP server at https://api.vyclo.studio/v1/mcp: connect your assistant with your API key and ask things like “make 3 short clips of this stream and write the TikTok captions”.
Claude Code
claude mcp add --transport http vyclo https://api.vyclo.studio/v1/mcp \
--header "Authorization: Bearer vy_live_…"Cursor (~/.cursor/mcp.json) and other clients with a URL and headers
{
"mcpServers": {
"vyclo": {
"url": "https://api.vyclo.studio/v1/mcp",
"headers": { "Authorization": "Bearer vy_live_…" }
}
}
}Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"vyclo": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.vyclo.studio/v1/mcp",
"--header", "Authorization: Bearer vy_live_…"]
}
}
}| Tool | What it does |
|---|---|
create_clips | Create clips from a link (same options as POST /v1/clips). |
get_job | Job status and the clips that are ready. |
list_projects / list_clips | Your recent projects and the clips of each. |
get_weekly_pack | The “Your week” pack: ideas, chapters, copy per network, article and links to the carousel and thumbnail. |
get_usage | Minutes and storage used this month. |
list_styles | The one-click styles, to pass their code to create_clips. |
list_recent_clips | The workspace's clips from the last days, favourites and strongest hooks first. |
create_best_of / get_best_of | “Best of the week”: join clips into a landscape YouTube video with a cover and chapters. |
schedule_post / list_scheduled / cancel_post | Post a clip to YouTube or Instagram now or at a time, check what's scheduled and cancel. The assistant must confirm with you first. |
claude.ai, ChatGPT and other assistants with connectors
Add a custom connector with the URL https://api.vyclo.studio/v1/mcp, no key needed: the assistant sends you to Vyclo to approve access (OAuth sign-in) and a “(connector)” key is created that you can revoke in Settings → API keys.
Limits and errors
- 120 requests per minute per key; above that,
429withRetry-After. - URL imports: up to 20 a day per workspace.
400invalid data (the message says which),401missing or revoked key,403not allowed.