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": [] }
FieldDescription
urlRequired. https link to a Twitch or Kick VOD or clip, YouTube, Google Drive, Dropbox, an MP4 or an audio file.
rightsConfirmedRequired, true: you confirm you have the rights to the video.
countNumber of clips, 1 to 10 (default 5).
durationshort (~25 s), medium (~45 s, default) or long (~75 s).
formatvertical (9:16, default), square (1:1) or source (16:9).
captionsdynamic, impact, modern, neon, twitch, kick, karaoke, minimal, default or none.
cutPausesRemove long pauses (default true).
hookTitleOn-screen hook for the first 3 s (default true).
progressBarProgress bar (default false).
translateToen or pt for translated captions; leave it out for the original language.
profileContent type for the weekly copy: general, stream, podcast, curso (class), iglesia (church) or negocio (business).
brolltrue to cut in Pixabay stock shots where something visual is mentioned (default false).
retentiontrue for the retention background: the speaker on top and a licensed satisfying video below (default false).
focusOptional, up to 160 characters: which moments to look for, in your own words (“when I talk about pricing”, “the funny moments”).
styleOptional: 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.
projectNameProject name in your library (optional).
webhookUrlPublic 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_…"]
    }
  }
}
ToolWhat it does
create_clipsCreate clips from a link (same options as POST /v1/clips).
get_jobJob status and the clips that are ready.
list_projects / list_clipsYour recent projects and the clips of each.
get_weekly_packThe “Your week” pack: ideas, chapters, copy per network, article and links to the carousel and thumbnail.
get_usageMinutes and storage used this month.
list_stylesThe one-click styles, to pass their code to create_clips.
list_recent_clipsThe 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_postPost 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, 429 with Retry-After.
  • URL imports: up to 20 a day per workspace.
  • 400 invalid data (the message says which), 401 missing or revoked key, 403 not allowed.