---
title: "Replace the brand kit"
description: "Replace the whole brand kit. There is no PATCH: an omitted field clears that part of the kit.\n\nThe logo must be media this workspace owns, named by its immutable `cdn.roasos.com` URL — upload it at `POST /v1/uploads` first. A URL from another workspace is refused with `reference_media_not_workspace_owned`, and a Discover creative is refused by name with `discover_source_not_allowed`.\n\nColours are lower-case six-digit hex, one per role. Fonts are NAMES, not files: roasOS hosts no font and embeds none, so a later render maps the name onto a bundled fallback. That is a real limit, not a placeholder.\n\nFree, and there is no quote: proving your logo does not buy it."
url: https://docs.roasos.com/api-reference/brand-kit/updateBrandKit
---

# Replace the brand kit

Replace the whole brand kit. There is no PATCH: an omitted field clears that part of the kit.

The logo must be media this workspace owns, named by its immutable `cdn.roasos.com` URL — upload it at `POST /v1/uploads` first. A URL from another workspace is refused with `reference_media_not_workspace_owned`, and a Discover creative is refused by name with `discover_source_not_allowed`.

Colours are lower-case six-digit hex, one per role. Fonts are NAMES, not files: roasOS hosts no font and embeds none, so a later render maps the name onto a bundled fallback. That is a real limit, not a placeholder.

Free, and there is no quote: proving your logo does not buy it.

## `PUT /v1/brand-kit`

Endpoint: `PUT https://api.roasos.com/v1/brand-kit`

Replace the brand kit

Replace the whole brand kit. There is no PATCH: an omitted field clears that part of the kit.

The logo must be media this workspace owns, named by its immutable `cdn.roasos.com` URL — upload it at `POST /v1/uploads` first. A URL from another workspace is refused with `reference_media_not_workspace_owned`, and a Discover creative is refused by name with `discover_source_not_allowed`.

Colours are lower-case six-digit hex, one per role. Fonts are NAMES, not files: roasOS hosts no font and embeds none, so a later render maps the name onto a bundled fallback. That is a real limit, not a placeholder.

Free, and there is no quote: proving your logo does not buy it.

### Request body

Content type: `application/json`

### Responses

- `200`: The replaced brand kit
- `400`: validation_error, reference_media_not_workspace_owned, or discover_source_not_allowed
- `501`: not_implemented: the brand kit is contracted and not live yet
- `503`: The brand kit could not be written

Read the full reference at https://docs.roasos.com/api-reference/brand-kit/updateBrandKit.
