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

# Upload workspace font

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

Uploads a font file to the workspace. Send it as `multipart/form-data` in a field named `file`.

Workspace fonts are font files the workspace uploaded, which every app in the workspace can use. Each font is one weight and style of a family, so a family with a regular and a bold weight is two fonts. Upload one file per weight and style.

The file can be TrueType, OpenType, WOFF or WOFF2, up to 5 MB. Font collections (`.ttc`) aren't supported. Base44 reads the family name, weight and style from the file itself, not from its file name, and stores the font as WOFF2.

When the workspace already has a font with the same family name, ignoring case, weight and style, you get that font back and the file you sent is discarded, so retrying an upload is safe below the font limit. A family name that's already a Google Fonts family is refused, and so is an upload once the workspace has 256 fonts.

In this response, `created_date` includes a `+00:00` offset for a newly added font.

Fonts belong to the workspace your credential is for. With a personal access token, that's the token's workspace, and there's no parameter to choose another one.

Uploads are limited to 30 a minute for each workspace.

<Note>Call this as an owner, admin, or editor of the workspace, with a personal access token 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/fonts
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/fonts:
    post:
      summary: Upload workspace font
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Uploads a font file to the workspace. Send it as `multipart/form-data`
        in a field named `file`.


        Workspace fonts are font files the workspace uploaded, which every app
        in the workspace can use. Each font is one weight and style of a family,
        so a family with a regular and a bold weight is two fonts. Upload one
        file per weight and style.


        The file can be TrueType, OpenType, WOFF or WOFF2, up to 5 MB. Font
        collections (`.ttc`) aren't supported. Base44 reads the family name,
        weight and style from the file itself, not from its file name, and
        stores the font as WOFF2.


        When the workspace already has a font with the same family name,
        ignoring case, weight and style, you get that font back and the file you
        sent is discarded, so retrying an upload is safe below the font limit. A
        family name that's already a Google Fonts family is refused, and so is
        an upload once the workspace has 256 fonts.


        In this response, `created_date` includes a `+00:00` offset for a newly
        added font.


        Fonts belong to the workspace your credential is for. With a personal
        access token, that's the token's workspace, and there's no parameter to
        choose another one.


        Uploads are limited to 30 a minute for each workspace.


        <Note>Call this as an owner, admin, or editor of the workspace, with a
        personal access token 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: upload_font_api_fonts_post
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UploadWorkspaceFont'
      responses:
        '200':
          description: >-
            The uploaded font, or the existing font with the same family, weight
            and style.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceFont'
        '400':
          description: >-
            The file is over 5 MB, isn't a font Base44 can read, is a font
            collection, or its family name is empty, over 100 characters, or
            contains characters such as `/`, `,`, `_`, quotes or brackets.
            `detail` carries a code for the reason, such as `file_too_large`.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You aren't an owner, admin, or editor of the workspace, your token
            is read-only, or your credential can't be used on this endpoint.
        '409':
          description: Your workspace requires an unlocked SSO session.
        '422':
          description: '`file` is missing.'
        '429':
          description: Rate limit exceeded.
components:
  schemas:
    UploadWorkspaceFont:
      properties:
        file:
          type: string
          format: binary
          title: File
          description: 'The font file: TrueType, OpenType, WOFF or WOFF2, up to 5 MB.'
      type: object
      required:
        - file
      title: UploadWorkspaceFont
    WorkspaceFont:
      properties:
        id:
          type: string
          title: Id
          description: ID of the font.
          example: 68d4b2e1f0a9c8001b3e5f27
        family_name:
          type: string
          title: Family Name
          description: >-
            Family name, read from the font file. Use it as the CSS
            `font-family`.
          example: Acme Sans
        display_family_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Display Family Name
          description: >-
            The broader family the font file says it belongs to, which groups
            stylistic variants such as an inline cut, or `null` when the file
            doesn't say.
          example: Acme
        variant_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Variant Name
          description: >-
            Name of the stylistic variant, or `null` when the file doesn't name
            one.
          example: Inline
        weight:
          type: integer
          title: Weight
          description: Weight from 1 to 1000, usually a multiple of 100.
          example: 400
        style:
          type: string
          enum:
            - normal
            - italic
          title: Style
          description: Style of the font.
          example: normal
        public_url:
          type: string
          title: Public Url
          description: Public URL of the font as a WOFF2 file, for an `@font-face` `src`.
          example: >-
            https://media.base44.com/files/public/workspaces/67e0b12c4d8a3f005b21c9e4/fonts/3f9a1c2e_68d4b2e1f0a9c8001b3e5f27.woff2
        created_by:
          type: string
          title: Created By
          description: Email of the member who uploaded the font.
          example: dana@acme.com
        created_date:
          type: string
          title: Created Date
          description: When the font was uploaded, as a UTC timestamp in ISO 8601 format.
          example: '2026-09-02T11:24:05.311000'
      type: object
      required:
        - id
        - family_name
        - display_family_name
        - variant_name
        - weight
        - style
        - public_url
        - created_by
        - created_date
      title: WorkspaceFont
      description: 'One uploaded font: a single weight and style of a family.'
  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.