---
title: "Get the setting options | GPT-Video API reference"
description: "Returns the values the settings of a project or a brainstorm accept, with a name and a description for every choice."
url: "https://www.gpt-video.com/developers/api/get-setting-options"
operation: "get_setting_options"
method: "GET"
path: "/v1/reference/setting-options"
scope: "clips:read"
---

Do not assume endpoints have parameters other than the ones explicitly specified.

# Get the setting options

Operation id `get_setting_options`. Request `GET /v1/reference/setting-options`.

Returns the values the settings of a project or a brainstorm accept, with a name and a description for every choice.

Beta. This endpoint is supported and can gain new fields. If a change would break your code, we tell you before it takes effect and list it in the changelog.

## About

Call this before you create or change a project, or start a brainstorm, to know what its settings take. language, objective, captionStyle and reframe take an id from these lists, and clipCount, minDurationSec and maxDurationSec a number within the ranges given here. layout is the layout of a split screen project, theme the look of a fake text project, aspect the shape of a Vibe Editing project and videoType the kind of video of brainstorm_ideas (`POST /v1/brainstorms`). The voices are listed by list_voices (`GET /v1/reference/voices`). The names and descriptions are written to show the choices to a person. New values can be added over time, so read the lists instead of copying them into your code. The answer is the same for every account.

## Example use

A form builder reads the setting options when it loads and fills its menus of languages, caption styles and objectives from them, so a value added later appears without a change in its code.

## Endpoint

```text
GET https://api.gpt-video.com/v1/reference/setting-options
```

- Scope `clips:read`.
- Rate limit 120 requests a minute for each key and 240 for each account, shared by every `read` call. See [rate limits](/developers/rate-limits.md).
- No `Idempotency-Key`.

## Parameters

This operation takes no parameters.

## Request

Read the options before setting up a project.

```bash title="curl"
curl "https://api.gpt-video.com/v1/reference/setting-options" \
  -H "Authorization: Bearer $GPT_VIDEO_API_KEY"
```

```ts title="TypeScript"
const res = await fetch("https://api.gpt-video.com/v1/reference/setting-options", {
  method: "GET",
  headers: {
    "Authorization": `Bearer ${process.env.GPT_VIDEO_API_KEY}`,
  },
});
const data = await res.json();
console.log(data);
```

```python title="Python"
import os

import requests

r = requests.get(
    "https://api.gpt-video.com/v1/reference/setting-options",
    headers={
        "Authorization": f"Bearer {os.environ['GPT_VIDEO_API_KEY']}",
    },
)
data = r.json()
print(data)
```

```json title="MCP (Full)"
{
  "method": "tools/call",
  "params": {
    "name": "get_setting_options",
    "arguments": {}
  }
}
```

## Response

A successful call answers HTTP 200.

### Fields to check

| Name | Type | Description |
| --- | --- | --- |
| `languages[].id` | string | The value to send in the setting. |
| `objectives[].id` | string | The value to send in the setting. |
| `captionStyles[].id` | string | The value to send in the setting. |
| `reframeModes[].id` | string | The value to send in the setting. |
| `layouts[].id` | string | The value to send in the setting. |
| `themes[].id` | string | The value to send in the setting. |
| `aspects[].id` | string | The value to send in the setting. |
| `videoTypes[].id` | string | The value to send in the setting. |

### Response example

```json title="HTTP 200"
{
  "languages": [
    {
      "id": "auto",
      "name": "Detect automatically"
    },
    {
      "id": "it",
      "name": "Italian"
    },
    {
      "id": "en",
      "name": "English"
    }
  ],
  "objectives": [
    {
      "id": "viral",
      "name": "Mixed",
      "description": "Moments with a strong opening and a clear payoff, on any topic."
    },
    {
      "id": "educational",
      "name": "Educational",
      "description": "Lessons, methods and figures that a viewer would keep to watch again."
    },
    {
      "id": "entertaining",
      "name": "Entertaining",
      "description": "Jokes, stories and moments nobody saw coming."
    },
    {
      "id": "emotional",
      "name": "Emotional",
      "description": "Personal stories, moments of doubt and words that move people."
    },
    {
      "id": "controversial",
      "name": "Controversial",
      "description": "Strong opinions and positions that go against what most people think."
    },
    {
      "id": "howto",
      "name": "How-to",
      "description": "Practical steps that show how to do one thing."
    },
    {
      "id": "business",
      "name": "Business",
      "description": "Lessons about running a company, with numbers, decisions and mistakes."
    }
  ],
  "captionStyles": [
    {
      "id": "bold-karaoke",
      "name": "Bold karaoke",
      "description": "Bold uppercase words, and the word being spoken changes color."
    },
    {
      "id": "word-pop",
      "name": "Word pop",
      "description": "One large word at a time, each with a short entrance animation."
    },
    {
      "id": "boxed",
      "name": "Boxed",
      "description": "The sentence sits in a dark box, and the word being spoken is highlighted."
    },
    {
      "id": "outline",
      "name": "Outline",
      "description": "White words with a black outline, readable on any background."
    }
  ],
  "reframeModes": [
    {
      "id": "face",
      "name": "Follow the face",
      "description": "The vertical frame follows the face of the speaker, and stays in the middle when no face is found."
    },
    {
      "id": "center",
      "name": "Center",
      "description": "The vertical frame stays in the middle of the video."
    }
  ],
  "clipCount": {
    "min": 1,
    "max": 100
  },
  "minDurationSec": {
    "min": 5,
    "max": 180
  },
  "maxDurationSec": {
    "min": 10,
    "max": 300
  },
  "layouts": [
    {
      "id": "50-50",
      "name": "Half and half",
      "description": "The main video and the background video each take half of the screen."
    },
    {
      "id": "60-40",
      "name": "Main video larger",
      "description": "The main video takes more of the screen than the background video."
    }
  ],
  "themes": [
    {
      "id": "imessage",
      "name": "iMessage",
      "description": "The chat looks like a conversation in Apple Messages."
    },
    {
      "id": "whatsapp",
      "name": "WhatsApp",
      "description": "The chat looks like a conversation in WhatsApp."
    }
  ],
  "aspects": [
    {
      "id": "source",
      "name": "Same as the video",
      "description": "The edit keeps the shape of its source video."
    },
    {
      "id": "9:16",
      "name": "Vertical 9:16",
      "description": "A tall frame that fills a phone screen held upright."
    },
    {
      "id": "1:1",
      "name": "Square 1:1",
      "description": "A square frame, as wide as it is tall."
    },
    {
      "id": "16:9",
      "name": "Horizontal 16:9",
      "description": "A wide frame, the shape of most videos made for a computer screen."
    }
  ],
  "videoTypes": [
    {
      "id": "story",
      "name": "Story",
      "description": "A story read by a voice over a background video."
    },
    {
      "id": "fake_text",
      "name": "Fake text",
      "description": "A chat conversation shown one message at a time."
    },
    {
      "id": "split_screen",
      "name": "Split screen",
      "description": "A talking video above a background video."
    },
    {
      "id": "any",
      "name": "Any",
      "description": "Ideas for any kind of short video."
    }
  ]
}
```

**All response fields**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `languages` | array of objects | Required | The spoken language of the video, used to transcribe it. auto detects it. |
| `languages[].id` | string | Required | The value to send in the setting. One of `auto`, `it`, `en`. |
| `languages[].name` | string | Required | A short name to show to a person. |
| `objectives` | array of objects | Required | What kind of moments the analysis looks for. |
| `objectives[].id` | string | Required | The value to send in the setting. One of `viral`, `educational`, `entertaining`, `emotional`, `controversial`, `howto`, `business`. |
| `objectives[].name` | string | Required | A short name to show to a person. |
| `objectives[].description` | string | Required | One sentence that says what the choice does. |
| `captionStyles` | array of objects | Required | How the captions look on a clip. |
| `captionStyles[].id` | string | Required | The value to send in the setting. One of `bold-karaoke`, `word-pop`, `boxed`, `outline`. |
| `captionStyles[].name` | string | Required | A short name to show to a person. |
| `captionStyles[].description` | string | Required | One sentence that says what the choice does. |
| `reframeModes` | array of objects | Required | How the vertical frame is placed on a video that is wider than it is tall. |
| `reframeModes[].id` | string | Required | The value to send in the setting. One of `face`, `center`. |
| `reframeModes[].name` | string | Required | A short name to show to a person. |
| `reframeModes[].description` | string | Required | One sentence that says what the choice does. |
| `clipCount` | object | Required | How many clips an analysis can be asked for. |
| `clipCount.min` | integer | Required | The lowest value accepted. |
| `clipCount.max` | integer | Required | The highest value accepted. |
| `minDurationSec` | object | Required | The values minDurationSec accepts, in seconds. |
| `minDurationSec.min` | integer | Required | The lowest value accepted. |
| `minDurationSec.max` | integer | Required | The highest value accepted. |
| `maxDurationSec` | object | Required | The values maxDurationSec accepts, in seconds. An analysis refuses a minimum longer than the maximum. |
| `maxDurationSec.min` | integer | Required | The lowest value accepted. |
| `maxDurationSec.max` | integer | Required | The highest value accepted. |
| `layouts` | array of objects | Required | How a split screen project shares the screen between its two videos (layout). |
| `layouts[].id` | string | Required | The value to send in the setting. One of `50-50`, `60-40`. |
| `layouts[].name` | string | Required | A short name to show to a person. |
| `layouts[].description` | string | Required | One sentence that says what the choice does. |
| `themes` | array of objects | Required | How the chat of a fake text project looks (theme). |
| `themes[].id` | string | Required | The value to send in the setting. One of `imessage`, `whatsapp`. |
| `themes[].name` | string | Required | A short name to show to a person. |
| `themes[].description` | string | Required | One sentence that says what the choice does. |
| `aspects` | array of objects | Required | The shape a Vibe Editing project starts with (aspect). |
| `aspects[].id` | string | Required | The value to send in the setting. One of `source`, `9:16`, `1:1`, `16:9`. |
| `aspects[].name` | string | Required | A short name to show to a person. |
| `aspects[].description` | string | Required | One sentence that says what the choice does. |
| `videoTypes` | array of objects | Required | The kinds of video brainstorm_ideas (`POST /v1/brainstorms`) writes ideas for (videoType). |
| `videoTypes[].id` | string | Required | The value to send in the setting. One of `story`, `fake_text`, `split_screen`, `any`. |
| `videoTypes[].name` | string | Required | A short name to show to a person. |
| `videoTypes[].description` | string | Required | One sentence that says what the choice does. |

## Errors

Every call can also answer these errors. [`VALIDATION_FAILED`](/developers/errors.md#VALIDATION_FAILED), [`UNKNOWN_PARAMETER`](/developers/errors.md#UNKNOWN_PARAMETER), [`UNAUTHORIZED`](/developers/errors.md#UNAUTHORIZED), [`SCOPE_MISSING`](/developers/errors.md#SCOPE_MISSING), [`RATE_LIMITED`](/developers/errors.md#RATE_LIMITED), [`INTERNAL`](/developers/errors.md#INTERNAL), [`UNAVAILABLE`](/developers/errors.md#UNAVAILABLE).

## Cost

No credits are used.

## Related operations

- [`create_project`](/developers/api/create-project.md) (`POST /v1/projects`) Create a project
- [`update_project`](/developers/api/update-project.md) (`PATCH /v1/projects/{projectId}`) Update a project
- [`list_voices`](/developers/api/list-voices.md) (`GET /v1/reference/voices`) List the voices
- [`create_split_screen_project`](/developers/api/create-split-screen-project.md) (`POST /v1/projects/split-screen`) Create a split screen project
- [`create_streamer_project`](/developers/api/create-streamer-project.md) (`POST /v1/projects/streamer`) Create a streamer project
- [`brainstorm_ideas`](/developers/api/brainstorm-ideas.md) (`POST /v1/brainstorms`) Brainstorm video ideas

## Questions

### Where do I use these ids?

In the settings of a project: language, objective, captionStyle and reframe each take one id from the matching list, and so do layout, theme and aspect for the projects that have them. videoType is a field of brainstorm_ideas (`POST /v1/brainstorms`).

### Can a list change?

Values can be added. Read the lists when you need them instead of copying them into your code, and an id you already use keeps working.
