---
title: "Update entity schema"
method: PUT
path: "/api/apps/{app_id}/entity-schemas/{entity_name}"
---

# Update entity schema

`PUT /api/apps/{app_id}/entity-schemas/{entity_name}`

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

This changes the app's live data model, so it takes effect immediately. It doesn't change the file that defines that model in the app's source code. Since Base44 rebuilds the live model whenever the file is written or the app's code is pulled from GitHub, a change made using this endpoint may be reverted.

To change the model for good, change the entities configuration files.

Pass `User` as the `entity_name` to set custom fields on the built-in user entity. Those fields can't redeclare `email` or `full_name`, which Base44 manages.

## Path parameters

- `entity_name` string, required — 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.
- `app_id` string, required — ID of the app whose entity schemas you want to work with.

## Request body

- UpdateEntitySchemaRequest
  - `entity_schema` object, required — The entity's full [JSON Schema](/developers/backend/resources/entities/entity-schemas), replacing the stored one. Needs `"type": "object"` and a `properties` object, plus any `required` fields and [row-level security rules](/developers/backend/resources/entities/security) under `rls`.

## Response `200`

Successful Response

- EntitySchemaResponse — One of an app's entities and its stored JSON Schema.
  - `entity_name` string, required — Name of the entity.
  - `entity_schema` object, required — The entity's stored [JSON Schema](/developers/backend/resources/entities/entity-schemas), including its `properties`, `required` fields, and any [row-level security rules](/developers/backend/resources/entities/security) under `rls`. For the app's own entities it also carries a `name` key holding the entity name. For `User` it holds only the custom fields added on top of the built-in ones, and has no `name` key.

## Other responses

- `400` — The `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` — Missing or invalid credentials.
- `403` — You don't have editor access to this app, or your workspace API key lacks the `apps:deploy` scope.
- `404` — App not found, or the app has no entity with this name (`User` is created instead of returning a 404).
- `409` — The request is scoped to a feature branch. Entity schemas can only be changed on the main branch.
- `422` — The request body is missing, or `entity_schema` is missing or is not an object. Whether it is a usable JSON Schema is checked after this and returns a 400.

---

[API](https://skmtc.dev/adexad/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/adexad/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/adexad/base44-app-management-api/revisions/7f5ce8287501/schema)
