Developers

The ViggeClips API

Send a link in, get finished vertical shorts back. Three endpoints, one key, no SDK required.

Who is this for, in one minute

You do not need the API to use ViggeClips. The website does everything. The API is for people who want clips without opening a browser — a stream ends, a script sends the VOD link, and the shorts are waiting in the morning. Typical users: a Discord bot for your community, an agency running fifty channels, a Zapier/Make automation, or your own dashboard.

Five steps, no coding experience needed to follow along:

  1. Sign in → Account → API → Create key. Copy the key now — it is shown once.
  2. Open a terminal (Windows: PowerShell · Mac: Terminal).
  3. Paste the Start a job command below, replacing vc_live_… with your key and the URL with your video. Press Enter. You get back an id.
  4. Paste the Poll the job command with that id. Run it again every minute or so.
  5. When status says done, the response lists every clip with a download link. That is it.

Anything you can do here you can also do by clicking on the website — the API just lets a machine do the clicking.

Authentication

Create a key under Account → API. Send it with every request:

Authorization: Bearer vc_live_…
User-Agent: YourApp/1.0

Keys are shown once and stored hashed. Revoking a key kills it instantly. Rate limit: 60 requests/minute per key.

Send a User-Agent. Our edge turns away a handful of clients that identify themselves only by their library’s default name — Python’s built-in urllib is the one people hit — and the refusal comes from the edge, so you get its page instead of our error. Naming your app in one header avoids it entirely. curl, requests, Go and Node are unaffected.

Start a job

POST https://vigge.pro/api/v1/jobs
Content-Type: application/json

{
  "url": "https://www.youtube.com/watch?v=…",
  "language": "auto",          // default. or an ISO code: en sv de es pt fr it nl pl
                               // tr ru uk ar hi id vi th ja ko zh … or "sv+en" (mixed)
  "clipLength": "auto",        // auto | snappy 8-20s | short 15-30s | standard 25-45s
                               // | long 40-75s | extended 60-120s | talk 90-240s
  "kinds": ["laugh","kill"],   // optional. laugh kill story teach scenery hype
                               // — omit for no preference
  "webhookUrl": "https://your-server.example/hook"   // optional
}

→ 202 { "id": "…", "status": "fetching" }

YouTube, Twitch and Kick links are supported. The job draws from the same minute balance as the web app — a job that fails is never charged.

auto is the default everywhere. language detection reads the actual speech; clipLength: "auto" gives each moment the length its own type deserves (a kill stays tight, a story gets room). kinds favours the moment types you name without excluding the rest. The number of shorts follows the length of the recording — roughly one for every four minutes, up to your plan's limit — and the engine sets its own bar (an old qualityPct is accepted and ignored).

Poll the job

GET https://vigge.pro/api/v1/jobs/{id}

→ { "status": "fetching" | "queued" | "running" | "done" | "failed",
    "progress": 0–100,
    "error":  "…",          // only when failed — always says why
    "clips": [               // only when done
      { "idx": 1, "title": "…", "seconds": 27,
        "url": "https://…",       // signed, valid for hours — download promptly
        "thumbUrl": "https://…" }
    ] }

Poll every 30 seconds. Short videos come back in minutes; long streams run several times faster than real time (a 10-hour stream took 91 minutes). If you set webhookUrl we POST { id, status, clips } once when the job ends — but polling is the source of truth; treat the webhook as a doorbell, not a delivery.

Check your balance

GET https://vigge.pro/api/v1/me
→ { "minutes": 87 }

Honesty rules

  • A failed job always carries a reason — and is never charged.
  • Files are kept 30 days, then deleted. Download what you want to keep.
  • You are responsible for the rights to what you send in — same terms as the web app (acceptable use).