Arcads Video Ad Generator
Generate AI video ads via Arcads External API (https://external-api.arcads.ai).
Setup Required
Add to .env:
ARCADS_API_KEY=your_key_here
Get API key at: https://app.arcads.ai/settings/api
Supported Video Models
| Model |
Best For |
Cost |
| Seedance 2.0 |
UGC-style, product showcase |
~0.06¢/sec |
| Kling 3.0 |
Image-to-video, cinematic |
medium |
| Grok Video |
Fast turnaround, cheap |
~0.027¢/sec (cheapest) |
| Sora 2 / Sora 2 Pro |
High quality, creative |
medium-high |
| Veo 3.1 |
Premium quality with audio |
~0.125¢/sec (most expensive) |
API Endpoint
POST https://external-api.arcads.ai/v2/videos/generate
Authorization: Basic base64(API_KEY:)
Mandatory Steps Before Generating
- Dialogue approval — if video has speech, extract spoken lines, count words, confirm fit
- Credit cost estimate — calculate and show cost breakdown, wait for user confirmation
- Generation count — ask how many variations (default: 1)
Example Request (Seedance 2.0)
import requests, base64, os
api_key = os.getenv("ARCADS_API_KEY")
auth = base64.b64encode(f"{api_key}:".encode()).decode()
payload = {
"model": "seedance-2-0",
"prompt": "Professional product ad video...",
"duration": 5,
"aspectRatio": "9:16"
}
resp = requests.post(
"https://external-api.arcads.ai/v2/videos/generate",
json=payload,
headers={"Authorization": f"Basic {auth}", "Content-Type": "application/json"}
)
data = resp.json()
video_id = data["id"]
Polling for Result
import time
# For Seedance: poll /v1/assets/{id}
# For others: poll /v1/videos/{id}
poll_url = f"https://external-api.arcads.ai/v1/assets/{video_id}"
while True:
r = requests.get(poll_url, headers={"Authorization": f"Basic {auth}"})
status = r.json().get("status")
if status == "completed":
print("Video URL:", r.json()["url"])
break
elif status == "failed":
print("Failed:", r.json())
break
time.sleep(10)
Critical Rules
- Presigned file URLs are single-use — re-upload for each generation
- Seedance: do NOT mix
referenceVideos + referenceImages in same request
- Veo/Sora/Grok: currently reject image inputs — use Kling 3.0 or Seedance for image-to-video
- All errors on Seedance may still charge credits — retry carefully
- Save all output to
outputs/ folder with descriptive names
Aspect Ratios
9:16 — Vertical (TikTok, Instagram Reels, Facebook Stories)
16:9 — Horizontal (YouTube, website banners)
1:1 — Square (Instagram feed, Facebook feed)
File Organization
outputs/
videos/
YYYY-MM-DD/
project-name-v1.mp4
project-name-v2.mp4
logs/
arcads-api.jsonl ← log every API call here
Pricing Reference
| Model |
Per Second |
| Grok Video |
~0.027¢ |
| Seedance 2.0 (img2vid) |
~0.06¢ |
| Seedance 2.0 (vid2vid) |
~0.10¢ |
| Sora 2 |
~0.08¢ |
| Kling 3.0 |
~0.09¢ |
| Veo 3.1 |
~0.125¢ |
1---2name: arcads-video3description: Generate AI video ads using Arcads External API. Supports Sora 2, Veo 3.1, Kling 3.0, Grok Video, Seedance 2.0. Use when user wants to create video ads, promotional videos, product videos, or UGC-style videos.4---56# Arcads Video Ad Generator78Generate AI video ads via Arcads External API (`https://external-api.arcads.ai`).910## Setup Required1112Add to `.env`:13```14ARCADS_API_KEY=your_key_here15```16Get API key at: https://app.arcads.ai/settings/api1718## Supported Video Models1920| Model | Best For | Cost |21|-------|----------|------|22| Seedance 2.0 | UGC-style, product showcase | ~0.06¢/sec |23| Kling 3.0 | Image-to-video, cinematic | medium |24| Grok Video | Fast turnaround, cheap | ~0.027¢/sec (cheapest) |25| Sora 2 / Sora 2 Pro | High quality, creative | medium-high |26| Veo 3.1 | Premium quality with audio | ~0.125¢/sec (most expensive) |2728## API Endpoint2930```31POST https://external-api.arcads.ai/v2/videos/generate32Authorization: Basic base64(API_KEY:)33```3435## Mandatory Steps Before Generating36371. **Dialogue approval** — if video has speech, extract spoken lines, count words, confirm fit382. **Credit cost estimate** — calculate and show cost breakdown, wait for user confirmation393. **Generation count** — ask how many variations (default: 1)4041## Example Request (Seedance 2.0)4243```python44import requests, base64, os4546api_key = os.getenv("ARCADS_API_KEY")47auth = base64.b64encode(f"{api_key}:".encode()).decode()4849payload = {50 "model": "seedance-2-0",51 "prompt": "Professional product ad video...",52 "duration": 5,53 "aspectRatio": "9:16"54}5556resp = requests.post(57 "https://external-api.arcads.ai/v2/videos/generate",58 json=payload,59 headers={"Authorization": f"Basic {auth}", "Content-Type": "application/json"}60)61data = resp.json()62video_id = data["id"]63```6465## Polling for Result6667```python68import time6970# For Seedance: poll /v1/assets/{id}71# For others: poll /v1/videos/{id}72poll_url = f"https://external-api.arcads.ai/v1/assets/{video_id}"7374while True:75 r = requests.get(poll_url, headers={"Authorization": f"Basic {auth}"})76 status = r.json().get("status")77 if status == "completed":78 print("Video URL:", r.json()["url"])79 break80 elif status == "failed":81 print("Failed:", r.json())82 break83 time.sleep(10)84```8586## Critical Rules8788- Presigned file URLs are **single-use** — re-upload for each generation89- Seedance: do NOT mix `referenceVideos` + `referenceImages` in same request90- Veo/Sora/Grok: currently reject image inputs — use Kling 3.0 or Seedance for image-to-video91- All errors on Seedance may still charge credits — retry carefully92- Save all output to `outputs/` folder with descriptive names9394## Aspect Ratios9596- `9:16` — Vertical (TikTok, Instagram Reels, Facebook Stories)97- `16:9` — Horizontal (YouTube, website banners)98- `1:1` — Square (Instagram feed, Facebook feed)99100## File Organization101102```103outputs/104 videos/105 YYYY-MM-DD/106 project-name-v1.mp4107 project-name-v2.mp4108logs/109 arcads-api.jsonl ← log every API call here110```111112## Pricing Reference113114| Model | Per Second |115|-------|-----------|116| Grok Video | ~0.027¢ |117| Seedance 2.0 (img2vid) | ~0.06¢ |118| Seedance 2.0 (vid2vid) | ~0.10¢ |119| Sora 2 | ~0.08¢ |120| Kling 3.0 | ~0.09¢ |121| Veo 3.1 | ~0.125¢ |