Docs

How ClickPop works

The studio, Vibe Direct, the MCP server and the API, in plain words.

API

The REST API makes and fetches videos from your own code. It uses the same studios, prices and credits as the app. Base URL: https://clickpop.ai/api/v1. Requests and responses are JSON.

Authentication

Create a key on the API keys page. The full key is shown once; we keep only a hash, so a lost key can be revoked and replaced but not recovered. Keep it on your server and send it on every request:

Authorization: Bearer YOUR_API_KEY

Calls that spend credits need a plan on the account.

How a render works

  • Add "dry_run": true to see the price without rendering or spending anything.
  • Without it, the call holds the credits and answers 202 with a video whose status is processing.
  • Poll GET /videos/{id} every few seconds. When status is succeeded, download url. On failed, the credits are already returned and error says why.

POST /videos takes prompt (required), seconds (default 5), resolution (480p, 720p or 1080p; default 480p), model (default auto) and an optional character_id.

Quickstart

# 1. Price it first: nothing renders, nothing is charged
curl -X POST https://clickpop.ai/api/v1/videos \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"A barista slides a latte across the counter, slow motion","seconds":5,"dry_run":true}'

# 2. Start it: 202 with a video in "processing"
curl -X POST https://clickpop.ai/api/v1/videos \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"A barista slides a latte across the counter, slow motion","seconds":5}'

# 3. Poll until status is "succeeded", then download url
curl https://clickpop.ai/api/v1/videos/VIDEO_ID -H "Authorization: Bearer YOUR_API_KEY"

Endpoints

All paths are under https://clickpop.ai/api/v1.

Account and models

GET/meYour account: plan and credit balance.
GET/modelsThe models your key can use, with prices.

Videos

POST/videosMake a video from a prompt. Returns 202; add dry_run for the price.
GET/videosYour videos, newest first.
GET/videos/{id}One video: status, progress and the file url when it is ready.
POST/videos/{id}/brandAdd your brand card to a finished video.
POST/promoA Vibe Direct promo (montage, kinetic, directed and the other modes). Poll it with GET /videos/{id}.

Film Studio

GET / POST/storyboardList storyboards or start one from a brief.
GET / PATCH/storyboard/{id}Read or edit a storyboard.
PATCH/storyboard/{id}/shots/{shotId}Edit one shot.
POST/storyboard/{id}/shots/{shotId}/regenerateRedo one shot.
POST/storyboard/{id}/renderRender the cut.
GET/storyboard/shot-libraryCamera moves and shot types you can ask for.

Lip sync and recast

GET / POST/lipsyncList lip-sync models, or start a job. Needs consent: true.
GET / POST/recastList recast models, or start a job. Needs consent: true.
GET/jobs/{id}Follow a lip-sync or recast job.

Characters and products

GET / POST/charactersList or create characters.
GET / PATCH/characters/{id}Read or edit one character.
GET/productsProducts saved in your studio.
GET/affiliatesAffiliate products saved in your studio.

Socials and automations

GET / POST/social/accountsConnected accounts, or a sign-in link to connect one.
GET / POST/social/postsYour posts, or post or schedule a video.
GET / POST/automationsList or create an automation.
PATCH / DELETE/automations/{id}Change or remove an automation.

Text

POST/chat/completionsOpenAI-compatible chat for scripts and captions. Model deepseek-v4-pro, no streaming.

Errors

Errors come back as JSON with an error field that says what went wrong.

StatusMeaning
400A field is missing or out of range.
401Missing, invalid or revoked API key.
402The account needs a plan, or more credits for this job.
403The account has to finish sign-up (date of birth) first.
404No such item on your account.
5xxSomething failed on our side. You were not charged; try again.
NextFAQ and content rules →