Elvion Developer API
One key. Reasoning chat, multimodal vision, cinematic video, studio voice, and image generation.
Developer Key Sync
Paste your developer API key here. It synchronizes automatically across every playground on this page.
Introduction
Welcome to Elvion AI's programmatic Developer API.
This documentation contains complete specifications, code examples, and interactive testing consoles for every developer endpoint. All endpoints share a single base URL, and every engine — chat, vision, image, video, voice — is billed entirely through Elvion AI. No juggling separate vendor accounts or keys.
Agentic Reasoning
Philadelphia handles multi-turn agentic thinking natively. Strategy, logic, planning, live web search, and a context window big enough for entire codebases.
Three Video Engines
Philadelphia Pro (native audio, up to 2K, reference fusion), Philadelphia Fast (quicker & cheaper), and the Legacy engine.
Seraphina Voice Studio
Generate realistic, expressive voice recordings in dozens of tones and characters straight from text.
Why Build on Elvion
A single AI stack instead of five separate vendor bills.
Most teams stitch together a chat model, an image model, a video model, and a voice model from different providers. Different keys, different pricing pages, different SLAs. Elvion collapses that into one account, one credit balance, and one predictable price list.
| Capability | Elvion AI | Typical multi-vendor stack |
|---|---|---|
| Chat + video + image + voice | One account, one key | Separate accounts per capability |
| Agent context window | Up to 1,000,000 tokens | Often capped much lower |
| Video with native audio | Generated in the same call | Usually a separate audio pass |
| Style + motion + voice fusion | One Reference-to-Video request | Multiple disconnected tools |
| Failed generation | Credits auto-refunded | Varies, often manual |
| Billing | Pay-as-you-go, no subscription | Often monthly seat-based plans |
Philadelphia Chat, built for agents and real engineering
Philadelphia doesn't just answer questions, it thinks step-by-step, calls tools mid-conversation, reads long documents or an entire repository of code in one shot thanks to its huge context window, and writes clean, working code across virtually any language or framework. It's genuinely strong at debugging, refactoring, and multi-file reasoning.
Philadelphia Pro Video, one of the most complete video engines you can call
Native synchronized audio, resolution up to 2K, first/last-frame control, and Reference-to-Video generation that blends a character's look, a clip's motion, and a voice's performance into a single request. Capabilities most platforms only offer as separate, disconnected tools you'd have to stitch together yourself.
Quick Start
Your first API call in under 60 seconds.
1. Generate Your Credentials
Log into the Developer Dashboard, go to API Management, and generate an API key for 10 credits.
2. Call Philadelphia Chat
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/philadelphia/chat" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "Give me a 3-step plan to launch a coffee brand in Lagos."}'import requests
url = "https://web-production-9a18.up.railway.app/api/developer/philadelphia/chat"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
data = {"message": "Give me a 3-step plan to launch a coffee brand in Lagos."}
r = requests.post(url, headers=headers, json=data)
print(r.json())Authentication
Every request must authenticate using your project API key.
Include it in the Authorization header of every request:
Authorization: Bearer elv_sec_yourPrivateKeyHerePricing & Bonus Credits
Predictable pay-as-you-go credit billing. Plus free credits to get started.
Scale Price
- ₦1,000/$1 top-up minimum
- Automatic billing
- Safe payment routing
Core Costs
- API key generation — 10 credits (one-time)
- Philadelphia / Bobby Chat — 3 credits
- Vision Analysis — 3 credits
- Image Generation (V1) — 12 credits
- Image Generation (V2, ×n) — 18 credits/image
- Seraphina Voice — 30 credits flat (≤~460 chars), then per-character beyond that
- Legacy Video — 32 credits/sec
Philadelphia Pro Video, pay per second
Cost = duration × per-second rate, converted to credits at the Developer markup. Reference images beyond the first 5 add ~26 credits each; reference video material is billed at the output per-second rate; reference audio is always free.
| Resolution | Rate | 5s | 10s | 15s |
|---|---|---|---|---|
| 768P | ~52 credits/s | 260 credits | 519 credits | 779 credits |
| 2K | ~85 credits/s | 422 credits | 843 credits | 1,265 credits |
Philadelphia Fast Video, pay per second
Cheaper and quicker than Pro. No reference-to-video mode. All images are free (never billed).
| Resolution | Rate | 5s | 10s | 15s |
|---|---|---|---|---|
| 480P | ~32 credits/s | 162 credits | 324 credits | 486 credits |
| 768P | ~52 credits/s | 260 credits | 519 credits | 779 credits |
Seraphina Voice, character-based pricing beyond the flat fee
The 30-credit flat fee covers short requests. Past roughly 460 characters, cost scales per character at the same effective rate, so a full script or article costs proportionally more than a one-line greeting instead of being billed the same flat 30 credits either way.
| Text length | Approx. words | Credits charged |
|---|---|---|
| Up to ~460 characters | ~75–90 words | 30 (flat) |
| 5,000 characters | ~800 words | ~324 |
| 20,000 characters | ~3,200 words | ~1,296 |
Philadelphia Chat
Elite reasoning engine. Writes code, searches the live web, stays current with events, and holds huge amounts of context in one conversation.
| Field | Type | Description |
|---|---|---|
| messageRequired | string | Latest user prompt. |
| historyOptional | array | Prior turns: [{role, content}]. |
| system_promptOptional | string | Custom persona instruction. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/philadelphia/chat" \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"message": "Write a 3-step plan to launch a coffee brand in Lagos.", "system_prompt": "You are a business advisor."}'import requests
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/philadelphia/chat",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"message": "Write a 3-step plan to launch a coffee brand in Lagos.",
"system_prompt": "You are a business advisor.", # optional
"history": [] # optional: [{"role": "user"/"assistant", "content": "..."}]
}
)
print(r.json()) # {"reply": "...", "thinking": "...", "credits_charged": 3}Playground
Bobby Chat
Fast, friendly companion for ideation, coding, and brainstorming, lighter and quicker than Philadelphia for everyday chat.
| Field | Type | Description |
|---|---|---|
| promptRequired | string | Instructions or question. |
| systemPromptOptional | string | Behavioral override. |
| modelOptional | string | fast for quick, lightweight replies, or thinking for a slower, more deliberate pass. Defaults to thinking on this endpoint. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/bobby/chat" \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"prompt": "Write a short sci-fi story about an offline robot.", "model": "fast"}'import requests
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/bobby/chat",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"prompt": "Write a short sci-fi story about an offline robot.",
"systemPrompt": None, # optional
"model": "fast" # "fast" or "thinking" (default "thinking")
}
)
print(r.json())Playground
Vision Analysis
Native image/video inspection. No separate upload step.
| Key (multipart) | Type | Description |
|---|---|---|
| fileRequired | binary | Image or video file. Any image/* or video/* mime type. Practical limits: images up to ~10MB, video up to ~50MB per request. |
| promptOptional | string | Defaults to "Analyze this media in detail." |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/vision/analyze" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@photo.jpg" \
-F "prompt=Describe this in full detail."import requests
with open("photo.jpg", "rb") as f:
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/vision/analyze",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"file": f},
data={"prompt": "Describe this in full detail."} # optional
)
print(r.json()) # {"analysis": "...", "thinking": "...", "credits_charged": 3}Playground
Image Generation
Philadelphia Image V1 for stylized art across dozens of styles, V2 for photoreal detail and batching. Version 1's (v6) style is extremely good for text in images alongside Version 2.
| Field | Type | Description |
|---|---|---|
| promptRequired | string | Image description. |
| use_minimaxOptional | boolean | true = V2 (18 credits/image), false = V1 (12 credits flat). |
| modelOptional | string | V1 only. One of v6, photoreal, movie, anime, anime_core, illustration, realistic, max, portrait, photoreal2, animereal, radiant, animecinematic, noir, nyx, pixel, rewave, analog, pastel, toonish, apex. Ignored on V2. |
| aspect_ratioOptional | string | V2 only. One of 1:1, 16:9, 4:3, 3:2, 2:3, 3:4, 9:16, 21:9. Takes priority over width/height. |
| width / heightOptional | integer | V2 only. 512–2048px, must be divisible by 8. Ignored if aspect_ratio is set. |
| nOptional | integer | V2 only. Batch count 1–9. Cost scales as 18 × n. V1 always returns exactly 1 image. |
| seedOptional | integer | V2 only. Fix for reproducible output. |
| prompt_optimizerOptional | boolean | V2 only. Lets the engine expand/refine your prompt before generating. |
image_b64; V2 batches (n > 1) return an images_b64 array. Always check for both.# V1
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/generate-image" \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"prompt": "A futuristic city in the clouds, digital art", "use_minimax": false, "model": "v6"}'
# V2 (batched)
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/generate-image" \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"prompt": "A futuristic city in the clouds", "use_minimax": true, "aspect_ratio": "16:9", "n": 3}'import requests
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/generate-image",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"prompt": "A futuristic city in the clouds, digital art",
"use_minimax": True, # False = V1 (12 cr flat), True = V2 (18 cr x n)
"aspect_ratio": "16:9", # V2 only
"n": 3, # V2 only, 1-9
"seed": None, # V2 only
"prompt_optimizer": True # V2 only
}
)
data = r.json()
images = data.get("images_b64") or [data.get("image_b64")]
print(len(images), "image(s) returned")Playground
Seraphina Voice Gen
Realistic speech synthesis across 40 languages and a wide range of tones and characters. Type in the language you want and it speaks that language natively.
credits_charged field always reflects the exact amount deducted — check it, don't hardcode 30.Supported languages (40)
Chinese, Cantonese, English, Spanish, French, Russian, German, Portuguese, Arabic, Italian, Japanese, Korean, Indonesian, Vietnamese, Turkish, Dutch, Ukrainian, Thai, Polish, Romanian, Greek, Czech, Finnish, Hindi, Bulgarian, Danish, Hebrew, Malay, Persian, Slovak, Swedish, Croatian, Filipino, Hungarian, Norwegian, Slovenian, Catalan, Nynorsk, Tamil, Afrikaans.
| Field | Type | Description |
|---|---|---|
| textRequired | string | Script to vocalize. |
| voice_idOptional | string | One of ceo, narrator, anime, movie, elder, knight, abbess, sweet, lovely, casual, gentle, hero, cute, boy, elegant, friendly, inspire. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/seraphina/voice" \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Welcome to Elvion AI.", "voice_id": "narrator"}'import requests, base64
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/seraphina/voice",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"text": "Welcome to Elvion AI.", "voice_id": "narrator"}
)
data = r.json() # {"audio_b64": "...", "voice_used": "...", "format": "mp3", "credits_charged": 30}
with open("voice.mp3", "wb") as f:
f.write(base64.b64decode(data["audio_b64"]))Playground
Philadelphia Pro, Text to Video
Native audio, up to 2K, full camera and mood control. Extremely realistic.
| Field | Type | Description |
|---|---|---|
| promptRequired | string | Scene description. |
| durationOptional | integer | 4–15 seconds. Default 5. |
| resolutionOptional | string | 768P or 2K. Default 2K. |
| ratioOptional | string | One of 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. Defaults to 16:9. Cannot be "adaptive" for text-to-video. |
| camera_motionOptional | string | One of none, push_in, pull_out, pan_left, pan_right, orbit, handheld, drone, shake, zoom_burst. Baked into the prompt. |
| audio_moodOptional | string | One of none, cinematic_score, tense, upbeat, ambient, silence. Shapes the native generated audio. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/philadelphia-pro/generate-text" \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"prompt": "A golden eagle soaring over neon Lagos at night", "duration": 6, "resolution": "2K", "ratio": "16:9", "camera_motion": "drone", "audio_mood": "cinematic_score"}'import requests
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/philadelphia-pro/generate-text",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"prompt": "A golden eagle soaring over neon Lagos at night",
"duration": 6,
"resolution": "2K",
"ratio": "16:9",
"camera_motion": "drone",
"audio_mood": "cinematic_score"
}
)
print(r.json()) # {"status": "submitted", "task_id": "...", "credits_charged": N}task_id. Poll the Pro/Fast Status Poller — never /api/video/status, that poller is Legacy-engine only.Playground
Philadelphia Pro, Image to Video
Animate a first frame, optionally toward a specified last frame.
| Key (multipart) | Type | Description |
|---|---|---|
| first_frameRequired | binary | Starting frame image. |
| last_frameOptional | binary | Target end frame — costs one extra billable image beyond the first 5. |
| promptRequired | string | Motion directions. |
| durationOptional | integer | 4–15s. Default 5. |
| resolutionOptional | string | 768P or 2K. |
| camera_motion / audio_moodOptional | string | Same option sets as Text to Video. |
ratio field here.curl -X POST "https://web-production-9a18.up.railway.app/api/developer/philadelphia-pro/generate-image" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "first_frame=@start.jpg" \
-F "last_frame=@end.jpg" \
-F "prompt=Slow zoom out revealing the skyline" \
-F "duration=6" \
-F "resolution=2K"import requests
with open("start.jpg", "rb") as first, open("end.jpg", "rb") as last:
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/philadelphia-pro/generate-image",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"first_frame": first, "last_frame": last}, # last_frame optional
data={"prompt": "Slow zoom out revealing the skyline", "duration": 6, "resolution": "2K"}
)
print(r.json())Playground
Philadelphia Pro, Reference to Video
Fuse style/character from up to 9 images with pacing and voice from a reference video and/or audio clip.
| Key (multipart) | Type | Description |
|---|---|---|
| promptRequired | string | Scene direction. |
| reference_imagesOptional | binary[] | Up to 9. First 5 are free; each beyond that adds ~26 credits. |
| reference_video_urlOptional | string | Public clip URL. Use this OR reference_video_file, not both — file wins if both are sent. |
| reference_video_fileOptional | binary | Direct upload, max 40MB. |
| reference_video_secondsOptional | integer | Actual clip length, for accurate billing. Defaults to a conservative 15s if omitted. |
| reference_audio_url / reference_audio_fileOptional | string / binary | Public URL or direct upload (max 15MB). Always free — never adds to cost. |
| durationOptional | integer | 4–15s. Default 5. |
| resolutionOptional | string | 768P or 2K. |
| ratioOptional | string | Defaults to adaptive; may be set to any concrete ratio. |
| camera_motion / audio_moodOptional | string | Same option sets as above. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/philadelphia-pro/generate-reference" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "prompt=A knight walks through a burning village" \
-F "reference_images=@char1.jpg" \
-F "reference_images=@char2.jpg" \
-F "reference_video_url=https://example.com/clip.mp4" \
-F "reference_video_seconds=8" \
-F "duration=6" \
-F "resolution=2K"import requests
with open("char1.jpg", "rb") as c1, open("char2.jpg", "rb") as c2:
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/philadelphia-pro/generate-reference",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files=[("reference_images", c1), ("reference_images", c2)], # up to 9
data={
"prompt": "A knight walks through a burning village",
"reference_video_url": "https://example.com/clip.mp4", # or reference_video_file upload
"reference_video_seconds": 8, # actual clip length -- improves billing accuracy
"duration": 6,
"resolution": "2K",
"ratio": "adaptive"
}
)
print(r.json())Playground
Philadelphia Pro, Upscale to 2K
Upgrade a previously succeeded 768P Pro generation to 2K.
| Field | Type | Description |
|---|---|---|
| source_task_idRequired | string | Task ID of a succeeded 768P Pro generation. Must be your own task, within the 7-day query window. |
| resolutionRequired | string | Must be "2K". |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/philadelphia-pro/upscale" \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"source_task_id": "your_succeeded_task_id", "resolution": "2K"}'import requests
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/philadelphia-pro/upscale",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"source_task_id": "your_succeeded_task_id", "resolution": "2K"}
)
print(r.json())Playground
Philadelphia Fast, Text to Video
Quicker, cheaper generation for iteration and previews.
| Field | Type | Description |
|---|---|---|
| promptRequired | string | Scene description. |
| durationOptional | integer | 5–15 seconds — 4s is not supported on Fast Video. Default 6. |
| resolutionOptional | string | 480P or 768P. No 2K on this engine. Default 768P. |
| ratioOptional | string | Same ratio set as Pro. Defaults to 16:9. |
| camera_motion / audio_moodOptional | string | Same option sets as Pro. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/philadelphia-fast/generate-text" \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"prompt": "A skateboarder doing a kickflip at sunset", "duration": 6, "resolution": "768P", "ratio": "9:16"}'import requests
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/philadelphia-fast/generate-text",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"prompt": "A skateboarder doing a kickflip at sunset",
"duration": 6, # 5-15, default 6 (4s not supported)
"resolution": "768P", # "480P" or "768P", no 2K
"ratio": "9:16"
}
)
print(r.json())Playground
Philadelphia Fast, Image to Video
Animate a starting frame at Fast-engine speed and price.
| Key (multipart) | Type | Description |
|---|---|---|
| first_frameRequired | binary | Starting frame. All images are free on Fast Video. |
| last_frameOptional | binary | Target end frame — still free. |
| promptRequired | string | Motion directions. |
| durationOptional | integer | 5–15s. Default 6. |
| resolutionOptional | string | 480P or 768P. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/philadelphia-fast/generate-image" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "first_frame=@start.jpg" \
-F "prompt=Camera pans right as the car drives off" \
-F "duration=6" \
-F "resolution=768P"import requests
with open("start.jpg", "rb") as f:
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/philadelphia-fast/generate-image",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"first_frame": f},
data={"prompt": "Camera pans right as the car drives off", "duration": 6, "resolution": "768P"}
)
print(r.json())Playground
Legacy Engine, Text to Video
Original engine. Silent output, fixed durations.
| Field | Type | Description |
|---|---|---|
| promptRequired | string | Scene description. |
| durationOptional | integer | 6 or 10 only (any value ≥10 rounds to 10, anything else rounds to 6). 6s = 192 credits, 10s = 320 credits. |
| resolutionOptional | string | 512P, 768P, or 1080P. Default 1080P. 1080P is only honored on a 6s clip — a 10s request automatically renders at 768P regardless of what you send. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/generate-video-from-text" \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"prompt": "A lion walking across the savanna at dawn", "duration": 6, "resolution": "1080P"}'import requests
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/generate-video-from-text",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"prompt": "A lion walking across the savanna at dawn",
"duration": 6, # snaps to 6 or 10 server-side
"resolution": "1080P" # only honored if duration ends up as 6; 10s forces 768P
}
)
print(r.json())Playground
Legacy Engine, Image to Video
Directed animation from a starting frame.
| Key (multipart) | Type | Description |
|---|---|---|
| fileRequired | binary | Starting frame. |
| promptRequired | string | Motion directions. |
| durationOptional | integer | 6 or 10, same billing and 1080P/6s rule as Text to Video. |
| resolutionOptional | string | 512P, 768P, or 1080P. Default 768P. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/generate-video-from-image" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@frame.jpg" \
-F "prompt=The waves crash gently onto the shore" \
-F "duration=6" \
-F "resolution=768P"import requests
with open("frame.jpg", "rb") as f:
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/generate-video-from-image",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"file": f},
data={"prompt": "The waves crash gently onto the shore", "duration": 6, "resolution": "768P"}
)
print(r.json())Playground
Legacy Engine, Frame Interpolation
Interpolate between an exact first and last frame.
| Key (multipart) | Type | Description |
|---|---|---|
| first_frameRequired | binary | Start frame. |
| last_frameRequired | binary | End frame. |
| promptRequired | string | Motion description. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/generate-video-from-frames" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "first_frame=@a.jpg" -F "last_frame=@b.jpg" \
-F "prompt=Smooth morph between the two poses"import requests
with open("a.jpg", "rb") as f1, open("b.jpg", "rb") as f2:
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/generate-video-from-frames",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"first_frame": f1, "last_frame": f2},
data={"prompt": "Smooth morph between the two poses"}
)
print(r.json())Playground
Legacy Engine, Subject Consistency
Lock generation to a specific character subject photo.
| Key (multipart) | Type | Description |
|---|---|---|
| subject_photoRequired | binary | Reference photo of the subject. |
| promptRequired | string | Scene the subject appears in. |
curl -X POST "https://web-production-9a18.up.railway.app/api/developer/generate-video-subject" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "subject_photo=@person.jpg" \
-F "prompt=Walking through a busy market"import requests
with open("person.jpg", "rb") as f:
r = requests.post(
"https://web-production-9a18.up.railway.app/api/developer/generate-video-subject",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"subject_photo": f},
data={"prompt": "Walking through a busy market"}
)
print(r.json())Playground
Pro / Fast Status Poller
Use this for every Philadelphia Pro and Philadelphia Fast task.
| Response field | Description |
|---|---|
| status | pending, Success, or cancelled (all HTTP 200) — or an HTTP 500 error if the generation itself failed. |
| url | Time-limited download URL, present when status="Success". |
| resolution / duration / ratio | Echoed back from the completed task. |
curl "https://web-production-9a18.up.railway.app/api/h3/status/YOUR_TASK_ID"import requests, time
task_id = "YOUR_TASK_ID"
url = f"https://web-production-9a18.up.railway.app/api/h3/status/{task_id}"
while True:
r = requests.get(url)
if r.status_code != 200:
print("Failed:", r.json())
break
data = r.json()
if data["status"] == "Success":
print("Done:", data["url"])
break
elif data["status"] == "cancelled":
print("Task was cancelled.")
break
time.sleep(5)Playground
Legacy Status Poller
Use this only for the four Legacy Engine endpoints above.
curl "https://web-production-9a18.up.railway.app/api/video/status?task_id=YOUR_TASK_ID"import requests
r = requests.get(
"https://web-production-9a18.up.railway.app/api/video/status",
params={"task_id": "YOUR_TASK_ID"}
)
print(r.json())Playground
Video Cost Estimator
Preview the exact credit cost before submitting a Pro or Fast video job. No charge or auth required.
| Field | Type | Description |
|---|---|---|
| modeRequired | string | text, image, or reference. reference is Pro-only. |
| modelOptional | string | pro or fast. Default pro. |
| duration / resolutionOptional | integer / string | Same constraints as the matching generation endpoint. |
| image_count / ref_video_secondsOptional | integer | Pro reference-mode billing inputs. |
| tierOptional | string | studio or dev. Use dev to preview Developer API pricing. |
curl -X POST "https://web-production-9a18.up.railway.app/api/h3/estimate-cost" \
-H "Content-Type: application/json" \
-d '{"mode": "text", "model": "pro", "duration": 6, "resolution": "2K", "tier": "dev"}'import requests
r = requests.post(
"https://web-production-9a18.up.railway.app/api/h3/estimate-cost",
json={
"mode": "text", # "text" | "image" | "reference"
"model": "pro", # "pro" or "fast"
"duration": 6,
"resolution": "2K",
"image_count": 0, # relevant for reference mode
"ref_video_seconds": 0,
"tier": "dev" # "dev" to preview Developer API pricing
}
)
print(r.json()) # {"credits": N, "naira": N, "tier": "dev", "model": "pro"}Playground
Errors & Rate Limits
Predictable error payloads for logging integrations.
| Status | Reason | Description |
|---|---|---|
| 400 | Bad Request | Missing required fields, or a parameter outside its valid range (duration, resolution, ratio, file size). |
| 401 | Unauthorized | Invalid or missing API key. |
| 402 | Payment Required | Credit balance below the endpoint's cost. |
| 500 / 502 | Upstream Error | The underlying generation engine rejected or failed the job — message is passed through in detail. Credits already deducted for a failed generation are automatically refunded to your balance. |
Rate limits
At Elvion, Spend is the natural throttle. Extremely high-frequency or clearly abusive traffic patterns may still be slowed or paused. If you're planning meaningful production volume, email elvionailabs@gmail.com first so your account is provisioned correctly. Generally, 30 seconds per request.
FAQ
Common questions from integrators.
Elvion AI is a single platform for reasoning chat (Philadelphia), companion chat (Bobby), image generation, video generation, and voice synthesis, behind one API key and one credit balance.
Pro for native synchronized audio, up to 2K, and reference fusion. Fast for quicker, cheaper iteration when you don't need audio-driven reference generation. Legacy for the original fixed-duration silent engine, including frame interpolation and subject-consistency modes not available elsewhere.
/api/h3/status/{task_id} for anything submitted through a Pro or Fast endpoint; /api/video/status?task_id= only for the four Legacy endpoints. Using the wrong one returns an "invalid task_id" error.
No, Developer API output is unwatermarked for white-label integration into your own product.
Image V1 & 2 can render likenesses of some public figures depending on how you prompt it, though results skew older and softer rather than a sharp match. You're responsible for making sure whatever you generate and publish respects copyright and rights-of-publicity laws where you operate — see the note in the Image Generation section.
Credits deducted for a job that fails on Elvion's side are refunded to your balance automatically, no support ticket required. Feel free to write to us if otherwise.
No, they remain in your balance until spent.
Bonus credits are a constant at Elvion, every new account starts with free credits. Fund your wallet whenever you're ready to go further, or email elvionailabs@gmail.com for test credits before committing.
Yes, it's built for exactly that. Step-by-step reasoning, mid-conversation tool calls, live web search, and a context window big enough to hold long documents or a full codebase make it a strong fit for agents, coding assistants, and support automation, not just chat.
Chat holds up to 1,000,000 tokens of context and can generate responses up to 500,000 tokens. For uploads: vision images up to ~10MB, vision video up to ~50MB, reference video files up to 40MB, reference audio files up to 15MB.
Never call the Developer API directly from a browser or mobile app, route requests through your own backend so the key never reaches the client. See Authentication.