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

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



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json put /api/apps/{app_id}/entities/{entity_name}/bulk
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}/entities/{entity_name}/bulk:
    put:
      summary: Update entity records
      description: >-
        <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>
      operationId: bulk_update_entities_api_apps__app_id__entities__entity_name__bulk_put
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app that owns the entity.
            title: App Id
          description: ID of the app that owns the entity.
          example: 6820f3a4e7b91d003c45a1f2
        - name: entity_name
          in: path
          required: true
          schema:
            type: string
            description: >-
              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.
            title: Entity Name
          description: >-
            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.
          example: Invoice
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                additionalProperties: true
                required:
                  - id
                properties:
                  id:
                    type: string
                    description: >-
                      ID of the record to change, as `id` in the response of
                      [List entity records](/api-reference/list-entity-records).
                    example: 6886b8d390dc7e2f4a2c91b3
              title: UpdateEntityRecords
              description: >-
                The records to change, each with its `id` and the fields to set
                on it.
            example:
              - id: 6886b8d390dc7e2f4a2c91b3
                status: paid
              - id: 6886b8d390dc7e2f4a2c91b4
                amount: 1800
      responses:
        '200':
          description: The updated records.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  additionalProperties: true
                  description: One record in one of an app's entities.
                  properties:
                    id:
                      anyOf:
                        - type: string
                        - type: 'null'
                      description: >-
                        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).
                      example: 6886b8d390dc7e2f4a2c91b3
                      title: Id
                    created_date:
                      anyOf:
                        - type: string
                        - type: 'null'
                      description: >-
                        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.
                      example: '2026-06-01T09:23:41.481000'
                      title: Created Date
                    updated_date:
                      anyOf:
                        - type: string
                        - type: 'null'
                      description: >-
                        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.
                      example: '2026-06-04T14:07:02.115000'
                      title: Updated Date
                    created_by:
                      anyOf:
                        - type: string
                        - type: 'null'
                      description: >-
                        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.
                      example: jane@acme.com
                      title: Created By
                    created_by_id:
                      anyOf:
                        - type: string
                        - type: 'null'
                      description: >-
                        ID of the app user who created the record, or
                        `anonymous` when a visitor created it on an app that
                        needs no login.
                      example: 6874b0c2e1a94d0031bb77de
                      title: Created By Id
                    is_sample:
                      anyOf:
                        - type: boolean
                        - type: 'null'
                      description: >-
                        Whether Base44 stored the record as sample data while
                        the app was being built. A record you create reports
                        `false`.
                      example: false
                      title: Is Sample
                  title: EntityRecord
                title: EntityRecords
        '400':
          description: >-
            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':
          description: Missing or invalid credentials.
        '403':
          description: >-
            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':
          description: >-
            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':
          description: >-
            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':
          description: >-
            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.
components:
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````