Developer API
Two endpoints and a webhook.
Submit a video, poll for clips, or let us call you when they are ready. Every setting the dashboard exposes is a JSON key. API access comes with Pro and Business; create keys under Settings.
Authentication
Send your key as a bearer token. Keys start with cly_live_ and are shown once.
Authorization: Bearer cly_live_…Rate limit: 60 requests a minute per key, 20 project submissions an hour per account.
Submit a video
POST /api/v1/projects — returns 202 with the project id. Credits are charged once the transcript is analysed.
curl -X POST https://clypt.pro/api/v1/projects \
-H "Authorization: Bearer cly_live_…" \
-H "Content-Type: application/json" \
-d '{
"url": "https://youtube.com/watch?v=…",
"title": "Episode 42",
"settings": {
"clipCount": 8,
"aspect": "9:16",
"captionStyle": "punch",
"captionLanguage": "es",
"prompt": "moments about pricing"
}
}'
# → { "id": "prj_01…", "status": "queued" }Settings
| Key | Type | Notes |
|---|---|---|
| clipCount | number 1–20 | How many clips to return. Default 10. |
| minSeconds / maxSeconds | number | Clip length window. Default 20–60. Capped by your plan. |
| aspect | "9:16" | "1:1" | "4:5" | "16:9" | Output frame. Ratios outside your plan fall back to 9:16. |
| resolution | "720" | "1080" | "2160" | 4K is Pro and above. Default 1080. |
| captionStyle | "punch" | "clean" | "neon" | "boxed" | "reveal" | "headline" | "subtle" | "typewriter" | Caption look. Default "punch". |
| captionLanguage | ISO code, e.g. "es" | Translate the burned-in captions. Empty = as spoken. Starter and above. |
| prompt | string | Steer moment finding: "only the pricing objections, skip the sponsor read". |
| keywords | string[] | Topics to prioritise. |
| rangeStart / rangeEnd | seconds | Only clip inside this window of the source. |
| removeFillers | boolean | Drop um / uh / like from captions. Default true. |
| removeSilence | boolean | Cut dead air from the video itself. Starter and above. |
| autoReframe | boolean | Face-tracked reframe. Default true. |
| splitScreen | boolean | Stack two tracked speakers. Pro and above. |
| autoZoom | boolean | Punch in on emphasis words. Default true. |
| hookTitle | boolean | Hook line as a title card. Default true. |
| keywordHighlight | boolean | Accent-colour numbers and power words. Default true. |
| censor | boolean | Bleep and star out profanity. Starter and above. |
| enhanceSpeech | boolean | Denoise and level the voice. Starter and above. |
| brandId | string | A brand kit id from the dashboard. Default: your default kit. |
Poll for clips
GET /api/v1/projects/:id — status, progress and, once rendered, every clip with download links for the video and its captions.
{
"id": "prj_01…",
"status": "ready", // queued | ingesting | transcribing | analyzing | rendering | ready | failed
"progress": 1,
"duration": 3612.4,
"credits_spent": 61,
"clips": [
{
"id": "clp_01…",
"title": "Nobody tells you the first 90 days cost more than year one",
"hook": "…", "summary": "…", "hashtags": ["#founders", "#pricing"],
"start_s": 812.1, "end_s": 851.9,
"score": 86,
"score_parts": { "hook": 91, "standalone": 84, "payoff": 78, "emotion": 72, "flow": 88 },
"aspect": "9:16", "layout": "single", "render_state": "ready",
"download_url": "https://clypt.pro/api/media/renders/…?download",
"captions": { "srt": "…/captions?format=srt", "vtt": "…", "txt": "…" },
"post_copy": { "youtube": { "title": "…", "description": "…", "tags": [] }, "tiktok": { "caption": "…" }, … }
}
]
}GET /api/v1/projects lists your last 50 jobs. Download links use the same key.
Webhook
Set a URL under Settings and we POST project.ready or project.failed with the same payload as the poll endpoint. Requests carry X-Clypt-Event and X-Clypt-Signature, an HMAC-SHA256 of the raw body using the signing secret shown next to your URL.
import crypto from "node:crypto";
export function verify(rawBody, signatureHeader, secret) {
const expected = "sha256=" + crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signatureHeader));
}We retry once after 3 seconds on a non-2xx response, then give up. Zapier, Make and n8n webhook triggers all work without any code.
Errors
400— bad url or settings; the body says what.401— missing or revoked key.402— out of credits, or a setting your plan does not include.404— not your project.429— rate limited; honourRetry-After.