Build with Veevid API

Generate AI videos from text or images. One API key, 10 models, full control.

Get Your API Key →

Quick Start

1. Get Your API Key

Create an API key at veevid.ai/settings/api-keys. Save it securely — it's only shown once.

bash
mkdir -p ~/.config/veevid
echo "vv_sk_your_key_here" > ~/.config/veevid/api_key

2. Get a Quote

Before generating, check the exact credit cost:

bash
curl -X POST https://veevid.ai/api/quote \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "veo3",
    "generation_type": "text-to-video",
    "video_quality": "standard"
  }'

Response:

json
{
  "required_credits": 20,
  "current_balance": 451,
  "sufficient": true
}

3. Generate a Video

bash
curl -X POST https://veevid.ai/api/generate-video \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A golden retriever running through sunflowers, cinematic lighting",
    "mode": "veo3",
    "aspect_ratio": "16:9",
    "video_quality": "standard"
  }'

Response:

json
{
  "generation_id": "vg_abc123",
  "status": "processing"
}

4. Check Status

bash
curl https://veevid.ai/api/video-generation/vg_abc123/status \
  -H "Authorization: Bearer YOUR_API_KEY"

When complete:

json
{
  "status": "completed",
  "video_url": "https://cdn.veevid.ai/videos/abc123.mp4"
}

Typical generation time: 60–180 seconds.

Authentication

All API requests require a Bearer token:

Authorization: Bearer vv_sk_your_key_here
  • Keys start with vv_sk_ prefix
  • Create and manage keys at /settings/api-keys
  • Each key shares your account's credit balance
  • Maximum 5 active keys per account

Security tips

  • Never expose your API key in client-side code
  • Use environment variables or secure config files
  • Rotate keys if you suspect a leak

API Reference

POST /api/quote

Get the exact credit cost before generating. Only billing-relevant params are needed — no prompt or image required.

Request:

json
{
  "mode": "kling-3",
  "generation_type": "text-to-video",
  "duration": "10",
  "video_quality": "1080p",
  "model_version": "kling-3-standard",
  "generate_audio": true
}

Response:

json
{
  "required_credits": 250,
  "current_balance": 451,
  "sufficient": true
}

POST /api/generate-video

Generate a video from text or image.

Common Parameters:

ParameterTypeRequiredDescription
promptstringYesScene description (max 5000 chars)
modestringYesModel selector (see Models)
aspect_ratiostringNo"16:9", "9:16", "1:1" etc.
video_qualitystringNoQuality tier (model-specific)
durationstringNoVideo length in seconds (model-specific)
generation_typestringNo"text-to-video" or "image-to-video"
imagestringNoSingle image URL (required for image-to-video)
imagesstring[]NoMultiple image URLs — Kling 3.0: [start, end frame]; Veo 3.1: up to 3 reference images
model_versionstringNoSub-variant (e.g. "kling-3-pro")

Response:

json
{
  "generation_id": "vg_abc123",
  "status": "processing",
  "video_url": null
}

Some models return "status": "completed" with a video_url immediately.

GET /api/video-generation/{generation_id}/status

Poll for generation completion.

Response (processing):

json
{
  "status": "processing"
}

Response (completed):

json
{
  "status": "completed",
  "video_url": "https://cdn.veevid.ai/videos/abc123.mp4"
}

Status values: processing completed or failed

GET /api/credits

Check your current credit balance.

json
{
  "success": true,
  "credits": 451,
  "balance": 451
}

Models

Video Models

ModelmodeDurationAudioKey StrengthsCredits
Veo 3.1veo38s✅ NativeBudget-friendly, fast20–140 credits
Grok Imaginegrok-imagine6/10/15s✅ NativeFastest generation10–60 credits
Veevid 1.0 Proveevid-1.0-pro4–12sAudio-visual sync12–288 credits
Seedance 1.5 Proseedance-1.5-pro4–12sWide aspect ratios12–288 credits
Kling 3.0kling-33–15sMulti-shot, text rendering48–495 credits
LTX 2.3ltx-2-36–20sUp to 4K (2160p)48–960 credits
Kling 2.6kling-2-65–10sCinematic, multi-shot70–280 credits
Sora 2 Stablesora2-stable4–20s✅ NativeBest prompt accuracy80–2000 credits
Sora 2sora210–25s✅ NativeLongest clips, storyboard20–315 credits
Wan 2.6wan-2-65–15sVideo-to-video, multi-shot100–450 credits

Credits vary by duration, resolution, and quality. Use /api/quote for exact pricing.

Generation Types

TypeDescriptionSupported Models
text-to-videoGenerate from text promptAll models
image-to-videoAnimate an imageAll models
reference-to-videoUse reference image for styleVeo 3.1
video-to-videoTransform existing videoWan 2.6

Each model has unique allowed values for duration, aspect ratio, and quality. Use /api/quote to validate parameters.

Code Examples

Python

python
import requests
import time

API_KEY = "vv_sk_your_key_here"
BASE = "https://veevid.ai/api"
HEADERS = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# 1. Quote
quote = requests.post(f"{BASE}/quote", headers=HEADERS, json={
    "mode": "veo3",
    "generation_type": "text-to-video",
    "video_quality": "standard"
}).json()

print(f"Cost: {quote['required_credits']} credits")

# 2. Generate
result = requests.post(f"{BASE}/generate-video", headers=HEADERS, json={
    "prompt": "A chef cooking in a modern kitchen, cinematic",
    "mode": "veo3",
    "video_quality": "standard"
}).json()

gen_id = result["generation_id"]

# 3. Poll
while True:
    status = requests.get(
        f"{BASE}/video-generation/{gen_id}/status",
        headers=HEADERS
    ).json()
    if status["status"] == "completed":
        print(f"Video ready: {status['video_url']}")
        break
    elif status["status"] == "failed":
        print("Generation failed")
        break
    time.sleep(10)

JavaScript / TypeScript

typescript
const API_KEY = "vv_sk_your_key_here";
const BASE = "https://veevid.ai/api";

async function generateVideo(prompt: string) {
  // 1. Quote
  const quote = await fetch(`${BASE}/quote`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      mode: "veo3",
      generation_type: "text-to-video",
      video_quality: "standard",
    }),
  }).then((r) => r.json());

  console.log(`Cost: ${quote.required_credits} credits`);

  // 2. Generate
  const result = await fetch(`${BASE}/generate-video`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ prompt, mode: "veo3", video_quality: "standard" }),
  }).then((r) => r.json());

  // 3. Poll
  while (true) {
    const status = await fetch(
      `${BASE}/video-generation/${result.generation_id}/status`,
      { headers: { Authorization: `Bearer ${API_KEY}` } }
    ).then((r) => r.json());

    if (status.status === "completed") return status.video_url;
    if (status.status === "failed") throw new Error("Generation failed");
    await new Promise((r) => setTimeout(r, 10000));
  }
}

OpenClaw Agent

Install the Veevid skill:

bash
npx clawhub@latest install veevid

Then tell your agent: "Generate a 10-second product video with Kling 3.0"

The agent handles quoting, confirmation, generation, and polling automatically.

Error Codes

CodeMeaningWhat to Do
400Invalid parametersCheck allowed values for the model
401Invalid or missing API keyVerify your key at /settings/api-keys
402Insufficient creditsTop up at /pricing
403Account suspendedContact support
404Generation not foundCheck the generation_id
429Rate limit exceededWait and retry
500Server errorWait a few seconds and retry

Error response format:

json
{
  "error": "Insufficient credits",
  "required": 140,
  "balance": 12
}

Rate Limits

LimitValue
Requests per key per minute30
Requests per account per hour200
Concurrent generations3
API keys per account5