---
title: "Update entity records"
method: PUT
path: "/api/apps/{app_id}/entities/{entity_name}/bulk"
---

# Update entity records

`PUT /api/apps/{app_id}/entities/{entity_name}/bulk`

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

Changes several records in one of the app's entities, each with its own fields, and returns the updated records in the order you sent them.

Send a JSON array of up to 500 objects. Each one carries the `id` of a record and the fields to change on it, and an `id` can appear only once. Like [Update entity record](/api-reference/update-entity-record), this merges rather than replaces, so a field you leave out keeps its value. Fields the entity's schema doesn't declare are left out of the record instead of failing the call.

Every record is checked before any is written. If one `id` matches no record the entity's `rls` update rule lets you change, or one record doesn't match the entity's schema or a field-level rule, the call is rejected and no records change.

Sending the same array again sets the same values, so a retry is safe. Unlike [Update entity record](/api-reference/update-entity-record), this doesn't trigger the app's webhooks, automations, or workflows.

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

## Path parameters

- `app_id` string, required — ID of the app that owns the entity.
- `entity_name` string, required — Name of the entity, exactly as [List entity schemas](/api-reference/list-entity-schemas) reports it. Don't pass `User` here. It doesn't fail, but it reads and writes a separate, disconnected set of records stored under that name, not the app's real user accounts, which are managed through their own endpoints.

## Request body

- object[] — The records to change, each with its `id` and the fields to set on it.
  - `id` string, required — ID of the record to change, as `id` in the response of [List entity records](/api-reference/list-entity-records).

## Response `200`

The updated records.

- object[]
  - `id` string, nullable — ID of the record. Pass it as `entity_id` to [Get entity record](/api-reference/get-entity-record), [Update entity record](/api-reference/update-entity-record) or [Delete entity record](/api-reference/delete-entity-record).
  - `created_date` string, nullable — When the record was created, as a UTC timestamp in ISO 8601 format. A record Base44 has just created carries a `Z` suffix, and a record read back from storage does not.
  - `updated_date` string, nullable — When the record last changed, as a UTC timestamp in ISO 8601 format. A record Base44 has just created carries a `Z` suffix, and a record read back from storage does not.
  - `created_by` string, nullable — Email of the app user who created the record, or `anonymous` when a visitor created it on an app that needs no login. Apps that hide record authorship leave this field out of the response.
  - `created_by_id` string, nullable — ID of the app user who created the record, or `anonymous` when a visitor created it on an app that needs no login.
  - `is_sample` boolean, nullable — Whether Base44 stored the record as sample data while the app was being built. A record you create reports `false`.

## Other responses

- `400` — The array is empty or holds more than 500 items, an item has no `id` or an `id` that isn't a string, or an `id` appears twice. On some apps, a field value over 20,000 characters is rejected too.
- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app, the entity's `rls` update rule or a field-level rule refuses a change, or your API key is read-only.
- `404` — App not found, the app has no entity with this name, or an `id` matches no record the entity's `rls` update rule lets you change.
- `422` — The body isn't an array of JSON objects, or a value doesn't match the type the entity's schema declares for that field.
- `429` — Rate limit exceeded. The base limit is 25 requests per minute, and this endpoint shares it with [Update entity records by filter](/api-reference/update-entity-records-by-filter). See [Rate limits](/developers/references/apps-api/get-started/rate-limits) for the multiplier your plan gets.

## Changes

- **2026-09-30** `e2a6a9f1fe4c` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/:app_id/entities/:entity_name/bulk/put.md)

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/idealspot/apis/base44-app-management-api/revisions/e2a6a9f1fe4c?raw)
