---
title: "The caption presets the picker offers, and where each one lands."
method: GET
path: "/api/v1/videos/caption-styles"
tags: ["Videos"]
---

# The caption presets the picker offers, and where each one lands.

`GET /api/v1/videos/caption-styles`

## 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/caption-styles`
- Auth: one of:
  - API key in cookie `session`
  - HTTP bearer

<br/>Declared BEFORE the `/<int:video_id>` routes so "caption-styles" is<br/>never read as a video id. Not user-scoped: the catalog is the same for<br/>everyone, so there is no row here to own and nothing to scope, but it<br/>is still a signed-in surface: anonymous calls get a 401<br/>(test_auth_gate_parametric, test_captions_template_gate).

## Response `200`

OK

- CaptionStyleCatalogResponse: `GET /api/v1/videos/caption-styles` — the presets, from the one place that defines them. The SPA used to keep its own hand-maintained copy of the names and descriptions, whose comment admitted a new preset meant editing both. This is that list, served.
  - `styles` CaptionStyleItem[], required
    - `bottom` number, required
    - `desc` string, required
    - `font_scale` number, required
    - `mono` boolean, required
    - `name` string, required
    - `positions` object, required
    - `side` number, required
    - `slug` string, required

## 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)
