Clip FarmCLIP FARMBETA

The farm, API-first.

One key turns any script or AI agent into a clipping machine: send a VOD, get back ranked vertical clips. Same engine, same queue, same quality as the dashboard.

Get a key

Sign in at app.clip-farm.com, open Settings → API keys, and create one. The key is shown once — copy it immediately. Keys act as your account: they spend your VOD hours, so share them only with agents you trust, and revoke them from the same screen when you are done.

Authenticate

Every request carries the key as a bearer token. Base URL is https://tzjihxghiwzvliolpghm.supabase.co/functions/v1:

Authorization: Bearer cfk_YOUR_KEY

Errors come back as { "error": code, "message": ... } — 401 invalid_api_key for a bad or revoked key, 402 insufficient_credits when the hours run out, 429 when you hit the creation rate limits.

Endpoints

GET /me

Who the key belongs to.

GET /balance

Processing-credit seconds remaining. Read quoted and actual costs; do not assume the charge equals exact source duration.

GET /plan

Plan tier and caps (max VOD length, max source resolution).

POST /twitch/inspect

Body { "vod_url" }. Duration, game, and platform metadata before you submit.

POST /jobs/quote

Validate the exact VOD request without a debit. Supports vod_url, game, claimed_duration_sec, start_sec/end_sec, captions_enabled, supporting_visuals, manual_only and keep_landscape. Returns cost_sec and resolved settings.

POST /jobs

Submit the same quoted fields plus approved_cost_sec, with a stable Idempotency-Key header. Returns the job and queue position. Retain key and body on uncertain retries; changed bodies with the same key return 409. A changed quote requires fresh approval.

GET /jobs

Your recent jobs with status and progress.

GET /jobs/:id

One job plus its clip results as they land.

POST /jobs/:id/cancel

Cancel an owned queued/claimed job. Refunds the charged amount before 50% progress; no cancellation refund at or after 50%. Read refunded and the credit ledger; completed jobs cannot be canceled.

GET /results?job_id=

Clips for a job: score, captions, transcript, storage_key, thumbnail_key.

POST /media/sign

Body { "keys": [storage_key, ...] } → { urls }. 15-minute download URLs for your clips.

POST /uploads

Prepare a pending video upload with name, content_type, exact positive integer size_bytes and optional sha256. PUT the actual bytes to the returned URL with every returned header, including Content-Type and If-None-Match. Maximum 800 MiB; upload URL expires after 15 minutes.

POST /uploads/complete

After PUT succeeds, send { key } with the exact owned upload key. A verified state: ready permits use as a MemeCut source. Missing objects or metadata mismatches return 409. Retry uncertain completion with the same key.

GET /live · POST /live/start · POST /live/:id/stop

Live-watch sessions that clip a stream in near-real-time.

Quote, submit, and retrieve clips

# 1. quote the exact source and options (no job or charge) curl -X POST https://tzjihxghiwzvliolpghm.supabase.co/functions/v1/jobs/quote \ -H "Authorization: Bearer cfk_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"vod_url":"https://www.twitch.tv/videos/VOD_ID","game":"just_chatting","captions_enabled":false,"supporting_visuals":true}' # 2. after approval, replace COST_FROM_QUOTE with the returned cost_sec # Keep the same key and exact JSON body on an uncertain retry. curl -X POST https://tzjihxghiwzvliolpghm.supabase.co/functions/v1/jobs \ -H "Authorization: Bearer cfk_YOUR_KEY" \ -H "Idempotency-Key: YOUR_STABLE_SUBMISSION_UUID" \ -H "Content-Type: application/json" \ -d '{"vod_url":"https://www.twitch.tv/videos/VOD_ID","game":"just_chatting","captions_enabled":false,"supporting_visuals":true,"approved_cost_sec":COST_FROM_QUOTE}' # 3. poll the returned job ID, then GET /results?job_id=JOB_ID curl https://tzjihxghiwzvliolpghm.supabase.co/functions/v1/jobs/JOB_ID \ -H "Authorization: Bearer cfk_YOUR_KEY" # 4. use actual storage keys returned by results curl -X POST https://tzjihxghiwzvliolpghm.supabase.co/functions/v1/media/sign \ -H "Authorization: Bearer cfk_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"keys":["STORAGE_KEY_FROM_RESULTS"]}'

Use it from Claude

Clip Farm ships a native MCP connector for the Claude desktop app, so Claude can clip for you without leaving the conversation — no curl, no agent brief. Connect once and Claude gets the tool registry covering the whole farm: Content Rewards discovery and campaign creation, VOD clipping and moment search, live sessions, the clip library and reviews, MemeCut, publishing drafts, and your credits.

Before you connect: the Claude desktop app (macOS or Windows), signed in, and a Clip Farm account — sign in with Google at app.clip-farm.com.

Connect, once:

  1. In Claude, open Settings → Connectors → Add custom connector.
  2. Name it Clip Farm and paste the MCP URL:
Connector name: Clip Farm Connector URL: https://app.clip-farm.com/mcp
  1. Claude opens the Clip Farm consent screen. Sign in, approve the account shown, done. Approving mints a dedicated key named Claude connector · <date> — revoke it any time in Settings → API keys.
  2. When we ship connector updates, pull them in with Settings → Connectors → Clip Farm → ⋯ → Refresh tools list.

Scripts and other MCP clients can call the same endpoint with a bearer key instead of OAuth: Authorization: Bearer cfk_YOUR_KEY.

Clip Farm for Muse: integration preview

Muse can create a personal Custom Connector from an API. We have a focused Twitch clipping brief and API description for that path. The flow checks your Clip Farm account, inspects the VOD, shows a processing-credit quote, and submits only after you approve it. Enter an API key through Muse's secure credential flow, never in a chat message.

This is a preview for personal Custom Connectors. Clip Farm has not been approved or listed in the Muse connector directory. The directory submission uses Meta's separate review process.

Upload a source for MemeCut

Use prepare_video_upload with the real file size and video MIME type. Its response is pending: the file has not been uploaded yet. Your client must PUT the actual bytes using all returned headers, then call finalize_video_upload with the returned key. Wait for a verified ready result before rendering. If completion times out, retry it with the same key; do not prepare another upload. Browser file tools such as the cutter stay local and do not use this upload flow.

First prompts to try

"What can I do with Clip Farm here?" "Show the highest-paying Content Rewards campaigns." "Clip this VOD up: <twitch VOD url>" "Find the moment chat lost it in this VOD: <url>" "Open MemeCut." "Show my clip library." "How many Clip Farm credits do I have left?"

Ask Claude to clip a VOD and it inspects the link first (free), shows you a credit quote, and only starts the job when you say go.

How it behaves

One panel, not fifty

open_clipfarm is the only tool that opens the embedded workspace panel — home, create, jobs, live, library, MemeCut, settings, the free file editors. Every other tool answers with data right in the chat, so lookups never stack panels.

Quotes before spend

Ordinary VOD clipping uses quote_clip_job then create_clip_job with approved_cost_sec and request_key. Campaigns and operator Farm workflows have their own quote/create tools. Other mutating tools require an explicit instruction; do not assume every tool exposes the same quote flow. Inspecting a VOD is free.

Nothing publishes itself

Choose draft, schedule, or now explicitly in schedule_clip_post. Each action requires your instruction and confirmation; opening a panel or preview does not publish. Content Rewards submission and payment are separate.

Credits count seconds

Read cost_sec from the quote and actual job. Ordinary VOD clipping has a 30-minute minimum and rounds up in 30-minute blocks; a selected section is charged for that section. Owner jobs can cost zero.

Changed your mind?

For ordinary VOD jobs, cancellation before 50% progress refunds the charged amount; at or after 50% it does not. Read the cancellation response and ledger. Failure or partial-delivery refunds follow their own backend policy.

Download links expire

Clips come back as signed URLs that live for 15 minutes. If one lapses, just ask again for a fresh link.

What’s inside

Content Rewards discovery and campaign creation · VOD clipping for supported Twitch, YouTube and Kick sources (subject to source availability; native manual-only mode is Twitch-only) · independent captions and supporting visuals · live clipping with your secret word · VOD moment search and export · clip library and review queue · MemeCut meme overlays · free in-browser file tools (cutter, crop, compressor, MP3, audio balancer, speech enhancer) · link converter (9:16 and 4:5) · publishing drafts via Postiz · clip alerts · billing and ledger. Everything runs against the same services and account permissions as the website.

Troubleshooting

YouTube source downloads

YouTube currently has a production download restriction. A successful metadata lookup, duration hint or quote does not verify media ingestion. Track the existing job; do not repeatedly submit the same blocked source.

Source and mode limits

Use public, accessible ended VODs. Private, removed, login-restricted or DRM-protected media may be unavailable. Native manual-only mode requires Twitch. Supporting visuals require automatic portrait clipping. Inspect and quote the exact request; report restrictions without claiming successful output.

Tools look missing or stale

Claude → Settings → Connectors → Clip Farm → ⋯ → Refresh tools list. Do this after we ship a connector update.

The panel looks stale

Hit the Refresh button in the panel header — it reloads the embedded workspace, not your chat.

Billing, OAuth providers, Kick linking

Those stay on the website. Checkout and external account authorization open on app.clip-farm.com (Settings), never inside the chat.

Hand it to an agent

Configure credentials in your client’s secure settings, then provide this brief. Never paste a real API key into a chat message:

Use Clip Farm through the configured secure Bearer credential. Never ask for a key in chat. Base URL: https://tzjihxghiwzvliolpghm.supabase.co/functions/v1 Check GET /balance, inspect the source, then POST /jobs/quote with vod_url, game (the category slug) and exact options. captions_enabled and supporting_visuals are independent booleans. Optional start_sec/end_sec select a source section. After user approval, POST /jobs with those same fields and approved_cost_sec; send a stable Idempotency-Key header. Retry uncertain responses with the same key and exact body. Do not create a new job just because polling timed out. Poll GET /jobs/:id to a terminal state, read GET /results?job_id=:id, then POST /media/sign with returned keys. Verify playable output. Actual cost is in cost_sec; ordinary VOD jobs round up in 30-minute blocks with a 30-minute minimum. Owner jobs can be free. Check the refund ledger. For Content Rewards use quote_campaign/create_campaign_content and the actual approved episode URL plus output options in params. Clip production is separate from posting, campaign approval and payment. A YouTube metadata response is not proof that its current production media-download restriction is resolved.

Plan caps, credit billing, and the 6-jobs-per-hour creation limit apply to keys exactly as they do in the dashboard.