OdinxD MCP Server & REST API v1 Reference
Connect Claude Desktop, Claude Code, Cursor, Antigravity, Windsurf, or your custom workflows (n8n, Make, Python, Node.js) to forge Faceless Ads, Real Estate Tours, and 1080Γ1920 viral reels using your account quota.
1. Dual Architecture: How Does It Work?
OdinxD hosts its official MCP server directly in the cloud over HTTPS (MCP Streamable HTTP JSON-RPC 2.0). You don't need heavy packages or a local GPU: all semantic analysis, AI scene generation, and 60fps mastering run in OdinxD Cloud.
π Option A: Remote Cloud MCP (Zero Downloads)
Connect directly to https://odinxd.com/api/mcp with your API Key. Fastest option for creating Faceless AI Ads from text or editing videos hosted on Dropbox, public Google Drive, or S3.
π» Option B: GitHub Local Bridge (Local Disk Files)
Connect in 1 command from our official GitHub repository (odinxd-ai/OdinMCP, zero external dependencies). When you tell Claude 'Edit C:/Videos/house.mp4', the bridge uploads local files automatically and saves the finished MP4 to your Desktop.
2. Authentication & Personal API Keys
All MCP and API v1 requests (except the public catalog endpoint) authenticate using personal secret tokens prefixed with odx_live_.
| Property | Value / Rule |
|---|---|
| Where to create keys | https://odinxd.com/dashboard?section=mcp β MCP Server & API Keys (requires an active Starter or Pro plan; up to 5 active keys per account). |
| Recommended HTTP Header | Authorization: Bearer odx_live_... |
| Alternative Header | X-API-Key: odx_live_... |
| Storage Security | OdinxD stores only an irreversible SHA-256 digest of your key. The raw key is shown once upon creation and can be revoked anytime. |
| Rate Limits | 120 req/min (reads) β’ 15 jobs/min (new renders) |
3. Step-by-Step Client Setup
Pick your AI client below and replace odx_live_YOUR_API_KEY_HERE with the API Key from your Dashboard:
In Claude Code, connect the zero-install remote HTTP server, or install the Official v2.1 Plugin + Skill (unlocking 0-credit local Whisper/FFmpeg mistake & silence cleaning, 9:16 podcast clipping, and personal stock bank):
claude mcp add odinxd -e ODINXD_API_KEY=odx_live_YOUR_API_KEY \ -- npx --allow-git=all -y github:odinxd-ai/OdinMCP
# Option A β Install Full Plugin in Claude Code (MCP + All 4 Official v2.2 Skills):
/plugin marketplace add odinxd-ai/OdinMCP
/plugin install odinmcp@odinxd
# Option B β Install All 4 Skills ('odin-ugc-factory', 'odin-cinematic-faceless', 'odin-microdrama-director', 'odin-video-preproduction'):
npx skills add odinxd-ai/OdinMCPclaude mcp add --transport http odinxd https://odinxd.com/api/mcp \ --header "Authorization: Bearer odx_live_YOUR_API_KEY"
claude mcp list
4. Complete MCP Tools Reference
Once connected, your AI agent automatically discovers these tools and invokes them from natural language prompts:
Checks your active plan (Starter or Pro), remaining renders, available AI credits (in seconds), and unlocked Motion Graphics packs.
{}Returns the live production catalog: all 20 AI B-Roll styles, 13 real estate room types, 15 fonts, 12 subtitle styles, Motion Graphics components, 24 TTS voices, and 20 BPM music tracks.
| Parameter | Type | Req. | Description |
|---|---|---|---|
section | "all" | "omni_voices" | "ai_styles" | "inmo_rooms" | "fonts" | "subtitles" | "motion_components" | "voices" | "music" | β | Filters a specific section (including 'omni_voices' for Omni 1.2 Flash voices) or returns everything ('all'). |
{
"section": "omni_voices"
}Generates or composites 1 to 4 high-fidelity images via gemini-2.5-flash-image with 0 Remotion renders deducted. Supports all 4 UGC combinations (no photos, product only, avatar only, or fusing separate avatar + product photos into one cohesive 9:16 frame), Microdrama casting portraits, and cinematic keyframes.
| Parameter | Type | Req. | Description |
|---|---|---|---|
prompt | string | β | Visual prompt written directly by your own agent (zero OdinxD LLM cost). |
purpose | "ugc_avatar_with_product" | "character_casting" | "cinematic_keyframe" | "custom" | β | Specialized compositing mode (default: 'ugc_avatar_with_product'). |
avatar_image | string | β | Optional private avatar photo (local path, assetRef, or https:// URL; no celebrities). |
product_images | string[] | β | 1 to 3 real product photos to preserve exact packaging and branding. |
count | 1..4 | β | Number of images to generate (1 AI credit per image). |
{
"purpose": "ugc_avatar_with_product",
"aspect_ratio": "9:16",
"aesthetic": "ugc_smartphone",
"avatar_image": "~/Brand/creadora.jpg",
"product_images": [
"~/Brand/serum_vitamina_c.png"
],
"prompt": "26yo creator smiling naturally in sunlit bathroom vanity holding the serum dropper bottle near cheek, authentic iPhone selfie"
}Generates 1 clip or a parallel batch of up to 10 native video clips (3s to 15s each) via gemini-omni-1.2-flash with Lip-Sync speech (consistent English Voice Library: Aoede, Zephyr, Kore, Puck, Charon... plus Spanish acoustic dialect locks) or cinema foley. Automatic per-item credit refund on failure.
| Parameter | Type | Req. | Description |
|---|---|---|---|
clips / prompt | ClipSpec[] | string | β | Single prompt (in generate_ai_video_clip) or array of 1 to 10 clips (in generate_ai_video_batch). |
duration | 3..15 | β | Integer duration in seconds per clip (default: 8s; up to 15s per take). |
clip_mode | "ugc_talking" | "microdrama_scene" | "cinematic_faceless" | "odin_style" | "custom" | β | Camera and native audio direction mode. |
reference_mode | "animate_photo" | "ingredient" | β | 'animate_photo' animates a composite photo from frame 0; 'ingredient' preserves identity/product across fresh camera angles (Takes 2..N & Microdramas). |
dialogue_script | string | β | Exact spoken script written by your agent (~2.1 words/sec, e.g. ~30 words in 15s). |
voice_preset | string | β | Locked voice across takes: EN ('Aoede', 'Zephyr', 'Kore', 'Leda', 'Puck', 'Fenrir', 'Charon', 'Orus') or ES ('es_mx_female_ugc', 'es_es_female_ugc', etc.). |
{
"language": "en",
"voice_preset": "Aoede",
"save_to_dir": "~/Desktop/ugc_45s_takes",
"clips": [
{
"label": "take_01_hook",
"duration": 15,
"clip_mode": "ugc_talking",
"reference_mode": "animate_photo",
"first_frame_image": "/api/media/u_5_ai_ab12cd34ef/gen_img_01.png",
"prompt": "Natural handheld smartphone selfie in sunlit bathroom, expressive eyes, holding vitamin C serum",
"dialogue_script": "Stop scrolling if your skin still looks tired by noon, because two drops of this changed my entire morning."
},
{
"label": "take_02_cta",
"duration": 15,
"clip_mode": "ugc_talking",
"reference_mode": "ingredient",
"avatar_image": "/api/media/u_5_ai_ab12cd34ef/gen_img_01.png",
"prompt": "Medium kitchen angle applying glowing serum drop to back of hand and smiling warmly at camera",
"dialogue_script": "It absorbs in five seconds with zero sticky residue. Tap below before the starter bundle sells out again."
}
]
}Creates a complete 9:16 vertical ad from scratch with no camera needed: writes the script, synthesizes neural TTS voiceover, generates AI storyboard scenes, and renders the final MP4.
| Parameter | Type | Req. | Description |
|---|---|---|---|
product_name | string | β | Brand, product, service, or property name. |
description | string | β | Key benefits, target audience, offer, and desired visual aesthetic. |
faceless_mode | "commercial_narrated" | "asmr" | "dynamic_beat" | "historical_doc" | β | Creative sub-mode (default: 'commercial_narrated'). |
target_duration | 15 | 30 | 45 | 60 | β | Target duration in seconds (default: 30). |
lang | "es" | "en" | β | Script and voiceover language (default: 'es'). |
voice_id | string | β | TTS voice ID (e.g. 'odin_pro_en', 'ava_ugc_en', 'odin_pro_es'). |
script_text | string | β | Optional custom script (if omitted, AI writes it automatically). |
product_images | string[] | β | Up to 3 real product photos (https:// URLs or local paths via Local Bridge). |
avatar_image | string | β | Optional presenter/avatar photo (https:// URL or local path). |
bg_music | string | β | BPM music track ID (e.g. 'minimal_luxury_122', 'streetwear_hype_140', 'none'). |
{
"product_name": "Penthouse Polanco Sky",
"description": "Penthouse de 320m2 con terraza privada y vista panorΓ‘mica para inversores.",
"faceless_mode": "commercial_narrated",
"target_duration": 30,
"lang": "es",
"voice_id": "lucia_luxury_es",
"bg_music": "minimal_luxury_122"
}Edits your talking-head A-Roll video with 0 to 6 AI B-Roll clips across all 20 styles (including Avatar Stock, UGC Product, and the 3 Real Estate room-matching styles).
| Parameter | Type | Req. | Description |
|---|---|---|---|
video_url | string | β | ONE single clean A-Roll video (already free of silences/bloopers; OdinxD does not merge multiple base videos). Public https:// URL or local path via Local Bridge. |
ai_styles | string[] | β | AI style IDs (e.g. ['inmo_avatar_stock', 'inmo_tour_transition'] or ['scrapbook_polaroid', 'stock_hyperreal']). |
clips_count | 0..6 | β | Number of AI B-Roll clips to generate (default: 2). |
clip_duration | 3 | 5 | 8 | 10 | β | Seconds per AI clip (default: 5). AI credits = clips_count Γ clip_duration. |
inmo_photos | Array<{ url: string; room: string; label?: string }> | β | 1 to 8 labeled room photos for Real Estate AI styles. |
avatar_image | string | β | Private creator/agent face photo (required for 'avatar_stock' and 'inmo_avatar_stock'; NO public figures or celebrities). |
product_images | string[] | β | 1 to 3 real product photos (required for 'ugc_stock'). |
saas_image | string | β | App/SaaS screenshot for 'ui_interface_dark'. |
typography | string | β | Curated font name (default: 'Montserrat', e.g. 'Playfair Display' for luxury/real estate, 'Space Grotesk' for tech). |
subtitle_style | string | β | Subtitle animation style (default: 'kinetic_dinamic'; 'kinetic_blur' for luxury/podcast; 'dynamic' for Fitness popup). |
{
"video_url": "https://dl.dropboxusercontent.com/s/ejemplo/agente_aroll.mp4",
"ai_styles": [
"inmo_avatar_stock",
"inmo_tour_transition"
],
"clips_count": 3,
"clip_duration": 5,
"typography": "Playfair Display",
"avatar_image": "https://dl.dropboxusercontent.com/s/ejemplo/agente_rostro.jpg",
"inmo_photos": [
{
"url": "https://dl.dropboxusercontent.com/s/ejemplo/sala.jpg",
"room": "sala"
},
{
"url": "https://dl.dropboxusercontent.com/s/ejemplo/cocina.jpg",
"room": "cocina"
},
{
"url": "https://dl.dropboxusercontent.com/s/ejemplo/suite.jpg",
"room": "habitacion_principal"
}
]
}Edits an A-Roll in ViralBeat 2.0 Mode: fast rhythmic pacing, dynamic split-screens, SFX, and AI B-Roll via catalog styles or a freeform creative prompt.
| Parameter | Type | Req. | Description |
|---|---|---|---|
video_url | string | β | ONE single clean A-Roll video (already free of silences/bloopers; OdinxD does not merge multiple base videos). https:// URL or local path via Local Bridge. |
ai_clips_count | 0..6 | β | Number of AI scenes (default: 3; set 0 to use zero AI credits). |
ai_clip_duration | 3 | 5 | 8 | 10 | β | Seconds per AI clip (default: 5). |
ai_styles | string[] | β | Optional AI style IDs (includes Real Estate & UGC). |
creative_prompt | string | β | Freeform creative direction when no fixed styles are passed. |
{
"video_url": "https://odinxd.com/sample/founder_reel.mp4",
"ai_clips_count": 3,
"ai_clip_duration": 5,
"ai_styles": [
"cyber_blueprint",
"ui_interface_dark"
],
"typography": "Space Grotesk"
}Edits your A-Roll purely with 60fps animated Motion Graphics components (zoom punches, counters, parallax, kinetic subtitles) using 0 AI credits.
| Parameter | Type | Req. | Description |
|---|---|---|---|
video_url | string | β | ONE single clean A-Roll video (free of silences/mistakes). https:// URL or local path of your A-Roll video. |
components | string[] | β | Optional list of Motion Graphics components (auto-curated if omitted). |
typography | string | β | Curated font (default: 'Montserrat'). |
{
"video_url": "https://odinxd.com/sample/coach_clip.mp4",
"components": [
"CanvasPan",
"KinZoomPunch-V",
"CounterReveal",
"Subtitles-Pop"
],
"typography": "Montserrat"
}Applies dynamic HUD overlays, pop notifications, and stacked 3D typography over your talking-head video with 0 AI credits.
| Parameter | Type | Req. | Description |
|---|---|---|---|
video_url | string | β | ONE single clean A-Roll video (free of silences/mistakes). https:// URL or local path of your A-Roll video. |
typography | string | β | Curated font (default: 'Montserrat'). |
{
"video_url": "https://odinxd.com/sample/aroll.mp4",
"typography": "Plus Jakarta Sans"
}High-energy direct talking-head edit with bold highlighter subtitles for coaches and creators (0 AI credits).
| Parameter | Type | Req. | Description |
|---|---|---|---|
video_url | string | β | ONE single clean A-Roll video (free of silences/mistakes). https:// URL or local path of your A-Roll video. |
typography | string | β | Curated font (default: 'Bebas Neue'). |
subtitle_style | string | β | Subtitle style (default: 'boxed_highlighter'). |
{
"video_url": "https://odinxd.com/sample/gym.mp4",
"typography": "Bebas Neue",
"subtitle_style": "boxed_highlighter"
}Polls real-time progress percentage, friendly stage, and once 'done', returns the direct HD MP4 'downloadUrl' (valid for 72 hours).
| Parameter | Type | Req. | Description |
|---|---|---|---|
job_id | string | β | Job ID returned when launching the render (e.g. 'job_8f92a1c4b3e2'). |
{
"job_id": "job_8f92a1c4b3e2"
}Automatically waits until the cloud render finishes and downloads the final HD MP4 straight to 'save_to_path' on your computer.
| Parameter | Type | Req. | Description |
|---|---|---|---|
job_id | string | β | Job ID to wait for. |
save_to_path | string | β | Destination path on disk (e.g. '~/Desktop/finished_reel.mp4'). |
{
"job_id": "job_8f92a1c4b3e2",
"save_to_path": "~/Desktop/reel_inmobiliario.mp4"
}Checks FFmpeg, Python/uv, faster-whisper, yt-dlp, OpenCV, and PySceneDetect on your PC. Passing 'auto_install: true' automatically provisions an isolated lightweight venv at ~/.odinxd/preprod_env.
| Parameter | Type | Req. | Description |
|---|---|---|---|
auto_install | boolean | β | Automatically installs lightweight media wheels into ~/.odinxd/preprod_env if missing. |
{
"auto_install": true
}Transcribes 1 or multiple raw video takes locally with word-level timestamps and acoustic silence detection so your AI agent can drop spoken mistakes and retakes before stitching.
| Parameter | Type | Req. | Description |
|---|---|---|---|
input_paths | string[] | β | Local file paths of raw video/audio takes (e.g. ['~/Videos/take1.mp4', '~/Videos/take2.mp4']). |
model | string | β | Local faster-whisper model: 'tiny', 'base' (default), 'small', or 'medium'. |
{
"input_paths": [
"~/Videos/toma1.mp4",
"~/Videos/toma2.mp4"
],
"model": "base"
}Strips dead silences and spoken retakes across 1..N raw files, applies 25ms anti-pop audio fades, normalizes loudness (-16 LUFS), and outputs ONE clean 1080Γ1920 MP4 ready for OdinxD.
| Parameter | Type | Req. | Description |
|---|---|---|---|
input_paths | string[] | β | Raw video files (for automatic dead-air removal when 'segments' is omitted). |
segments | Array<{ file: string, start: number, end: number }> | β | Curated clean segments chosen from transcribe_local_media to remove spoken mistakes/retakes. |
output_path | string | β | Optional local path for the cleaned MP4 output. |
{
"segments": [
{
"file": "~/Videos/toma1.mp4",
"start": 3.4,
"end": 14.2
},
{
"file": "~/Videos/toma2.mp4",
"start": 1.1,
"end": 19.6
}
],
"output_path": "~/Desktop/aroll_limpio.mp4"
}Analyzes long local or URL podcast episodes (yt-dlp + Whisper) and extracts vertical 9:16 viral clips with stabilized OpenCV speaker face-centering.
| Parameter | Type | Req. | Description |
|---|---|---|---|
action | 'analyze' | 'extract' | β | 'analyze' returns timestamped blocks; 'extract' exports face-centered 9:16 MP4 clips. |
source | string | β | Local podcast video file or public video URL. |
clips | Array<{ start: number, end: number, title?: string }> | β | Selected 25-58s viral moments when running action='extract'. |
{
"action": "extract",
"source": "~/Videos/podcast_ep12.mp4",
"clips": [
{
"start": 412.5,
"end": 456,
"title": "secreto_retencion"
}
]
}Builds and searches your personal local B-Roll bank (~/.odinxd/stock_bank). Slices raw footage by scene cuts into 3-5s 9:16 clips + JPG thumbnails and outputs 'customStockParam' ready for 'custom_stock'.
| Parameter | Type | Req. | Description |
|---|---|---|---|
action | 'ingest' | 'search' | 'list' | 'tag' | 'remove' | β | Stock bank action to execute. |
source | string | β | Folder or video file to slice into stock clips (for action='ingest'). |
query | string | β | Keywords to retrieve up to 6 matching local stock clips (for action='search'). |
{
"action": "search",
"query": "cocina marmol terraza",
"limit": 4
}Synthesizes a free neural MP3 voiceover + synchronized .srt subtitle file locally on your PC via edge-tts (zero cloud cost). Ideal for Cinematic Faceless commercials and mini-documentaries.
| Parameter | Type | Req. | Description |
|---|---|---|---|
text | string | β | Full narration script written by your agent. |
voice | string | β | Voice preset ('en_male_cinema', 'en_female_luxury', 'es_mx_male', 'es_es_male', etc.). |
{
"text": "En relojerΓa de alta precisiΓ³n, cada milΓ©sima de segundo separa lo ordinario de lo eterno.",
"voice": "es_es_male"
}Stitches multi-take AI UGC ads (30s-60s+), Cinematic Faceless commercials, or full Microdrama episodes locally on your PC at 1080Γ1920 or 1920Γ1080 @ 30fps (-16 LUFS), mixing native Lip-Sync or voiceover + ducked SFX, music, and local Whisper/SRT burned captions.
| Parameter | Type | Req. | Description |
|---|---|---|---|
clip_paths | string[] | β | Ordered list of local .mp4 clips to assemble. |
audio_mode | "keep_native" | "voiceover_master" | β | 'keep_native' keeps Lip-Sync speech (UGC/Microdramas); 'voiceover_master' mixes voiceover_path with ducked clip foley. |
subtitles | "none" | "auto_whisper" | "srt" | β | Optional local subtitle burn-in ('ugc_clean', 'cinema_yellow', 'minimal_luxury', 'boxed_impact'). |
{
"clip_paths": [
"~/Desktop/ugc_45s_takes/01_take_01_hook.mp4",
"~/Desktop/ugc_45s_takes/02_take_02_cta.mp4"
],
"output_path": "~/Desktop/ugc_45s_master.mp4",
"audio_mode": "keep_native",
"subtitles": "auto_whisper",
"subtitle_preset": "ugc_clean"
}5. 20 AI B-Roll Styles & Real Estate Guide
In Hybrid Mode and ViralBeat 2.0, you can mix any of these 20 AI B-Roll styles. Real Estate styles semantically match each spoken sentence to the corresponding property room photo automatically.
π‘ Valid Room IDs for inmo_photos[].room
habitacion_principal β Master Suitesala β Living Roomcocina β Kitchencomedor β Dining Roombano β Bathroomhabitacion_secundaria β Secondary Bedroomterraza β Terrace / Rooftopjardin_piscina β Garden / Poolfachada_exterior β Facade / Exteriorvestidor β Walk-in Closetestudio_oficina β Home Office / Studylobby_amenidades β Lobby / Amenities / Gymotro β Custom room (pass 'label', e.g. 'Wine Cellar')π¨ All 20 AI B-Roll Styles
ID (ai_styles) | Name | Category | Required / Optional References |
|---|---|---|---|
inmo_avatar_stock | Real Estate Avatar Stock | Real Estate | avatar_image (no celebrities) + inmo_photos (β₯1 room) |
inmo_tour_transition | Real Estate POV Transition Tour | Real Estate | inmo_photos (2 to 3 distinct rooms) |
inmo_tour | Real Estate Studio POV Tour | Real Estate | inmo_photos (β₯1 room, no people) |
ugc_stock | UGC Stock (Avatar + Product) | E-Commerce | product_images (1β3) + avatar_image (opt., no celebrities) |
avatar_stock | Avatar Stock (Your Face) | Character | avatar_image (private face only; NO celebrities) |
ui_interface_dark | Dark UI Interface (SaaS VSL) | Tech / SaaS | saas_image (optional) |
scrapbook_polaroid | Scrapbook Polaroid 2.5D | Editorial | None |
stock_hyperreal | Hyperreal Faceless Stock | Cinematic | None |
cinematic_macro | Cinematic Detail B-Roll | Cinematic | None |
vox_editorial | VOX Documentary Cutout | Editorial | None |
motion_dark_minimal | Dark Minimal Motion | Minimal | None |
swiss_design | Minimalist Swiss Design | Minimal | None |
parallax_3d | Parallax 3D Canvas Pan | 3D | None |
dark_glassmorphism | Dark Glassmorphism 3D | 3D | None |
diorama_3d | 3D Papercraft Diorama | 3D | None |
isometric_clay | Isometric Clay 3D | 3D | None |
mannequin_3d | 3D Spotlight Mannequin | Character | None |
cyber_blueprint | Cyber Blueprint Wireframe | Tech | None |
gradient_abstract | Gradient Abstract Mesh | Abstract | None |
graphic_noir | Graphic Noir & Glitch | Stylized | None |
6. Credit Billing, 72h Storage & Auto-Refunds
β‘ How Renders & AI Credits Work
β’ Atomic Generative AI APIs (v2.2 β 0 Renders deducted): 1 AI Credit per generated image; 1 AI Credit/sec for video clips without references; 2 AI Credits/sec with reference images (avatar, product, or casting). β’ Cloud Remotion Engines: 1 Render per finished reel + AI B-Roll seconds. β’ Local Assembler, Motion Stock, Maxy Overlay & Fitness: 0 AI credits.
π‘οΈ Zero-Charge Failure Protection
If a job fails due to an unreachable URL, invalid file, or any technical issue, OdinxD charges 0 renders and automatically refunds 100% of reserved AI credits immediately.
7. REST API v1 Reference (/api/v1/*)
Building custom automations in n8n, Make.com, Zapier, Python, or Node.js without an MCP client? Call our standard REST API v1 directly with your Bearer odx_live_... key:
| Endpoint | Auth | Purpose & Response |
|---|---|---|
GET/api/v1/me | Bearer | Returns active plan, rendersRemaining, aiCreditsRemaining, and unlocked packs. |
GET/api/v1/catalog | Public | Complete JSON catalog (supports ?section=ai_styles|inmo_rooms|voices|music|fonts|subtitles). |
POST/api/v1/upload | Bearer | Multipart media upload (up to 500 MB; MP4, MOV, MP3, WAV, JPG, PNG, WEBP). Returns files[].path for /api/v1/jobs. |
POST/api/v1/ai/image | Bearer | Generates or composites 1..4 AI images (UGC avatar + product, casting, or keyframe). Cost: 1 AI credit/image, 0 renders. |
POST/api/v1/ai/video | Bearer | Generates 1 clip or a batch of up to 10 clips (3sβ15s) via Omni 1.2 Flash + Lip-Sync (1 cr/s no refs, 2 cr/s with refs, 0 renders). |
GET/api/v1/ai/jobs/{jobId} | Bearer | Status and authenticated multi-item outputs (items[].assetRef & items[].downloadUrl) for AI media jobs. |
POST/api/v1/jobs | Bearer | Accepts { "tool": "<tool_name>", "arguments": { ... } }. Returns HTTP 201 with jobId and reserved credits. |
GET/api/v1/jobs/{jobId} | Bearer | Real-time status (pending, rendering, done, failed), progressPercent, stageMessage, and MP4 downloadUrl. |
π» Complete cURL Workflow
# 1. Check your render quota and AI credits
curl -s https://odinxd.com/api/v1/me \
-H "Authorization: Bearer odx_live_YOUR_API_KEY"
# 2. (Optional) Upload a local video and room photos from your machine or server
curl -s -X POST https://odinxd.com/api/v1/upload \
-H "Authorization: Bearer odx_live_YOUR_API_KEY" \
-F "video=@./agent_aroll.mp4" \
-F "avatarImage=@./agent_face.jpg" \
-F "inmoPhotos=@./kitchen.jpg" \
-F "inmoPhotos=@./terrace.jpg"
# 3. Enqueue a render (Faceless Ad, Hybrid Mode, ViralBeat, Motion Stock, etc.)
curl -s -X POST https://odinxd.com/api/v1/jobs \
-H "Authorization: Bearer odx_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tool": "create_faceless_ad",
"arguments": {
"product_name": "Aurum Skincare Serum",
"description": "Pure vitamin C antioxidant serum for radiant skin in 14 days.",
"faceless_mode": "commercial_narrated",
"target_duration": 30,
"lang": "en",
"voice_id": "emma_glow_en",
"bg_music": "skincare_glow_110"
}
}'
# 4. Poll progress and retrieve the direct HD MP4 URL
curl -s https://odinxd.com/api/v1/jobs/job_8f92a1c4b3e2 \
-H "Authorization: Bearer odx_live_YOUR_API_KEY"π Complete Python Automation Example
import time
import requests
API_KEY = "odx_live_YOUR_API_KEY"
BASE_URL = "https://odinxd.com/api/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# 1. Upload local media (optional if you already have public https:// URLs)
with open("my_clean_aroll.mp4", "rb") as vf:
up = requests.post(f"{BASE_URL}/upload", headers=HEADERS, files={"video": vf}).json()
uploaded_video_path = up["files"][0]["path"]
# 2. Enqueue Hybrid Mode Reel
job_resp = requests.post(
f"{BASE_URL}/jobs",
headers=HEADERS,
json={
"tool": "render_hybrid_reel",
"arguments": {
"video_url": uploaded_video_path,
"ai_styles": ["scrapbook_polaroid", "stock_hyperreal"],
"clips_count": 2,
"clip_duration": 5,
"typography": "Montserrat",
},
},
).json()
job_id = job_resp["jobId"]
print("Render queued:", job_id)
# 3. Poll until completion and get HD MP4 link
while True:
st = requests.get(f"{BASE_URL}/jobs/{job_id}", headers=HEADERS).json()
print(f"[{st['progressPercent']}%] {st['stageMessage']}")
if st["status"] == "done":
print("HD MP4 ready:", st["downloadUrl"])
break
if st["status"] == "failed":
raise RuntimeError(st["stageMessage"])
time.sleep(15)β οΈ HTTP Status & Error Codes
| HTTP | Error Code | Cause & Resolution |
|---|---|---|
401 | MISSING_API_KEY / INVALID_API_KEY | Missing Authorization: Bearer odx_live_... header or key was revoked. |
403 | PLAN_REQUIRED_FOR_MCP | Generating and using OdinMCP API keys requires an active Starter or Pro subscription at https://odinxd.com/dashboard?section=mcp. |
402 | INSUFFICIENT_AI_CREDITS | Not enough AI video credits (1 credit = 1 AI second). Top up at /dashboard or use 0-credit modes. |
403 | RENDER_LIMIT_REACHED | Zero remaining renders (rendersRemaining = 0). Buy single renders or subscribe at /dashboard. |
400 | MULTIPLE_BASE_VIDEOS_NOT_SUPPORTED | Multiple base videos passed in 'video_url'. OdinxD accepts ONE single clean A-Roll (0 charge). Clean silences/mistakes and stitch locally first. |
400 | MISSING_AVATAR_IMAGE / MISSING_INMO_PHOTOS / INVALID_AI_STYLE_ID | Pre-flight validation (0 charge): missing required reference photo for the chosen style ('avatar_stock', 'inmo_*', 'ugc_stock') or unknown AI style ID. |
Job Failed (0 charge) | PROMINENT_PERSON_BLOCKED | The 'avatar_image' contains a celebrity/public figure blocked by AI likeness policies. Render stops early with 0 charge and 100% credit refund. Use faceless styles ('stock_hyperreal', 'scrapbook_polaroid'). |
400 | VALIDATION_ERROR / UNSUPPORTED_IMAGE_FORMAT | Invalid parameter, unsupported HEIC/RAW format (use JPG, PNG, WEBP, MP4), or local disk path sent to Remote MCP. |
429 | RATE_LIMIT_EXCEEDED | Exceeded rate limit (120 reads/min or 15 new render mutations/min). |
8. Ready-to-Use Prompts & Troubleshooting
Copy and paste any of these prompts into Claude or Cursor once your MCP is connected:
Take my product photo C:/Brand/serum.png and creator photo C:/Brand/creator.jpg. First fuse them into a single photo holding the serum with generate_ai_image (1 credit), then shoot a 3-take 45-second English UGC ad locking voice 'Aoede' (or 10 distinct 15s hook ads in parallel) and master the final MP4 to my Desktop with assemble_local_timeline and clean captions.
Write and direct Episode 1 (50 seconds) of a corporate thriller vertical microdrama. First generate casting portraits for the 2 leads with generate_ai_image (purpose='character_casting', aesthetic='cinema_35mm'), shoot all 5 scenes via generate_ai_video_batch locking their faces and voices ('Kore' and 'Charon'), and assemble the finished episode locally via assemble_local_timeline.I have 3 raw takes at C:/Videos/take1.mp4, C:/Videos/take2.mp4, and C:/Videos/take3.mp4 with pauses and a couple of retakes. First use your local tools (FFmpeg / transcription) to cut dead silences, remove repeated lines, and merge them into a single clean C:/Videos/clean_aroll.mp4, then send that file to OdinxD in Hybrid Mode with 3 AI clips ('scrapbook_polaroid', 'stock_hyperreal').Check my OdinxD quota first. Then create a 30-second English narrated Faceless Ad for "Velvet Coffee Roasters" (freshly roasted specialty coffee delivered in 24h), using voice 'odin_pro_en' and music 'minimal_luxury_122', and give me the HD MP4 link once ready.
Edit C:/Videos/agent_penthouse.mp4 in Hybrid Mode with 3 clips of 5s using 'inmo_avatar_stock' and 'inmo_tour_transition', font 'Playfair Display', my face photo C:/Videos/agent_avatar.jpg, and room photos C:/Videos/living.jpg (sala), C:/Videos/kitchen.jpg (cocina), and C:/Videos/master.jpg (habitacion_principal). Save the finished MP4 to my Desktop.
Edit https://dl.dropboxusercontent.com/s/example/coach_reel.mp4 using render_motion_stock (0 AI credits) with font 'Anton' and share the HD MP4 download URL when done.
π οΈ Common Troubleshooting
Why did 'npx @odinxd/mcp-server' return 404?
OdinxD's MCP server is hosted over HTTPS at https://odinxd.com/api/mcp. Use 'claude mcp add --transport http ...' in Claude Code, 'npx -y mcp-remote https://odinxd.com/api/mcp ...' in Claude Desktop, or download odinxd-mcp.mjs for local files.
Passing a local C:\Videos\... path in Remote Mode
The cloud server cannot access your local disk in Remote Mode. Pass a public link (Dropbox / Google Drive) or switch to the Local Bridge odinxd-mcp.mjs (Section 3) for automatic local file uploads.