---
title: "Apply Brand"
method: POST
path: "/brands/{brandId}/apply"
tags: ["Brands"]
---

# Apply Brand

`POST /brands/{brandId}/apply`

## Request

- Base URL: `https://api.wistia.com/modern`
- URL: `https://api.wistia.com/modern/brands/{brandId}/apply`
- Auth: HTTP bearer

Applies a brand to a media, folder, or channel, so that resource is styled
by the brand's colors, fonts, logos, and layout.

A brand has no effect until it is applied to something. Media inherit from
their folder, and folders from the account's default brand, so applying a
brand to a folder styles everything inside it that has no brand of its own.

Applying the account-level default brand (`is_default: true`) is how a
resource is un-branded: it detaches the resource so it inherits again.

By default this also clears any brand-mapped appearance settings the
resource had set directly, so the brand is what shows. Pass
`clear_overrides: false` to leave those in place.

Responds with the brand now in effect on the resource, which is not always
the one you applied — detaching a media returns the brand it falls back to.

Webinars can't be branded through this endpoint yet.

## Requires api token with one of the following permissions
```
All data
```

Tokens with the "Act with a team member's permissions" permission
(`all:delegate_to_contact_permissions` scope) can also be used. Requests
made with such a token are authorized using the permissions of the
contact assigned to the token.

An [expiring access token](https://docs.wistia.com/reference/post_expiring-token)
created with the `all:delegate_to_contact_permissions` scope can also be
used when its authorizations grant the `update` permission on this brand
and on the media, folder or channel being branded.

## Path parameters

- `brandId` string, required

## Headers

- `X-Wistia-API-Version` string, required

## Request body

- object: The resource to apply the brand to.
  - `resource_type` 'media' | 'folder' | 'channel', required: The kind of resource being branded. Webinars can't be branded through this endpoint yet.
  - `resource_id` string, required: The id of the resource being branded.
  - `clear_overrides` boolean: When true (the default), appearance settings the resource had set directly are cleared for the fields the brand controls, so the brand is what shows. Set to false to leave them in place, in which case they continue to win over the brand.

## Response `200`

Brand applied successfully

- object: A brand is a saved set of branding options — colors, fonts, logos, and layout — that can be applied to media, folders, and channels.
  - `id` string: A unique alphanumeric identifier for this brand.
  - `name` string: The brand's display name.
  - `is_default` boolean: Whether this brand is the account-level default, applied to content that has no more specific brand.
  - `created` string, date-time: The date the brand was originally created.
  - `updated` string, date-time: The date the brand was last updated.
  - `primary_color` union: The primary brand color, used for primary buttons and the player playbar. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset.
    - string
    - array[]
      - unknown[]
        - unknown
  - `page_background_color` union: The brand color used for page backgrounds. Either a hex color string or a gradient represented as an array of [hexColor, percentage] tuples. Null when unset.
    - string
    - array[]
      - unknown[]
        - unknown
  - `body_font_family` string, nullable: The brand font family for body text. Null when unset.
  - `headline_font_family` string, nullable: The brand font family for headlines. Null when unset.
  - `button_font_family` string, nullable: The brand font family for buttons. Null when unset.
  - `border_radius` integer, nullable: The border radius in pixels for rounded corners. Null when unset.
  - `contrast_icons` 'enabled' | 'disabled' | 'unset' | 'null', nullable: Controls whether the player icon color is always white or uses an accessible contrast color when necessary.
  - `opaque_controls` 'enabled' | 'disabled' | 'unset' | 'null', nullable: Controls the opacity of the video player control bar and big play button.
  - `page_logo` object, nullable: The brand logo used for pages. Null when unset.
    - `url` string: The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one.
    - `dimensions` object, nullable
      - `width` integer
      - `height` integer
    - `size` number, nullable: The size multiplier of the logo.
  - `player_logo` object, nullable: The brand logo used for the player. Null when unset.
    - `url` string: The Wistia delivery URL of the logo image, e.g. `https://embed-ssl.wistia.com/deliveries/abc123def456.png`. When writing, this must reference an image already in the account; the API cannot upload one.
    - `dimensions` object, nullable
      - `width` integer
      - `height` integer
    - `size` number, nullable: The size multiplier of the logo.
  - `cursor` string, nullable: A cursor for stable pagination based on current `sort_by` order. You can pass this to `cursor[before]` or `cursor[after]` as a parameter to fetch the records before or after this record in the same sort order. This is only populated if records were fetched with `cursor[enabled]`, or `cursor[before]` or `cursor[after]`.

## Other responses

- `400`: Bad request
- `401`: Unauthorized, invalid or missing token
- `403`: Forbidden, token is valid but account does not have access to feature
- `404`: Resource not found
- `500`: Internal server error

## Changes

- **2026-11-03** `b86cb2a7b420`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/wistia/apis/data-api/changes/brands/:brandId/apply/post.md)

---

[API](https://skmtc.dev/wistia/apis/data-api.md) - [All operations](https://skmtc.dev/wistia/apis/data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/wistia/apis/data-api/revisions/b86cb2a7b420?raw)
