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

# Create entity record

`POST /api/apps/{app_id}/entities/{entity_name}`

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

Adds a record to one of the app's entities and returns it.

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.

Row-level security applies, so the call is rejected when the entity's `rls` create rule doesn't cover the record you send.

Creating a record triggers the app's webhooks and any automation or workflow that listens for this entity.

<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 record's fields, as a flat JSON object using the names the entity's [schema](/api-reference/get-entity-schema) declares.

## Response `200`

The created record.

- object — One record in one of an app's entities.
  - `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 doesn't cover the record, or your API key is read-only.
- `404` — App not found, or the app has no entity with this name.
- `422` — The body is missing, a required field the entity's schema declares is missing, or a value doesn't match the type the schema declares for that field.
- `429` — Rate limit exceeded. The base limit is 80 requests per minute. See [Rate limits](/developers/references/apps-api/get-started/rate-limits) for the multiplier your plan gets.

---

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