Records
CRUD operations for custom entity records, nested under entity types.
Records API
Manage records for your custom entity types. Records are nested under their entity type slug. Permissions are dynamic — for an entity type with slug projects, the required abilities are projects.view, projects.create, projects.edit, and projects.delete. The general records.* abilities also work as a fallback.
List Records
GET /api/v1/entity-types/{slug}/records — Permission: {slug}.view or records.view
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | No | Search across custom field values |
filters | string | No | JSON-encoded advanced filter object |
per_page | integer | No | Results per page, 1–100 (default: 25) |
Example Request
curl -X GET "https://your-domain.com/api/v1/entity-types/projects/records?per_page=10" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"const response = await fetch("https://your-domain.com/api/v1/entity-types/projects/records?per_page=10", {
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
});
const data = await response.json();$ch = curl_init('https://your-domain.com/api/v1/entity-types/projects/records?per_page=10');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_TOKEN',
'Accept: application/json',
],
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);import requests
response = requests.get(
"https://your-domain.com/api/v1/entity-types/projects/records?per_page=10",
headers={
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
)
data = response.json()Example Response
{
"data": [
{
"id": 5,
"entity_type_slug": "projects",
"display_name": "Website Redesign",
"fields": {
"project_name": "Website Redesign",
"status": "In Progress",
"budget": 15000
},
"tags": [
{ "id": 2, "name": "Active", "slug": "active", "color": "green" }
],
"created_at": "2025-03-01T09:00:00.000000Z",
"updated_at": "2025-03-18T16:30:00.000000Z"
}
],
"meta": { "current_page": 1, "last_page": 1, "per_page": 10, "total": 1 },
"links": { "first": "...", "last": "...", "prev": null, "next": null }
}
Create Record
POST /api/v1/entity-types/{slug}/records — Permission: {slug}.create or records.create
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
fields | object | No | Key-value pairs matching the entity type’s field keys |
Example Request
curl -X POST "https://your-domain.com/api/v1/entity-types/projects/records" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"fields": {
"project_name": "Mobile App",
"status": "Planning",
"budget": 25000
}
}'const response = await fetch("https://your-domain.com/api/v1/entity-types/projects/records", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
fields: {
project_name: "Mobile App",
status: "Planning",
budget: 25000
}
})
});
const data = await response.json();$ch = curl_init('https://your-domain.com/api/v1/entity-types/projects/records');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_TOKEN',
'Accept: application/json',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'fields' => [
'project_name' => 'Mobile App',
'status' => 'Planning',
'budget' => 25000,
],
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);import requests
response = requests.post(
"https://your-domain.com/api/v1/entity-types/projects/records",
headers={
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
},
json={
"fields": {
"project_name": "Mobile App",
"status": "Planning",
"budget": 25000
}
}
)
data = response.json()Example Response 201 Created
{
"data": {
"id": 6,
"entity_type_slug": "projects",
"display_name": "Mobile App",
"fields": {
"project_name": "Mobile App",
"status": "Planning",
"budget": 25000
},
"tags": [],
"created_at": "2025-03-20T14:00:00.000000Z",
"updated_at": "2025-03-20T14:00:00.000000Z"
}
}
Get Record
GET /api/v1/entity-types/{slug}/records/{id} — Permission: {slug}.view or records.view
Example Request
curl -X GET "https://your-domain.com/api/v1/entity-types/projects/records/5" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"const response = await fetch("https://your-domain.com/api/v1/entity-types/projects/records/5", {
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
});
const data = await response.json();$ch = curl_init('https://your-domain.com/api/v1/entity-types/projects/records/5');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_TOKEN',
'Accept: application/json',
],
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);import requests
response = requests.get(
"https://your-domain.com/api/v1/entity-types/projects/records/5",
headers={
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
)
data = response.json()Returns the same shape as a single item in the list response.
Update Record
PUT /api/v1/entity-types/{slug}/records/{id} — Permission: {slug}.edit or records.edit
Send only the fields you want to change.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
fields | object | No | Key-value pairs matching the entity type’s field keys |
Example Request
curl -X PUT "https://your-domain.com/api/v1/entity-types/projects/records/5" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"fields": {
"status": "Completed"
}
}'const response = await fetch("https://your-domain.com/api/v1/entity-types/projects/records/5", {
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
fields: {
status: "Completed"
}
})
});
const data = await response.json();$ch = curl_init('https://your-domain.com/api/v1/entity-types/projects/records/5');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_TOKEN',
'Accept: application/json',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'fields' => [
'status' => 'Completed',
],
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);import requests
response = requests.put(
"https://your-domain.com/api/v1/entity-types/projects/records/5",
headers={
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
},
json={
"fields": {
"status": "Completed"
}
}
)
data = response.json()Delete Record
DELETE /api/v1/entity-types/{slug}/records/{id} — Permission: {slug}.delete or records.delete
Example Request
curl -X DELETE "https://your-domain.com/api/v1/entity-types/projects/records/5" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"const response = await fetch("https://your-domain.com/api/v1/entity-types/projects/records/5", {
method: "DELETE",
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
});
// 204 No Content$ch = curl_init('https://your-domain.com/api/v1/entity-types/projects/records/5');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_TOKEN',
'Accept: application/json',
],
]);
$response = curl_exec($ch);
curl_close($ch);
// 204 No Contentimport requests
response = requests.delete(
"https://your-domain.com/api/v1/entity-types/projects/records/5",
headers={
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
)
# 204 No ContentReturns 204 No Content on success.
Was this article helpful?