Skip to main content
Submit a video generation job for a given domain. Demomatic uses your prompt to autonomously record the application, generate narration, and assemble the final video. Most requests are queued and processed asynchronously. Poll GET /v1/videos to check for the completed video. In some environments, the video may be returned synchronously in the same response.

Endpoint

POST /v1/videos/:domain_id

Authentication

Pass an all_access API key as a Bearer token in the Authorization header.
Authorization
string
required
Your API key. Format: Bearer <api_key>. Must have all_access permission — read-only keys cannot call this endpoint.
Read-only API keys cannot call this endpoint. You must use a key with all_access permission.

Path parameters

domain_id
number
required
The ID of the domain to generate a video for. The domain must belong to your account.

Request body

prompt
string
Natural language description of the demo to generate. Describe the user flow, feature, or scenario you want to showcase.
font
string
required
Font to use for captions and text overlays. Valid values: "Inter", "OpenSans", "Playwrite", "Poppins", "Roboto".
captions
boolean
required
When true, captions are added to the video.
bRoll
boolean
required
When true, B-roll footage is included in the video.
music
string
Background music track. Valid values: "observer", "lawrence", "all_i_am", "lust", "denied_access", "75_and_lower". Omit to use no music.
voiceId
string | null
Voice model for narration. Valid values: "ash", "onyx", "nova", "fable". Pass null to omit narration.
backgroundId
string | null
Background style ID. Pass null to use no custom background.
contacts
object[]
List of recipient contacts used to personalize the video narration and on-screen text.
notify_contacts
boolean
When true, contacts with a valid email are emailed a link to the video after generation completes. Defaults to false.

Response

Generation requests are almost always queued. The response shape depends on whether the job was queued or completed synchronously.

Queued response

data
object
required

Synchronous response

data
object
required

Error responses

StatusDescription
400The domain_id is not a valid number, or the request body failed validation.
404No domain found with the given ID, or the domain belongs to a different account.

Examples

curl --request POST \
  --url https://api.demomatic.tech/v1/videos/45 \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "prompt": "Show how a user signs up and completes onboarding",
    "font": "Poppins",
    "captions": true,
    "bRoll": false,
    "music": "observer",
    "voiceId": null,
    "backgroundId": null
  }'

Queued response

200
{
  "data": {
    "job_id": 789,
    "status": "queued",
    "message": "Video job queued. Poll GET /v1/videos or GET /jobs/:domain_id for completion."
  }
}

Synchronous response

200
{
  "data": {
    "video": {
      "id": 123,
      "domain_id": 45,
      "url": "https://signed-url.example.com/video.mp4",
      "created_at": "2024-01-15T10:00:00.000Z",
      "updated_at": "2024-01-15T10:05:00.000Z",
      "filename": "Product Tour"
    }
  }
}

Personalized generation with contacts

curl --request POST \
  --url https://api.demomatic.tech/v1/videos/45 \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "prompt": "Showcase the analytics dashboard",
    "font": "Poppins",
    "captions": true,
    "bRoll": false,
    "contacts": [
      {
        "name": "Alice Smith",
        "email": "alice@example.com",
        "jobTitle": "Head of Marketing",
        "company": "Acme Corp",
        "industry": "SaaS"
      }
    ],
    "notify_contacts": true
  }'