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

# Create entity records

`POST /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>

Adds several records to one of the app's entities in one call, and returns them in the order you sent them.

Send a JSON array of records, each written the same way as the body of [Create entity record](/api-reference/create-entity-record). Only the fields the entity's schema declares are stored, so a misspelled name is left out of the record instead of failing the call. Base44 always assigns `id`, `created_date`, `updated_date`, `created_by`, and `created_by_id` automatically, and ignores any of them you send. An empty array creates nothing and returns an empty array.

Every record is checked before any is written. If one record doesn't match the entity's schema, or the entity's `rls` create rule or a field-level rule doesn't cover it, the call is rejected and no records are created.

There's no fixed limit on how many records one call creates, but the whole array is written before the response comes back, so split a very large import into several calls.

Each record is new, so retrying a call that already succeeded creates every record again. If a call fails while it's writing, some of the records can already be stored, so check with [List entity records](/api-reference/list-entity-records) before you retry.

Unlike [Create entity record](/api-reference/create-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 create, each a flat JSON object of the fields the entity's schema declares.

## Response `200`

The created 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` — On some apps, a field value over 20,000 characters is rejected. Store large content with the UploadPublicFile integration and use the returned URL instead.
- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app, the entity's `rls` create rule or a field-level rule doesn't cover one of the records, or your API key is read-only.
- `404` — App not found, or the app has no entity with this name.
- `405` — The entity is `User`, whose records can't be created in bulk.
- `422` — The body isn't an array of JSON objects, or a record is missing a required field the entity's schema declares or has a value that doesn't match its type.
- `429` — Rate limit exceeded. The base limit is 25 requests per minute. 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/post.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)
