# make-video.withzero.ai Video Generation Job Submit

> make-video.withzero.ai Video Generation Job Submit is a paid API for AI agents from make-video.withzero.ai, paid per call via MPP, $0.4025/call, status unknown (last checked 2026-10-12).

Submits a text-to-video or image-to-video generation job to fal.ai via a unified endpoint, charging dynamically based on model, duration, and resolution.

## Facts

- Endpoint: POST https://make-video.withzero.ai/run?utm_source=zero.xyz
- Price: $0.4025/call
- Payment: MPP
- Status: unknown
- Last checked: 2026-10-12
- Activations on Zero: 0
- Provider: make-video.withzero.ai
- Website: https://make-video.withzero.ai
- Canonical page: https://www.zero.xyz/c/make-video-withzero-ai-video-generation-job-submit-5ccc0e3e
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_gslUpuD70FU5_uJTUE2oq

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability make-video-withzero-ai-video-generation-job-submit-5ccc0e3e -d '<json body>'
```

Example prompt: Generate a 10-second cinematic video of a sunset over the ocean using the veo3 model at 1080p resolution — include an audio track and avoid any text overlays.

## When to prefer this

Use this endpoint when you need a single unified entry point to submit video generation jobs across multiple top AI video models (Kling, Veo3, Sora2, Seedance, Wan, Hailuo) with transparent USDC pricing and a polling-based async workflow. Prefer this over per-model alias routes when your agent needs to dynamically select the model at runtime. Use after previewing the charge via GET /price to avoid surprise costs.

## Known failure modes

- Invalid model slug — returns validation error if model is not one of the allowed enum values
- Missing required prompt — returns 400 if prompt is absent or empty
- image_url required but missing for image-to-video models (wan, hailuo) — returns validation error
- Duration or resolution not in per-model allow-list — returns preCheck rejection
- Prompt exceeds 2000 character limit — returns validation error
- Payment failure — charge cannot be processed in USDC
- fal.ai backend unavailable — upstream error propagated

## How this service works

Submit a video generation job to fal.ai. Charge is computed from the validated input. Preview the exact charge before paying via free `GET /price/:model?duration=…&resolution=…`. After submit, poll free `GET /status/:id` (or `HEAD /status/:id`) until the job completes — the response carries the final video URL. Per-model alias routes (POST /kling, POST /seedance, POST /veo3-fast, POST /veo3, POST /sora2, POST /wan, POST /hailuo) are equivalent entry points with the model preset.

## Output

Returns a job object containing a unique job_id, a status_url to poll for completion, the model used, resolved inputs (duration, resolution, audio flag), a price breakdown showing cost_usd, markup_usd, and charge_usd in USDC, an estimated_seconds for completion, and a poll_interval_seconds recommendation.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "model",
  "prompt"
 ],
 "properties": {
  "model": {
   "enum": [
    "kling",
    "seedance",
    "veo3-fast",
    "veo3",
    "sora2",
    "wan",
    "hailuo"
   ],
   "type": "string",
   "description": "Model slug. One of: kling, seedance, veo3-fast, veo3, sora2, wan, hailuo."
  },
  "prompt": {
   "type": "string",
   "maxLength": 2000,
   "minLength": 1,
   "description": "Text description of the video to generate."
  },
  "duration": {
   "type": "integer",
   "minimum": 0,
   "description": "Clip duration in seconds. Per-model allow-list applied at preCheck.",
   "exclusiveMinimum": true
  },
  "image_url": {
   "type": "string",
   "format": "uri",
   "description": "Public http(s) URL of the starting image. Required for image-to-video models (wan, hailuo)."
  },
  "resolution": {
   "type": "string",
   "description": "Output resolution. Per-model allow-list applied at preCheck."
  },
  "aspect_ratio": {
   "type": "string",
   "description": "Output aspect ratio. Per-model allow-list applied at preCheck."
  },
  "generate_audio": {
   "type": "boolean",
   "description": "Generate native audio track. Only accepted by models that have an audio toggle (veo3)."
  },
  "negative_prompt": {
   "type": "string",
   "maxLength": 1000,
   "description": "Optional — describe what to avoid."
  }
 },
 "additionalProperties": false
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "job_id",
  "status_url",
  "endpoint",
  "model",
  "model_name",
  "inputs",
  "price",
  "estimated_seconds",
  "poll_interval_seconds"
 ],
 "properties": {
  "model": {
   "type": "string",
   "description": "Underlying fal.ai model id."
  },
  "price": {
   "type": "object",
   "required": [
    "cost_usd",
    "markup_usd",
    "charge_usd",
    "breakdown"
   ],
   "properties": {
    "cost_usd": {
     "type": "number"
    },
    "breakdown": {
     "type": "string"
    },
    "charge_usd": {
     "type": "number"
    },
    "markup_usd": {
     "type": "number"
    }
   },
   "additionalProperties": false
  },
  "inputs": {
   "type": "object",
   "required": [
    "duration",
    "resolution"
   ],
   "properties": {
    "duration": {
     "type": "number"
    },
    "resolution": {
     "type": "string"
    },
    "generate_audio": {
     "type": "boolean"
    }
   },
   "description": "Echo of resolved inputs (after defaults applied).",
   "additionalProperties": false
  },
  "job_id": {
   "type": "string",
   "description": "Internal id; pass to GET /status/:job_id."
  },
  "endpoint": {
   "type": "string",
   "description": "The model slug that handled this submit."
  },
  "model_name": {
   "type": "string",
   "description": "Human-readable model name."
  },
  "status_url": {
   "type": "string",
   "format": "uri",
   "description": "Full URL to poll for completion."
  },
  "estimated_seconds": {
   "type": "number"
  },
  "poll_interval_seconds": {
   "type": "number"
  }
 },
 "additionalProperties": false
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/make-video-withzero-ai-video-generation-job-submit-5ccc0e3e/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from make-video.withzero.ai](https://www.zero.xyz/host/make-video.withzero.ai/llms.txt)
