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

# Set app logo

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

Sets the app's logo to the image at `logo_url`.

The URL is stored as you send it. It isn't fetched or checked, so use a link that stays reachable, such as the public link from [Upload app file](/api-reference/upload-app-file). The builder shows the new logo right away, and the published app shows it after you next [deploy the app](/api-reference/deploy-an-app). Link previews use the logo when the app has no social image.

Generating a logo is limited to 10 requests an hour per app. Some workspaces have a different limit.

<Note>This endpoint accepts a personal API key belonging to a user with editor access to the app. A read-only key is refused, and workspace API keys are not accepted.</Note>

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time. Send only the fields documented here. Other request fields are not supported and their behavior can change.</Warning>



## OpenAPI

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


        Sets the app's logo to the image at `logo_url`.


        The URL is stored as you send it. It isn't fetched or checked, so use a
        link that stays reachable, such as the public link from [Upload app
        file](/api-reference/upload-app-file). The builder shows the new logo
        right away, and the published app shows it after you next [deploy the
        app](/api-reference/deploy-an-app). Link previews use the logo when the
        app has no social image.


        Generating a logo is limited to 10 requests an hour per app. Some
        workspaces have a different limit.


        <Note>This endpoint accepts a personal API key belonging to a user with
        editor access to the app. A read-only key is refused, and workspace API
        keys are not accepted.</Note>


        <Warning>The response includes fields beyond the ones documented here.
        Don't rely on undocumented response fields, as they can change at any
        time. Send only the fields documented here. Other request fields are not
        supported and their behavior can change.</Warning>
      operationId: update_logo_api_apps__app_id__metadata_update_logo_post
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app to set the logo on.
            title: App Id
          description: ID of the app to set the logo on.
          example: 6820f3a4e7b91d003c45a1f2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LogoPayload'
      responses:
        '200':
          description: The app with its new logo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppLogo'
        '400':
          description: '`logo_url` is missing.'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have editor access to this app, or your API key is
            read-only.
        '404':
          description: App not found.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: Rate limit reached. Retry later.
      security:
        - PersonalAccessTokenAuth:
            - full_access
components:
  schemas:
    LogoPayload:
      properties:
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
          description: URL of the image to use as the app's logo.
          example: >-
            https://storage.base44.com/6820f3a4e7b91d003c45a1f2/3f2504e0_logo.png
      type: object
      required:
        - logo_url
      title: LogoPayload
      example:
        logo_url: https://storage.base44.com/6820f3a4e7b91d003c45a1f2/3f2504e0_logo.png
    AppLogo:
      properties:
        id:
          type: string
          title: Id
          description: ID of the app.
          example: 6820f3a4e7b91d003c45a1f2
        logo_url:
          type: string
          title: Logo Url
          description: URL of the app's logo, as you sent it.
          example: >-
            https://storage.base44.com/6820f3a4e7b91d003c45a1f2/3f2504e0_logo.png
      type: object
      required:
        - id
        - logo_url
      title: AppLogo
      description: 'Doc-only: the handler returns the whole app document.'
    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>`. Each
        operation lists the permission it needs: `read_only` or `full_access`. A
        full-access token can call every operation. A read-only token can call
        only the operations that list `read_only`; anything else returns 403
        `read_only_credential_route_not_allowed`.

````

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