---
title: "Import Video"
method: POST
path: "/workspaces/{workspace_id}/videos"
tags: ["Video"]
---

# Import Video

`POST /workspaces/{workspace_id}/videos`

## Request

- Base URL: `https://myworkspace.myclickfunnels.com/api/v2`
- URL: `https://myworkspace.myclickfunnels.com/api/v2/workspaces/{workspace_id}/videos`
- Auth: one of:
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://accounts.myclickfunnels.com/oauth/authorize`
    - Token URL: `https://accounts.myclickfunnels.com/oauth/token`
- TypeScript: <https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/docs/workspaces/:workspace_id/videos/post.ts> (a function with typed inputs; its response is checked against the schema)

Returns queued immediately. Download, MIME verification, metadata extraction and thumbnail generation run in the background. No URL deduplication. Poll GET /videos/{id} until ready or failed.

## Path parameters

- `workspace_id` string, required

## Request body

- object
  - `video` VideoParameters, required
    - `name` string, nullable: Optional on create; defaults to the downloaded filename without its extension.
    - `upload_source_url` string, required: Download URL. Import runs in the background, follows checked redirects and accepts MP4, AVI, or MPEG up to 3 GB. MOV is not supported.
    - `poster_image_id` union: Numeric or public ID of a workspace image; null detaches.
      - integer
      - string

## Response `201`

Queued

- VideoAttributes
  - `id` integer: Video ID
  - `public_id` string: Public ID
  - `workspace_id` integer: Workspace ID
  - `name` string: Video name
  - `status` 'queued' | 'processing' | 'ready' | 'failed': Computed import state. Poll until ready before attaching to a lesson.
  - `error_code` 'download_failed' | 'file_too_large' | 'invalid_file_type' | 'processing_failed' | 'null', nullable: Null unless failed. Network and URL download failures share download_failed. An import that stops progressing for 3 hours fails with processing_failed.
  - `metadata` object, nullable: Details of the processed file; null until the video has one.
    - `filename` string, nullable: Stored filename.
    - `mime_type` string, nullable: Server-detected MIME type.
    - `duration` number, nullable: Duration in seconds.
    - `width` integer, nullable: Width in pixels.
    - `height` integer, nullable: Height in pixels.
  - `poster_image_id` integer, nullable: Poster image ID in this workspace.
  - `url` string, nullable: Signed MP4 URL, expires one hour after this response; null until the video has a processed file. Fetch again to renew. No HLS URL is exposed.
  - `thumbnail_url` string, nullable: Signed generated frame URL, expires one day after this response; null until the video has a processed file.
  - `created_at` string, date-time: Added
  - `updated_at` string, date-time: Updated

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: At most five queued or processing imports per workspace, including re-imports.

## Changes

- **2026-11-03** `511d88b30aea`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/changes/workspaces/:workspace_id/videos/post.md)

---

[API](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api.md) - [All operations](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/llms.txt) - [OpenAPI document](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/revisions/511d88b30aea?raw)
