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

# Update entity schema

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

Replaces an entity's JSON Schema with the one you send. This is a full replacement, not a merge: anything you leave out is dropped from the schema.

`entity_schema` must be a JSON Schema object, so it needs `"type": "object"` and a `properties` object. Put row-level security rules under `rls`. Base44 adds a `name` key holding the entity name to the schema it stores and returns.

<Warning>This changes the app's live schema right away, but it does not change the entity definition in the app's source code. Base44 rebuilds the live schema from the source files whenever the app's code changes, which reverts anything you set here. Change the code itself when you need the edit to last.</Warning>

Pass `User` as the `entity_name` to set the custom fields on the built-in user entity. Those custom fields cannot redeclare `email` or `full_name`, which Base44 manages. `User` is also the one name this endpoint creates when it does not exist yet; every other unknown name returns a 404.

<Note>This endpoint accepts a personal API key, or a workspace API key with the `apps:deploy` scope.</Note>



## OpenAPI

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


        Replaces an entity's JSON Schema with the one you send. This is a full
        replacement, not a merge: anything you leave out is dropped from the
        schema.


        `entity_schema` must be a JSON Schema object, so it needs `"type":
        "object"` and a `properties` object. Put row-level security rules under
        `rls`. Base44 adds a `name` key holding the entity name to the schema it
        stores and returns.


        <Warning>This changes the app's live schema right away, but it does not
        change the entity definition in the app's source code. Base44 rebuilds
        the live schema from the source files whenever the app's code changes,
        which reverts anything you set here. Change the code itself when you
        need the edit to last.</Warning>


        Pass `User` as the `entity_name` to set the custom fields on the
        built-in user entity. Those custom fields cannot redeclare `email` or
        `full_name`, which Base44 manages. `User` is also the one name this
        endpoint creates when it does not exist yet; every other unknown name
        returns a 404.


        <Note>This endpoint accepts a personal API key, or a workspace API key
        with the `apps:deploy` scope.</Note>
      operationId: update_schema_api_apps__app_id__entity_schemas__entity_name__put
      parameters:
        - name: entity_name
          in: path
          required: true
          schema:
            type: string
            description: >-
              Name of the entity to replace, as returned by [List entity
              schemas](/api-reference/list-entity-schemas). Pass `User` to set
              the built-in user entity's custom fields.
            title: Entity Name
          description: >-
            Name of the entity to replace, as returned by [List entity
            schemas](/api-reference/list-entity-schemas). Pass `User` to set the
            built-in user entity's custom fields.
          example: Invoice
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose entity schemas you want.
            title: App Id
          description: ID of the app whose entity schemas you want.
          example: 6820f3a4e7b91d003c45a1f2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEntitySchemaRequest'
      responses:
        '200':
          description: The updated entity schema.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntitySchemaResponse'
        '400':
          description: >-
            `entity_schema` is not a valid JSON Schema, the `User` schema
            redeclares `email` or `full_name`, or the schema sets row-level
            security rules Base44 cannot enforce.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have editor access to this app, or your workspace API key
            lacks the `apps:deploy` scope.
        '404':
          description: >-
            App not found, or the app has no entity with this name (`User` is
            created instead of returning a 404).
        '409':
          description: >-
            The request is scoped to a feature branch. Entity schemas can only
            be changed on the main branch.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    UpdateEntitySchemaRequest:
      properties:
        entity_schema:
          additionalProperties: true
          type: object
          title: Entity Schema
          description: >-
            The entity's full JSON Schema, replacing the stored one. Needs
            `"type": "object"` and a `properties` object, plus any `required`
            fields and row-level security rules under `rls`.
          example:
            name: Invoice
            properties:
              amount:
                description: Total amount in cents
                type: number
              status:
                enum:
                  - draft
                  - sent
                  - paid
                type: string
            required:
              - amount
            rls:
              read:
                created_by: '{{user.email}}'
            type: object
      type: object
      required:
        - entity_schema
      title: UpdateEntitySchemaRequest
    EntitySchemaResponse:
      properties:
        entity_name:
          type: string
          title: Entity Name
          description: Name of the entity.
          example: Invoice
        entity_schema:
          additionalProperties: true
          type: object
          title: Entity Schema
          description: >-
            The entity's stored JSON Schema. For the app's own entities this
            includes a `name` key Base44 sets on every write; the `User` schema
            does not get one.
          example:
            name: Invoice
            properties:
              amount:
                description: Total amount in cents
                type: number
              status:
                enum:
                  - draft
                  - sent
                  - paid
                type: string
            required:
              - amount
            rls:
              read:
                created_by: '{{user.email}}'
            type: object
      type: object
      required:
        - entity_name
        - entity_schema
      title: EntitySchemaResponse
    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:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````