---
title: "List Videos"
method: GET
path: "/projects/{project_id}/videos"
tags: ["Projects"]
---

# List Videos

`GET /projects/{project_id}/videos`

Returns videos captured at the specified project.

**Important:** Until a video's `status` is `processed`, the
`playback_url` field returns the raw upload URL (the
`pending_uri`) and `format` returns the file extension of
that URL — not the HLS playback URL or `m3u8`. Subscribe
to the `video.updated` webhook or poll
`GET /videos/{id}` until `status: processed` before
consuming `playback_url`/`format`.

## Path parameters

- `project_id` string, id, required

## Query parameters

- `page` integer
- `per_page` integer
- `start_date` string
- `end_date` string
- `user_ids` integer[]
- `group_ids` integer[]
- `tag_ids` integer[]

## Response `200`

List of videos sorted by capture date, most recent first

- Video[]
  - `id` string, required — The unique ID for the video
  - `company_id` string — A unique identifier for the Company the Video belongs to
  - `creator_id` string — The id of the entity that created the Video
  - `creator_type` string — The type of the entity that created the Video
  - `creator_name` string — The display name of the entity that created the Video
  - `project_id` string — The unique ID of the project the Video was captured at
  - `coordinates` Coordinate
    - `lat` number, float, required
    - `lon` number, float, required
  - `status` 'pending' | 'processing' | 'processed' | 'processing_error' — The video's processing status. Until `status` is `processed`, `playback_url` and `format` reflect the raw upload — not the HLS playback URL.
  - `internal` boolean — Indicates whether the video is for internal use only and should not be used in marketing or other public materials
  - `captured_at` integer — Unix timestamp when the Video was captured
  - `created_at` integer — Unix timestamp when the video record was created on the server. May differ from `captured_at`.
  - `updated_at` integer — Unix timestamp when the video was last updated
  - `playback_url` string, nullable — Once `status` is `processed`, this is the HLS manifest URL (`.m3u8`) used to play the video. Before processing completes, this is the raw upload URL (the `pending_uri`).
  - `format` string, nullable — The video format. `"m3u8"` once the video has been processed; otherwise the file extension of the pending upload (e.g. `"mov"`, `"mp4"`).
  - `thumbnail_urls` object — Static thumbnail images at three sizes. May be null until the thumbnail has been fetched.
    - `large` string, nullable
    - `medium` string, nullable
    - `small` string, nullable
  - `duration` integer — Length of the video in seconds

## Other responses

- `400` — Bad Request
- `404` — Not found
- `500` — Unexpected error

---

[API](https://skmtc.net/companycam/apis/core-api.md) · [All operations](https://skmtc.net/companycam/apis/core-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/companycam/core-api/versions/f2cd76b46603/schema)
