Simpled.ai Video Generation API

Generate hand-drawn whiteboard explainer videos from a text prompt or an uploaded document. This is the generation API for Simpled.ai.

Interactive API reference (Swagger) Developer hub

Two APIs, and which one you want

Public product APIThis API
Base URL simpled.ai/api/v1 api.simpled.ai/v1.7
Returns Capabilities, pricing, solutions, guides Rendered videos
Authentication None X-API-Key header
OpenAPI simpled.ai/api/v1/openapi.json api.simpled.ai/openapi.json

If you only need to know what the product supports or what it costs, use the public API — it needs no credentials and is free to call.

How generation works

Rendering a video runs several models and a video render, so the API is asynchronous.

  1. Create a project with POST /v1.7/projects. Returns a project_id immediately.
  2. Poll GET /projects/{project_id} until status is completed or failed.
  3. Fetch the MP4 from GET /projects/{project_id}/video.

Each minute of finished video costs one credit.

Authentication

Send your key in the X-API-Key header. Keys are stored only as a SHA-256 hash and are shown once, at creation. Request one at manav@simpled.ai.

Rate limits and versioning

Limits on this API are per-key and agreed when a key is issued; no anonymous quota is published and no rate-limit headers are emitted here. The public product API at simpled.ai/api/v1 does publish machine-readable rate-limit headers if that is what you need.

Please do not run automated scans against this host — every generation request spends real compute and creates a job a human is billed for.

Versions are path segments and /v1.7 is current. Every response carries a Link header with rel="deprecation" pointing at the written policy, so the retirement rules are discoverable before anything is retired.

Integration example (Python)

import os
import time
import requests

API_URL = "https://api.simpled.ai"
HEADERS = {"X-API-Key": os.environ["SIMPLED_API_KEY"]}

# 1. Start a new video project
response = requests.post(
    f"{API_URL}/v1.7/projects",
    headers=HEADERS,
    json={
        "topic": "Explain the mechanics of a black hole",
        "duration_seconds": 60,
        "video_format": "horizontal",
    },
)
response.raise_for_status()
project_id = response.json()["project_id"]
print(f"Project started: {project_id}")

# 2. Poll until finished
while True:
    status = requests.get(f"{API_URL}/projects/{project_id}", headers=HEADERS).json()
    print(f"{status['status']} ({status['progress_pct']}%) - {status['current_step']}")

    if status["status"] == "completed":
        video = requests.get(f"{API_URL}/projects/{project_id}/video", headers=HEADERS)
        open("out.mp4", "wb").write(video.content)
        print("Saved out.mp4")
        break
    if status["status"] == "failed":
        raise SystemExit(f"Failed: {status['error']}")

    time.sleep(15)

Command line

npx simpled-cli render "Explain how compound interest works" --duration 60 --output out.mp4