curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "6886b8d390dc7e2f4a2c91b3",
"created_date": "2026-06-01T09:23:41.481000",
"updated_date": "2026-06-04T14:07:02.115000",
"created_by": "jane@acme.com",
"created_by_id": "6874b0c2e1a94d0031bb77de",
"is_sample": false,
"deleted_date": "2026-06-05T11:42:18.207000"
}
]List deleted entity records
Returns the records deleted from one of the app’s entities that are still in its trash.
A record lands here when Delete entity record removes it, and stays until you bring it back with Restore entity record or erase it with Permanently delete entity record. Row-level security doesn’t apply, so you get every deleted record in the entity. The User entity has no trash, because Remove app user deletes a user outright, so asking for its trash returns a 404.
Filter, sort, and page the same way as List entity records, except that the 5000 record cap doesn’t apply here: leave out limit to get the whole trash in one response.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/entities/{entity_name}/trash")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "6886b8d390dc7e2f4a2c91b3",
"created_date": "2026-06-01T09:23:41.481000",
"updated_date": "2026-06-04T14:07:02.115000",
"created_by": "jane@acme.com",
"created_by_id": "6874b0c2e1a94d0031bb77de",
"is_sample": false,
"deleted_date": "2026-06-05T11:42:18.207000"
}
]Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app that owns the entity.
Name of the entity, exactly as 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.
Query Parameters
Filter as a JSON object of field names and values, for example {"status": "paid"} for an exact match, or using an operator such as $gt for a comparison. See Filtering, sorting, and paging for a full list of operators.
Maximum number of deleted records to return, from 1 to 10000. Leave it out to get every matching deleted record in one response.
Number of deleted records to skip before the ones you get back, 0 or more. Defaults to 0. Use it with limit to page through a long list.
Single field to sort by, prefixed with - for descending. For example, -created_date returns newest first. Sorting by more than one field isn't supported.
Comma-separated list of fields to return, which reduces the response size on a wide entity. Reach a field inside an object with dots, as in customer.email. Each record still carries its id whether you ask for it or not.
Response
The entity's deleted records.
ID of the record. Pass it as entity_id to Get entity record, Update entity record or Delete entity record.
"6886b8d390dc7e2f4a2c91b3"
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.
"2026-06-01T09:23:41.481000"
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.
"2026-06-04T14:07:02.115000"
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.
"jane@acme.com"
ID of the app user who created the record, or anonymous when a visitor created it on an app that needs no login.
"6874b0c2e1a94d0031bb77de"
Whether Base44 stored the record as sample data while the app was being built. A record you create reports false.
false
When the record was deleted, as a UTC timestamp in ISO 8601 format.
"2026-06-05T11:42:18.207000"
Was this page helpful?