---
title: "Video gallery used by /videos."
method: GET
path: "/api/v1/videos/gallery"
tags: ["Videos"]
---

# Video gallery used by /videos.

`GET /api/v1/videos/gallery`

## Request

- Base URL: `https://api.avatarfactory.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.avatarfactory.io/api/v1/videos/gallery`
- Auth: one of:
  - API key in cookie `session`
  - HTTP bearer

<br/>Scoped to the caller's own videos, admins included (default-own<br/>scoping, spec §3.5, 2026-08-11). Owner, avatar, and search filtering,<br/>the seven chip counts, and the page slice all happen in SQL<br/>(repository.list_gallery), so a request costs O(page), not O(the<br/>caller's videos). The counts and `total` still describe the full<br/>filtered set; `has_more` tells the client whether to fetch the next<br/>page, and a page past the end echoes the requested page number.<br/><br/>Backwards compat: when the legacy `limit` is set (1 to 100, same<br/>bounds as `page_size`), it means page 1 of size `limit`.

## Query parameters

- `avatar_id` integer, nullable
- `q` string, nullable
- `limit` integer, nullable
- `page` integer
- `page_size` integer

## Response `200`

OK

- VideoGalleryResponse
  - `counts` VideoGalleryCounts: Per-status counts across the FULL (unpaginated) filtered set.
    - `all` integer
    - `drafts` integer
    - `failed` integer
    - `published` integer
    - `published_today` integer
    - `rendering` integer
    - `this_month` integer
  - `has_more` boolean
  - `items` GalleryVideoCard[], required
    - `approval_status` string, nullable
    - `avatar` GalleryAvatar
      - `face_focus` FaceFocusPoint: Where a square or circular crop of a face image has to look. Percentages of the FULL stored frame, so the SPA can hand them straight to a CSS ``object-position``. Written by ``app.modules.avatars.face_focus``; absent (``None``) when no face was detected, and the shared `AvatarFace` component then falls back to its upper-third default.
        - `x` number, required
        - `y` number, required
      - `face_image` string, nullable
      - `id` integer, required
      - `name` string, nullable
    - `avatar_id` integer, nullable
    - `background` GalleryBackground
      - `id` integer, required
      - `image_file` string, nullable
      - `name` string, nullable
    - `background_id` integer, nullable
    - `completed_at` string, date-time, nullable
    - `created_at` string, date-time, nullable
    - `duration_seconds` number, nullable
    - `error_message` string, nullable
    - `final_video_file` string, nullable
    - `has_post` boolean
    - `id` integer, required
    - `ig_account_name` string, nullable
    - `is_ig_avatar` boolean
    - `original_video_file` string, nullable
    - `post_status` string, nullable
    - `progress_label` string, nullable
    - `raw_video_file` string, nullable
    - `status` string, nullable
    - `text_style` string, nullable
    - `title` string, nullable
  - `page` integer
  - `page_size` integer
  - `total` integer

## Other responses

- `422`: Unprocessable Entity

---

[API](https://skmtc.dev/avatarfactory/apis/avatarfactory-api.md) · [All operations](https://skmtc.dev/avatarfactory/apis/avatarfactory-api/llms.txt) · [OpenAPI document](https://skmtc.dev/avatarfactory/apis/avatarfactory-api/revisions/66fc7aa3f296?raw)
