---
title: "Delete entity records"
method: DELETE
path: "/api/apps/{app_id}/entities/{entity_name}"
---

# Delete entity records

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

Deletes every record in one of the app's entities that matches a filter, and returns how many it deleted.

Send the filter as the body, written the same way as the `q` parameter of [List entity records](/api-reference/list-entity-records). For example, `{"status": "cancelled"}` deletes every cancelled record. The body is required, and an empty object, `{}`, deletes every record in the entity.

Row-level security applies, so only the matching records the entity's `rls` delete rule lets you remove are deleted. The rest are left alone rather than failing the call.

The records move to the entity's trash rather than being erased. Bring them back with [Restore entity records](/api-reference/restore-entity-records), or erase one for good with [Permanently delete entity record](/api-reference/permanently-delete-entity-record).

Unlike [Delete entity record](/api-reference/delete-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 — Filter selecting the records to delete, in the same form as `q`. Send `{}` to delete every record in the entity.

## Response `200`

How many records were deleted.

- object — How many records were deleted.
  - `success` boolean, required — Always `true`. A delete that doesn't happen returns an error instead.
  - `deleted` integer, required — Number of records moved to the trash. `0` when no record matched the filter.

## Other responses

- `400` — The filter isn't one Base44 can run, for example an unknown operator.
- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app, or your API key is read-only.
- `404` — App not found, the app has no entity with this name, or the entity is `User`, whose records can't be deleted in bulk.
- `422` — The body is missing, or isn't a JSON object.
- `429` — Rate limit exceeded. The base limit is 30 requests every 30 seconds. See [Rate limits](/developers/references/apps-api/get-started/rate-limits) for the multiplier your plan gets.

## Changes

- **2026-09-29** `347e2afcf94a` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/:app_id/entities/:entity_name/delete.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)
