> ## 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.

# Generate workspace brand

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

Starts generating a brand from a text description, and returns the new brand's `id` right away. AI models build the brand's kit and design system in the background.

The brand starts with `status` `generating` and the title `Generating…`. Poll [Get workspace brand](/api-reference/get-workspace-brand) every few seconds until `status` is `ready` or `failed`. When generation fails for a reason you can fix, `failure_message` says why. The finished brand's title gets a number added, such as `Nordwind 2`, when another brand already has it. If the workspace has no default brand, this brand becomes the default.

Send a `description` with text in it. A blank one still returns an `id`, and that brand then ends as `failed`.

Starting a generation deletes the workspace's brands whose `status` is `failed`. Retrying a call that succeeded starts a second generation, or returns the plan-limit `403` when the first one 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 20 requests per minute per user, counted across your signed-in sessions and personal access tokens. 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/generate
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/generate:
    post:
      summary: Generate workspace brand
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Starts generating a brand from a text description, and returns the new
        brand's `id` right away. AI models build the brand's kit and design
        system in the background.


        The brand starts with `status` `generating` and the title `Generating…`.
        Poll [Get workspace brand](/api-reference/get-workspace-brand) every few
        seconds until `status` is `ready` or `failed`. When generation fails for
        a reason you can fix, `failure_message` says why. The finished brand's
        title gets a number added, such as `Nordwind 2`, when another brand
        already has it. If the workspace has no default brand, this brand
        becomes the default.


        Send a `description` with text in it. A blank one still returns an `id`,
        and that brand then ends as `failed`.


        Starting a generation deletes the workspace's brands whose `status` is
        `failed`. Retrying a call that succeeded starts a second generation, or
        returns the plan-limit `403` when the first one 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 20 requests per minute per user, counted across your
        signed-in sessions and personal access tokens. 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: generate_brand_api_workspace__workspace_id__brands_generate_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/BrandDescriptionRequest'
      responses:
        '200':
          description: Generation started. Poll the brand by `id`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceBrandStarted'
              example:
                status: success
                message: Generating brand
                id: 68e0c4a1b9d2f7003a5e1b42
        '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 generation started in the workspace at the same moment, so
            try again, 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:
    BrandDescriptionRequest:
      properties:
        description:
          type: string
          title: Description
          description: >-
            What the brand is: the business, its audience, and the look and
            voice you want.
          example: >-
            A family furniture workshop that builds solid oak tables. Warm,
            earthy, and plain-spoken.
      type: object
      required:
        - description
      title: BrandDescriptionRequest
    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.