> ## Documentation Index
> Fetch the complete documentation index at: https://docs.launchmystore.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Theme Settings

> Manage theme global settings

# Theme Settings

Manage global theme settings (colors, typography, layout options, etc.).

## Get Theme Settings

Retrieve the current theme settings.

### Request

```bash theme={null}
curl -X GET "https://api.launchmystore.io/api/v1/themes/theme_abc123/settings.json" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

### Response

The response uses the standard envelope (`status`, `state`, `message`, `data`).
`data.settings` holds the current setting values, `data.schema` holds the
theme's settings schema groups, and `data.presets` lists the available preset
names (`data.currentPreset` is the active preset name, or `null` when settings
are stored as a direct object).

```json theme={null}
{
  "status": 200,
  "state": "success",
  "message": null,
  "data": {
    "success": true,
    "schema": [
      {
        "name": "Colors",
        "settings": [
          { "type": "color", "id": "colors_accent_1", "label": "Accent 1", "default": "#121212" },
          { "type": "color", "id": "colors_background_1", "label": "Background 1", "default": "#ffffff" }
        ]
      }
    ],
    "settings": {
      "colors_solid_button_labels": "#ffffff",
      "colors_accent_1": "#121212",
      "colors_accent_2": "#334FB4",
      "colors_text": "#121212",
      "colors_outline_button_labels": "#121212",
      "colors_background_1": "#ffffff",
      "colors_background_2": "#f3f3f3",
      "type_header_font": "Assistant",
      "type_body_font": "Assistant",
      "type_header_font_size_scale": 100,
      "type_body_font_size_scale": 100
    },
    "colorSchemeOptions": [],
    "colorSchemes": [],
    "colorSchemeDefinition": null,
    "presets": ["Default", "Dark"],
    "currentPreset": "Default"
  },
  "count": null,
  "pagination": null
}
```

***

## Update Theme Settings

Update one or more theme settings.

<Warning>
  The request body **is** the flat settings map itself — the setting keys go
  at the **top level** of the body. Do **not** wrap them in a `"settings"`
  key: the endpoint forwards the entire body as the settings object, so a
  `{ "settings": { ... } }` body arrives double-wrapped (`settings.settings.*`)
  and **nothing is applied**.
</Warning>

### Request

<CodeGroup>
  ```bash cURL theme={null}
  curl -X PUT "https://api.launchmystore.io/api/v1/themes/theme_abc123/settings.json" \
    -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "colors_accent_1": "#FF5733",
      "colors_background_1": "#FAFAFA",
      "type_header_font": "Roboto"
    }'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.launchmystore.io/api/v1/themes/theme_abc123/settings.json', {
    method: 'PUT',
    headers: {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      colors_accent_1: '#FF5733',
      colors_background_1: '#FAFAFA',
      type_header_font: 'Roboto'
    })
  });
  ```
</CodeGroup>

### Body Parameters

The body is a flat object of setting `key: value` pairs to update (sent at
the top level, **not** nested under a `settings` key).

### Response

The submitted settings are merged into the active preset (or the current
settings object) and saved. The response uses the standard envelope; the
proxied save result is returned verbatim under `data`.

```json theme={null}
{
  "status": 200,
  "state": "success",
  "message": null,
  "data": {
    "success": true,
    "message": "Theme settings saved successfully"
  },
  "count": null,
  "pagination": null
}
```

***

## Common Settings

Theme settings are defined by the theme's `settings_schema.json`. Common settings include:

| Setting Key | Type | Description |
| - | - | - |
| `colors_accent_1` | color | Primary accent color |
| `colors_accent_2` | color | Secondary accent color |
| `colors_text` | color | Body text color |
| `colors_background_1` | color | Primary background |
| `colors_background_2` | color | Secondary background |
| `type_header_font` | font\_picker | Header font family |
| `type_body_font` | font\_picker | Body font family |
| `type_header_font_size_scale` | range | Header font size scale (%) |
| `type_body_font_size_scale` | range | Body font size scale (%) |
| `logo` | image\_picker | Store logo |
| `favicon` | image\_picker | Browser favicon |

## Errors

Errors return a numeric HTTP status with an envelope of the form
`{ "status": <code>, "state": "error", "message": "<reason>", "data": null }`.

```json theme={null}
{
  "status": 404,
  "state": "error",
  "message": "Store not found",
  "data": null
}
```

| HTTP Status | When |
| - | - |
| `401` | Invalid or missing access token |
| `403` | App doesn't have the required scope (`read_themes` for GET, `write_themes` for PUT) |
| `404` | Store not found |
| `400` | The settings could not be saved (the underlying error message is returned in `message`) |
| `500` | Unexpected server error |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.