Every Listing Visual. One API. Pay Per Image.
Virtual staging, photo enhancement, twilight conversions, marketing graphics — stop juggling vendors. One API key, 10+ models, results in seconds.
Images from $0.21 each. No subscriptions. No per-seat fees. No minimum commitments.
If your listing video pipeline used Sora, it’s already broken. CreativeAI is a drop-in replacement — same OpenAI SDK, 5+ video models, async webhook delivery.
Migration planFirst Listing Video in 60 Seconds
Sign up, grab your API key, and paste this command. Your listing photo becomes a 5-second cinematic clip — no SDK, no integration, just one curl.
Paste the command below
Replace the photo URL with any listing image. Video delivers in 60–90s.
curl -X POST https://api.creativeai.run/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "vidu-2.0",
"image_url": "https://your-cdn.com/listing-photo.jpg",
"prompt": "Gentle cinematic dolly forward through this room, warm afternoon light",
"duration": 5,
"webhook_url": "https://your-app.com/webhooks/creativeai"
}'
# Returns immediately with { "id": "job_...", "status": "processing" }
# Webhook fires in ~60-90 seconds with the MP4 URL.
# Or poll: GET /v1/video/generations/{id}
# Cost: 5 credits (~$0.36) — included in your free signup credits.model fieldListing Videos in Seconds — Not Hours
Traditional listing-video services promise 24-hour turnaround. With CreativeAI's async API, each room renders in 60–90 seconds and delivers via webhook independently. A 4-room listing package finishes in under 2 minutes — not the next business day.
You're Sending $879/mo to Three Different Vendors
Staging companies, photo editors, twilight conversion services, stock libraries — each with its own portal, pricing, and turnaround time.
Vendor Stack vs. One API
Why Not Integrate Kling / Vidu Directly?
If you're building a listing-video platform (Property Video AI, AutoReel, or similar), you could integrate each video provider directly. Here's what that means in practice.
Bottom line: Direct integration means building and maintaining failover, webhook normalization, billing aggregation, and model-migration logic yourself — for every provider. CreativeAI handles all of that behind one endpoint so you can focus on your listing-video product, not infrastructure.
Built for Teams That Move Listings Fast
Pay Only When You Generate
Images cost $0.21–$0.30 each (3 credits per image). No monthly staging subscriptions, no per-seat fees. Quiet month in the market? Your bill drops to near zero.
10+ Models, One Account
Photorealistic interiors (Seedream), creative marketing graphics (Flux), and property video (Kling, Vidu) — all from one API key. Pick the best model for each job.
Results in Seconds, Not Hours
Traditional staging takes 24-48 hours. CreativeAI returns images in seconds. List faster, iterate on styling instantly, and never miss a deadline.
Consistent Listing Style
Use the same prompt template across every listing for a unified brand look. No more style variation between different editors or staging vendors.
OpenAI SDK Compatible
Integrates with any PropTech stack, CRM, or MLS tool that supports OpenAI's image API. Automate your entire listing photo pipeline.
Commercial Rights Included
Every generated image is yours to use on MLS, Zillow, Realtor.com, social media, print flyers, and anywhere else. No extra licensing fees.
What Property Marketers Generate
Virtual Staging
Generate furnished room images from text descriptions. Specify style, furniture, lighting, and layout. Produce multiple staging options per room so sellers can choose their favorite.
Prompt: "Bright living room with mid-century modern furniture, warm oak floors, large windows with sheer curtains, professionally staged for real estate listing"
Twilight & Golden Hour Conversions
Transform daytime exterior shots into stunning twilight or golden-hour scenes. Warm interior glow, dramatic sky, landscape lighting — the visual style that sells homes faster.
Prompt: "Luxury home exterior at twilight, warm lights glowing from windows, dramatic sunset sky, professional real estate photography"
Sky Replacement & Photo Enhancement
Generate versions of your listing with perfect blue skies, dramatic sunsets, or seasonal settings. Enhance curb appeal without waiting for the right weather.
Prompt: "Beautiful suburban home, perfect blue sky with white clouds, manicured lawn, vibrant colors, professional listing photo"
Marketing & Social Media Visuals
Create open house announcements, just-listed graphics, neighborhood lifestyle images, and agent branding content — all from text prompts, all on-brand.
Prompt: "Modern real estate social media post, luxury property, elegant typography space, dark background, gold accents"
Vacant Property Visualization
Help buyers visualize potential in empty spaces. Generate different room configurations, color schemes, and decor styles to match buyer demographics.
Prompt: "Empty loft space reimagined as open-concept kitchen and dining area, industrial chic style, exposed brick, pendant lighting"
Commercial Property Marketing
Visualize office fit-outs, retail configurations, and mixed-use spaces. Show prospects what a raw commercial space could become with the right tenant.
Prompt: "Modern open-plan office with standing desks, collaboration areas, glass meeting rooms, natural light, commercial real estate listing"
Listing Photo → Video Clips
Turn existing listing photos into short walkthrough-style video clips via async API. Submit one photo or an entire listing photo-set in parallel — each room fires as a separate async job and delivers via webhook independently. Perfect for MLS video fields, social reels, and property portal listings.
POST /v1/video/generations with image_url + webhook_url → 5s cinematic push delivered async
What It Actually Costs
A team processing 50 listings/month at ~5 images each (250 images)
Traditional Vendor Stack
Separate staging, editing, and twilight services
Pay-Per-Image
One API for staging, enhancement, and marketing
Per-Asset Video Costs, Not Subscription Fog
Every listing video is a single API call with a known credit cost. No monthly seats, no per-listing platform fees — just pay for what you render.
Full Listing Cost — Photos + Staging + Video
What it actually costs to process one 4-room listing end-to-end via API.
| Task | Quantity | Cost Range |
|---|---|---|
| Photo enhancement (sky, color, cleanup) | 10 photos | $2.10–$3.00 |
| Virtual staging (empty → furnished) | 4 rooms | $0.84–$1.20 |
| Listing video clips (5s each, async) | 4 rooms | $1.44–$4.80 |
| Total per listing | $4.38–$9.00 |
Listing-Video App Margin Calculator
Building a listing-video SaaS like ListingHub or RealtyVideo? Here's what your unit economics look like when you white-label CreativeAI as your video backend.
| Metric | Low Estimate | High Estimate |
|---|---|---|
| You charge per listing | $15 | $30 |
| Your API cost per listing (photos + staging + 4 clips) | $4.38 | $9.00 |
| Gross margin per listing | $10.62 (71%) | $21.00 (70%) |
| At 200 listings / month | $2,124 margin | $4,200 margin |
Your Listing Video Subscription Plans
Real-estate video SaaS companies sell monthly plans — free tier, $29/mo, $79/mo. Here's what each plan tier actually costs you in API spend.
| Your Plan Tier | Listings / mo | Videos / listing | API Cost | You Charge | Margin |
|---|---|---|---|---|---|
| Free / Trial | 3 | 2 clips | ~$2.16 | $0 | CAC — lead capture |
| Starter — $29/mo | 10 | 3 clips | ~$10.80 | $29 | $18.20 (63%) |
| Pro — $79/mo | 40 | 4 clips | ~$57.60 | $79 | $21.40 (27%) |
| Agency — $199/mo | 120 | 4 clips | ~$172.80 | $199 | $26.20 (13%) |
Math: each 5s listing clip = 5 credits (Vidu 2.0) at ~$0.36/clip or 12 credits (Kling v2.1) at ~$0.84/clip. Table uses Vidu for cost-optimized plans. Same endpoint — swap the model field to offer a premium tier at Kling quality. Bulk credit packs lower per-credit cost further.
Free-tier cost stays under $3/mo — cheaper than a single Facebook ad click to acquire the same lead.
Larger credit packs reduce per-credit cost well below $0.08 — margins widen as your subscriber base grows.
Slow month? You pay zero in API costs. Credits don't expire. Your margin never inverts even when churn spikes.
Selling unlimited videos? Cap at 200 listings/mo and your API spend is still under $145 — charge $149/mo for 97%+ margin on average usage.
Listing Photo to Publish-Ready Video in 4 Steps
How Property Video AI, listing-video SaaS, and real estate media apps use CreativeAI to ship listing videos at scale — with production-grade delivery guarantees your clients can depend on.
Upload Listing Photos
Your app sends listing photo URLs (any CDN) to POST /v1/video/generations with a motion prompt per room.
All rooms submit in parallel — no sequential queue.
Async Job Returns Instantly
Each room gets a unique job ID. Your API call returns in <1s — no blocking, no long-poll.
Status: pending → processing → completed.
Webhook Delivers Per-Room
Each room fires its own signed webhook independently when rendering completes (60-90s typical).
HMAC-SHA256 verified. Auto-retry on failure.
Publish-Ready Video
CDN-hosted MP4 URL delivered in the callback. Match job ID → listing → room and publish to MLS / portal.
All rooms done? Assemble the listing package.
Production Delivery Guarantees
What your SLA page can promise when CreativeAI is your video backend.
HMAC-SHA256 Signed Webhooks
Every callback includes a verifiable signature using your API key. Reject spoofed payloads with a single HMAC check.
Automatic Retry on Failure
If your endpoint returns non-2xx, CreativeAI retries delivery automatically. Your pipeline never silently drops a completed render.
7-Day Idempotency Window
Duplicate webhook deliveries are safe — each job ID is deduped for 7 days. Process-once logic without building your own dedup layer.
429 Failover Across Providers
If one video model provider is rate-limited, CreativeAI automatically fails over to an equivalent model. Your listing pipeline never stalls on a 429.
Timeout Refund Guarantee
If a render exceeds the timeout threshold, credits are refunded automatically. You never pay for a video that was not delivered.
Per-Room Independent Status
Each room in a listing reports its own status. Poll GET /v1/video/generations/{id} any time, or wait for per-room webhooks — no all-or-nothing batches.
Add AI Visuals to Your Listing Workflow
OpenAI SDK compatible — if your PropTech stack works with OpenAI, it works with CreativeAI. Or use the web Studio with zero code.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_CREATIVEAI_KEY",
base_url="https://api.creativeai.run/v1"
)
# Virtual staging — describe the room you want
result = client.images.generate(
model="seedream-3.0",
prompt="Modern living room with light oak floors, neutral "
"Scandinavian furniture, large windows with natural "
"light, professionally staged for real estate listing",
size="1536x1024"
)
print(result.data[0].url) # Staged image URLcurl -X POST https://api.creativeai.run/v1/images/generations \
-H "Authorization: Bearer YOUR_CREATIVEAI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-1",
"prompt": "Luxury kitchen with marble countertops, pendant lighting, staged for MLS listing, professional real estate photography",
"size": "1536x1024"
}'# Process every listing in a spreadsheet
import csv
for row in csv.DictReader(open("listings.csv")):
result = client.images.generate(
model="seedream-3.0",
prompt=f"Professionally staged {row['room_type']}, "
f"{row['style']} decor, bright natural light, "
f"real estate listing photo",
size="1536x1024"
)
save_to_mls(row["listing_id"], result.data[0].url)import requests
API_KEY = "your_api_key"
# Turn a listing photo into a walkthrough-style video clip
submit = requests.post(
"https://api.creativeai.run/v1/video/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "kling-v3",
"prompt": "Slow cinematic camera push into a staged living room, "
"natural light from windows, smooth steady movement",
"image_url": "https://cdn.example.com/listings/123-living-room.jpg",
"duration": "5s",
"aspect_ratio": "16:9",
"webhook_url": "https://your-app.com/webhooks/creativeai",
},
timeout=60,
)
submit.raise_for_status()
job = submit.json()
print(job["id"], job["status"]) # async — returns immediately
# Webhook delivers the rendered video URL when complete.
# Or poll if you can't receive inbound webhooks:
result = requests.get(
f"https://api.creativeai.run/v1/video/generations/{job['id']}",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=30,
).json()
print(result["status"], result.get("video_url"))import httpx, asyncio, json
API_KEY = "your_api_key"
WEBHOOK = "https://your-app.com/webhooks/creativeai"
# All photos for a single listing — submit as parallel video jobs
listing_photos = [
{"room": "living-room", "url": "https://cdn.example.com/listings/42/living.jpg",
"prompt": "Slow cinematic push into a bright living room, natural window light"},
{"room": "kitchen", "url": "https://cdn.example.com/listings/42/kitchen.jpg",
"prompt": "Gentle pan across modern kitchen island, warm afternoon light"},
{"room": "master-bed", "url": "https://cdn.example.com/listings/42/master.jpg",
"prompt": "Slow dolly forward into spacious bedroom, soft ambient lighting"},
{"room": "backyard", "url": "https://cdn.example.com/listings/42/yard.jpg",
"prompt": "Wide establishing shot, subtle zoom into landscaped backyard, golden hour"},
]
async def submit_video(client: httpx.AsyncClient, photo: dict) -> dict:
resp = await client.post(
"https://api.creativeai.run/v1/video/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "kling-v3",
"image_url": photo["url"],
"prompt": photo["prompt"],
"duration": "5s",
"aspect_ratio": "16:9",
"webhook_url": WEBHOOK,
},
timeout=60,
)
resp.raise_for_status()
return {"room": photo["room"], **resp.json()}
async def process_listing(photos: list[dict]) -> list[dict]:
async with httpx.AsyncClient() as client:
jobs = await asyncio.gather(*[submit_video(client, p) for p in photos])
return jobs
# Submit all 4 rooms in parallel — each returns immediately
jobs = asyncio.run(process_listing(listing_photos))
for j in jobs:
print(f"{j['room']}: job {j['id']} — {j['status']}")
# Cost: 4 rooms × ~$0.36/video = ~$1.44 per listing
# All 4 webhooks fire independently as each room finishes (~60-90s)
# Your backend matches job IDs to rooms and assembles the listing packageimport hmac, hashlib, json
from fastapi import FastAPI, Request, HTTPException
app = FastAPI()
# Store pending jobs when you submit them:
# pending_jobs[job_id] = {"listing_id": "42", "room": "kitchen"}
@app.post("/webhooks/creativeai")
async def handle_video_callback(request: Request):
body = await request.body()
# 1. Verify HMAC-SHA256 signature (secret = your API key)
sig = request.headers.get("x-creativeai-signature", "")
expected = "sha256=" + hmac.new(
API_KEY.encode(), body, hashlib.sha256
).hexdigest()
if not hmac.compare_digest(sig, expected):
raise HTTPException(401, "Invalid signature")
event = json.loads(body)
job_id = event["id"]
status = event["status"] # "completed" or "failed"
video_url = event.get("video_url") # CDN URL when completed
# 2. Match callback to listing + room
job = pending_jobs.get(job_id)
if not job:
return {"ok": True} # idempotent — already processed
# 3. Update your listing record
if status == "completed":
await save_video_to_listing(
listing_id=job["listing_id"],
room=job["room"],
video_url=video_url,
)
await mark_room_ready(job["listing_id"], job["room"])
# 4. Check if all rooms are done -> notify agent / publish MLS
if await all_rooms_ready(job["listing_id"]):
await publish_listing_video_package(job["listing_id"])
del pending_jobs[job_id]
return {"ok": True}
# Webhook payload you receive:
# {
# "id": "vg_abc123",
# "status": "completed",
# "video_url": "https://cdn.creativeai.run/videos/vg_abc123.mp4",
# "model": "kling-v3",
# "duration": "5s",
# "created_at": "2026-03-12T10:00:00Z",
# "completed_at": "2026-03-12T10:01:12Z"
# }import httpx, asyncio, time
API_KEY = "your_api_key"
BASE = "https://api.creativeai.run/v1/video/generations"
# After submitting all rooms (see batch example above), poll for status:
async def track_listing_render(jobs: list[dict], poll_interval: int = 5):
"""
Poll all room jobs and yield status updates until every room is done.
Perfect for feeding a real-time dashboard or SSE stream to your frontend.
"""
pending = {j["id"]: j["room"] for j in jobs}
results = {}
async with httpx.AsyncClient() as client:
while pending:
for job_id, room in list(pending.items()):
resp = await client.get(
f"{BASE}/{job_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=15,
)
data = resp.json()
status = data["status"]
# Yield per-room status update (push to your UI via SSE / WS)
yield {
"room": room,
"job_id": job_id,
"status": status, # pending | processing | completed | failed
"video_url": data.get("video_url"),
"elapsed": time.time(),
}
if status in ("completed", "failed"):
results[room] = data
del pending[job_id]
if pending:
await asyncio.sleep(poll_interval)
# All rooms done — assemble the listing package
yield {
"event": "listing_complete",
"rooms_completed": len([r for r in results.values() if r["status"] == "completed"]),
"rooms_failed": len([r for r in results.values() if r["status"] == "failed"]),
"results": results,
}
# Usage in your API handler (FastAPI + SSE example):
#
# @app.get("/listings/{id}/render-status")
# async def stream_render_status(id: str):
# jobs = await get_pending_jobs(id)
# async def generate():
# async for update in track_listing_render(jobs):
# yield f"data: {json.dumps(update)}\n\n"
# return StreamingResponse(generate(), media_type="text/event-stream")
#
# Your frontend renders:
# Kitchen ........... ✅ Completed (62s)
# Living Room ....... ⏳ Processing
# Master Bedroom .... ⏳ Processing
# Backyard .......... 🕐 PendingShow your users real-time per-room render progress (Kitchen ✅ Completed · Living Room ⏳ Processing). Poll the status endpoint or use webhooks — either way, each room reports its own status independently. Perfect for building listing-level progress bars in your PropTech dashboard.
Build Property Tools On Top of Our API
If you're a PropTech platform, virtual staging app, or real estate SaaS — use CreativeAI as your backend image engine. Your brand, your UI, our models.
Backend API, Not Just a Studio
CreativeAI is an API-first service. Your users never see our brand — they see yours. Embed staging, enhancement, and sky replacement behind your own interface.
Per-Key Spend Controls
Issue separate API keys per client or team with individual spend caps, rate limits, and expiration dates. Monitor usage per key — ideal for reseller and agency models.
Volume-Friendly Pricing
Pay-per-image from $0.21. No per-seat fees, no monthly minimums. Your margin stays healthy whether you process 100 or 100,000 images/month.
Consistent Multi-Room Output
Same prompt template across every listing produces a uniform brand look. Use the same style parameters for staging, enhancement, and marketing across an entire portfolio.
Batch Processing via API
Script 50 listings in a single loop with bounded concurrency. Output JSONL manifests for downstream MLS/CRM ingestion. No manual upload portals.
Disclosure-Safe Workflows
We generate the images — your platform handles compliance labeling per local MLS rules. No hidden watermarks or metadata that conflict with your disclosure workflow.
Frequently Asked Questions
Your Listing Video Provider Is Shutting Down
If your property video pipeline used Sora, it’s already broken. DALL-E staging pipelines break in 58 days. CreativeAI is a drop-in replacement — same OpenAI SDK, one API key for both image and video.
Sora 1 Shutdown
- ✕Sora 1 was permanently shut down — listing video pipelines are broken
- ✕Sora 2 requires $200/mo ChatGPT Pro — no API access
- 5+ video models: Kling v3, Seedance 1.5, Veo 3.1 & more
- Async listing video with webhook delivery per room
Use code SORASWITCH for 50 free video credits. No subscription.
DALL-E 2 & 3 Shutdown
- ✕DALL-E 3 shuts down in 58 days — staging image pipelines will break
- ✕DALL-E 2 already deprecated and unavailable
- CreativeAI routes to gpt-image-1, Seedream 3 & 4+ more models
- Same OpenAI SDK — change
base_urlandapi_key
Use code DALLE1000 for 3,000 free credits (~1,000 staging images).
Property pipeline migration — 2 lines
# Before (DALL-E / Sora direct)
client = OpenAI(api_key="sk-...")
# After (CreativeAI — same SDK, image + video)
client = OpenAI(
api_key="YOUR_CREATIVEAI_KEY",
base_url="https://api.creativeai.run/v1"
)
# Your existing staging + listing video code works unchangedThree Proof Bundles for Three Buyer Types
Whether you're building a virtual staging app, a listing-video platform, or a PropTech integration — here are the exact pages that answer your top questions.
Virtual Staging Platforms
Realie, roOomy-style apps — photo-realistic staging, consistent multi-room output, white-label API.
Listing Video Platforms
Property Video AI, AutoReel, Real Estate Video AI, Amplifiles-style apps — listing photo → video in 60–90s (not 24 hours), webhook delivery per room, ~$0.36/clip.
PropTech & MLS Integrators
CRM tools, MLS platforms, portfolio managers — batch API, OpenAI SDK compatibility, white-label backend.
Your Next Listing Photo Costs $0.21
50 free credits on signup — enough to stage rooms, enhance photos, and test marketing visuals. No credit card required.
Web Studio for no-code use • OpenAI SDK compatible for PropTech integrations