---
title: "Submit a video background removal (fast) job"
method: POST
path: "/v1/video-background-removal-fast"
tags: ["Video Background Removal"]
---

# Submit a video background removal (fast) job

`POST /v1/video-background-removal-fast`

Start an asynchronous job that removes the background from a source video, keeping only the foreground subject. Faster generation; accepts source videos up to full HD (1080p).

**Inputs**

- `video_url` — public URL of the source video
- `output_codec` — optional; `vp9` (the default) renders one WebM with an alpha channel, `h264` renders two files (the RGB video and an alpha matte) and is recommended for better RGB quality
- `refine_foreground_edges` — optional; improves the quality of the extracted subject's edges (defaults to true)
- `subject_is_person` — optional; set to false when the subject is not a person (defaults to true)

**What happens next**

The job is **accepted immediately** — you get `202 Accepted` with a `job_id` and status `PROCESSING`. Rendering runs in the background; poll `GET /v1/video-background-removal-fast/{job_id}` until the job is `COMPLETED` or `FAILED`.

## Headers

- `X-Veed-Store-IO` '0' | '1'
- `X-Veed-Media-Expiration-Seconds` integer

## Request body

- VideoBackgroundRemovalInput
  - `$schema` string, uri — A URL to the JSON Schema for this object.
  - `output_codec` 'vp9' | 'h264' — Output encoding. vp9 (the default) yields a single webm video with an alpha channel; h264 yields two files (the RGB video and an alpha matte) and is recommended for better RGB quality.
  - `refine_foreground_edges` boolean — Improves the quality of the extracted subject's edges.
  - `subject_is_person` boolean — Set to false when the subject is not a person.
  - `video_url` string, uri, required — URL of the source video to remove the background from.

## Response `202`

Accepted

- ResourceVideoBackgroundRemovalJob
  - `$schema` string, uri — A URL to the JSON Schema for this object.
  - `data` VideoBackgroundRemovalJob, required
    - `error` JobErrorVideoBackgroundRemovalErrorCode
      - `code` 'input_validation' | 'content_moderation' | 'invalid_file' | 'audio_too_long' | 'transload_failed' | 'generation_failed' | 'timeout', required — Stable, machine-readable failure code for this job type.
      - `details` JobErrorDetail[], nullable — Optional structured failure details.
        - `field` string — Dotted path to the offending input, when applicable.
        - `message` string, required — Human-readable explanation of this detail.
        - `type` string, required — The category of this detail entry.
      - `message` string, required — Human-readable failure message.
    - `job_id` string, uuid, required — Stable identifier of the job and of the resource it produces.
    - `result` VideoBackgroundRemovalFiles
      - `files` File[], nullable, required — Rendered background-removed file(s): one webm with alpha for vp9; the RGB video and the alpha matte (two files) for h264.
        - `content_type` string — The mime type of the file.
        - `file_name` string — The name of the file.
        - `file_size` integer — The size of the file in bytes.
        - `url` string, required — The URL where the file can be downloaded from.
    - `status` 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'CANCELLED', required — Current lifecycle state of the job.

## Other responses

- `401` — Unauthorized
- `422` — Unprocessable Entity
- `429` — Rate limit exceeded
- `500` — Internal Server Error

---

[API](https://skmtc.dev/veed/apis/veed-api.md) · [All operations](https://skmtc.dev/veed/apis/veed-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/veed/veed-api/revisions/c541599acc5a/schema)
