---
title: "List video destinations."
method: GET
path: "/video-destinations"
tags: ["Sources"]
---

# List video destinations.

`GET /video-destinations`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/video-destinations`
- Auth: HTTP bearer

A destination is where a finished video goes and what it asks of the video: its shape and length, its sound, how it is delivered, what it must show and the checks it must pass. Each one is a row; one whose spec fails its check is listed under `unavailable` with the reason and is never guessed. `specMayBeStale` is true when the spec was last checked against its `sourceUrls` more than 90 days ago (or never): read them again before relying on it. Free; reads only. The same catalog for every account, in order: an app directory's review walkthrough (`chatgpt_app_review`), a launch trailer, a product demo, a vertical social cut and a website hero loop to start. Each `spec` holds what the video must show (`content`), its `picture` and `sound`, the end system it is recorded in (`host`), its `delivery`, its `exports`, the `checks` it must pass and its `intent`.

## Response `200`

The destinations, and the rows that cannot be used.

- VideoDestinationList
  - `destinations` VideoDestination[], required
    - `key` string, required: Stable key, e.g. `chatgpt_app_review`.
    - `name` string, required
    - `family` 'plugin_review' | 'marketing' | 'social' | 'site', required
    - `description` string, required
    - `spec` object, required: What the destination asks of the video, checked on every read (a row that fails is never listed here): `content` (test cases, platforms, moments it must show, how waits are cut, which moments it draws on), `picture` (aspect, delivery, length, depth preset), `sound` (narration, music, loudness target, captions), `host` (the end system a review walkthrough is recorded in: origins, the lanes it may be recorded through, masks, controls named by role), `delivery` (link), `exports` (mp4, packet, stills) and `checks` (each a named kind with its params and `block` or `warn`), and `intent` (purpose and audience).
    - `guidanceSnippet` string, nullable, required: The Snippet whose guidance applies to this destination's videos.
    - `sourceUrls` string[], required: Where the destination's own requirements were read.
    - `verifiedAt` string, date-time, nullable, required: When the spec was last checked against `sourceUrls`.
    - `specMayBeStale` boolean, required: True when `verifiedAt` is more than 90 days old, or the row names `sourceUrls` and was never checked.
    - `specVersion` integer, required
    - `sortOrder` integer, required
  - `unavailable` object[], required: Switched-on rows whose spec fails its check: never guessed, listed with the reason.
    - `key` string, required
    - `name` string, required
    - `reason` string, required
  - `staleAfterDays` integer, required: A spec checked longer ago than this reads `specMayBeStale`.

## Other responses

- `401`: Missing, malformed, revoked, or expired API key.
- `403`: API key is valid but lacks the scope, is blocked by IP allowlist, or the account is disabled.
- `429`: Rate limit for this API key + IP + route family was exceeded.
- `500`: The API failed unexpectedly. Safe to retry with the same Idempotency-Key.

---

[API](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api.md) · [All operations](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/revisions/64c1102ccb2f?raw)
