---
title: "List scene templates, optionally filtered by category."
method: GET
path: "/api/v1/campaign-studio/scene-templates"
tags: ["Campaign Studio"]
---

# List scene templates, optionally filtered by category.

`GET /api/v1/campaign-studio/scene-templates`

## 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/campaign-studio/scene-templates`
- Auth: one of:
  - API key in cookie `session`
  - HTTP bearer

<br/>Scene templates are global presets (nullable ``owner_id`` per<br/>CLAUDE.md §3 — "everyone reads; only admins write"), so this GET<br/>is intentionally public-read. The auth gate in ``create_app()``<br/>still gates the path in production where Cognito is configured;<br/>in test / CodeBuild safety-check environments without Cognito the<br/>gate skips and this list is reachable anonymously, which is what<br/>``tests/test_safety.py::test_api_returns_200`` asserts.<br/><br/>The ``@login_required`` originally landed here in 952c915<br/>("full route hardening") but contradicts both the global-preset<br/>design and the safety smoke test, so it was removed.

## Response `200`

OK

- SceneTemplatesResponse
  - `items` unknown[], required
    - unknown

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