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

> ## Agent Instructions
> Internal links on these pages omit the .md extension. Append .md to a docs page URL, or send an Accept: text/markdown header, to get that page as markdown.

# Create workspace brand

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Adds a brand you already have to a workspace, from its kit and, optionally, its design system. The brand is `ready` right away. To have Base44 build a brand from a description instead, use [Generate workspace brand](/api-reference/generate-workspace-brand).

`kit.title` becomes the brand's title, and it can't exactly match another brand's title in the workspace. `kit` and `design_system` are stored as you send them, up to 1 MB together. If the workspace has no default brand, this brand becomes the default.

Retrying a create that succeeded returns a `409`, because the title is then taken, or the plan-limit `403` when the new brand filled the workspace's limit.

Brands need the Builder plan or higher. An Enterprise workspace can have any number of brands, and any other workspace on Builder or a higher plan can have 1. A brand whose `status` is `failed` doesn't count. Over the limit this returns a `403` whose `detail.reason` is `design_system_limit_reached` and whose `detail.limit` is the workspace's limit.

This is limited to 60 requests per minute, shared with the other endpoints that change brands, except generating one. A signed-in session has its own limit, and every personal access token for the workspace shares one. Some workspaces have a different limit.

<Note>Call this as an owner or admin of the workspace, with a personal access token for that workspace sent as a Bearer token, or from a signed-in session. A read-only token is refused, and workspace API keys aren't accepted.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json post /api/workspace/{workspace_id}/brands
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/workspace/{workspace_id}/brands:
    post:
      summary: Create workspace brand
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Adds a brand you already have to a workspace, from its kit and,
        optionally, its design system. The brand is `ready` right away. To have
        Base44 build a brand from a description instead, use [Generate workspace
        brand](/api-reference/generate-workspace-brand).


        `kit.title` becomes the brand's title, and it can't exactly match
        another brand's title in the workspace. `kit` and `design_system` are
        stored as you send them, up to 1 MB together. If the workspace has no
        default brand, this brand becomes the default.


        Retrying a create that succeeded returns a `409`, because the title is
        then taken, or the plan-limit `403` when the new brand filled the
        workspace's limit.


        Brands need the Builder plan or higher. An Enterprise workspace can have
        any number of brands, and any other workspace on Builder or a higher
        plan can have 1. A brand whose `status` is `failed` doesn't count. Over
        the limit this returns a `403` whose `detail.reason` is
        `design_system_limit_reached` and whose `detail.limit` is the
        workspace's limit.


        This is limited to 60 requests per minute, shared with the other
        endpoints that change brands, except generating one. A signed-in session
        has its own limit, and every personal access token for the workspace
        shares one. Some workspaces have a different limit.


        <Note>Call this as an owner or admin of the workspace, with a personal
        access token for that workspace sent as a Bearer token, or from a
        signed-in session. A read-only token is refused, and workspace API keys
        aren't accepted.</Note>
      operationId: create_brand_api_workspace__workspace_id__brands_post
      parameters:
        - name: workspace_id
          in: path
          required: true
          schema:
            type: string
            description: >-
              ID of the workspace. With a personal access token, use the token's
              workspace. Get it from `organization_id` in [Get
              app](/api-reference/get-app).
            title: Workspace Id
          description: >-
            ID of the workspace. With a personal access token, use the token's
            workspace. Get it from `organization_id` in [Get
            app](/api-reference/get-app).
          example: 67e0b12c4d8a3f005b21c9e4
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BrandUpsertRequest'
      responses:
        '200':
          description: The new brand.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceBrandStarted'
              example:
                status: success
                message: Brand 'Nordwind' added
                id: 68e0c4a1b9d2f7003a5e1b42
        '400':
          description: >-
            `kit` has no `title` or no `description`, or `kit` and
            `design_system` together are larger than 1 MB.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You aren't an owner or admin of the workspace, your token is for a
            different workspace or is read-only, your credential can't be used
            on this endpoint, or the workspace is at its brand limit.
        '409':
          description: >-
            Another brand in the workspace already has this title, or your
            workspace requires an unlocked SSO session.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: Rate limit exceeded.
components:
  schemas:
    BrandUpsertRequest:
      properties:
        kit:
          additionalProperties: true
          type: object
          title: Kit
          description: >-
            The brand's identity. It needs a non-empty `title`, which becomes
            the brand's title, and a `description`. Brands Base44 generates also
            carry `tagLine`, `values`, `toneOfVoice`, `designGuidelines`,
            `componentStyle`, and a `logo` with its `url`. Nothing else in it is
            checked.
          example:
            description: >-
              A family furniture workshop that builds solid oak tables and
              chairs to order.
            logo:
              altText: Nordwind logo
              url: https://media.base44.com/images/public/nordwind-logo.png
            tagLine: Furniture built to last
            title: Nordwind
            toneOfVoice:
              - Warm
              - Plain-spoken
            values:
              - Craft
              - Honesty
              - Durability
        design_system:
          additionalProperties: true
          type: object
          title: Design System
          description: >-
            The brand's design system: its `tokens`, such as `colors` and
            `fonts`, and its component sections. It's stored as you send it.
            When you include `tokens`, send it as an object. Defaults to an
            empty object.
          example:
            tokens:
              colors:
                - label: Primary
                  token: primary
                  value: '#0B7A3B'
                - label: Background
                  token: background
                  value: '#FAF7F2'
              fonts:
                - family: Fraunces
                  role: heading
                - family: Inter
                  role: body
      type: object
      required:
        - kit
      title: BrandUpsertRequest
    WorkspaceBrandStarted:
      properties:
        status:
          type: string
          const: success
          title: Status
          description: Always `success`.
          example: success
        message:
          type: string
          title: Message
          description: Short confirmation. Its wording can change, so don't parse it.
          example: Brand 'Nordwind' added
        id:
          type: string
          title: Id
          description: ID of the new brand.
          example: 68e0c4a1b9d2f7003a5e1b42
      type: object
      required:
        - status
        - message
        - id
      title: WorkspaceBrandStarted
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````

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