Taxonomies
[API Docs]
Taxonomies provide a labeling and classification system for organizing entities, relations, and files across the epilot platform. They are managed through the Label Builder in the epilot UI.

Taxonomy Typesโ
The system supports three taxonomy types, distinguished by slug prefix:
| Type | Prefix | Purpose |
|---|---|---|
| Entity Labels | _schema_ | Classify entities by business purpose or status |
| Relation Labels | _relation_ | Classify the nature of entity relationships |
| File Collections | _system_ | Organize documents and files into groups |
Entity Labelsโ
Entity labels categorize entities within a schema. Use them to organize by customer type, status, workflow stage, or any business-relevant classification.
System Labelsโ
These built-in labels are locked and cannot be modified. The platform assigns them automatically during certain operations:
| Label | Assigned When |
|---|---|
__hidden | Entity is hidden from standard views |
copy | Entity was duplicated |
merged | Entity resulted from a merge operation |
composite | Entity is a composite (e.g. composite price) |
automation | Entity was created by an automation |
bulk-generated | Entity was created through a bulk operation |
Purposesโ
Purposes are a standalone taxonomy family (slug: purpose) that define the business intent of an entity. Beyond classification, purposes also control visibility of attributes and attribute groups within the entity detail view.
Relation Labelsโ
Relation labels add context to the links between entities, enabling filtering and business logic based on relationship type.
Predefined Relation Labelsโ
Address relations
_relation_address:billingโ Billing address_relation_address:deliveryโ Delivery address
Account relations
_relation_account:customerโ Customer account_relation_account:installerโ Installer account_relation_account:plannerโ Planner account_relation_account:onsite_contactโ On-site contact_relation_account:architectโ Architect account_relation_account:supplierโ Supplier account
Contact relations
_relation_contact:customerโ Customer contact_relation_contact:installerโ Installer contact_relation_contact:plannerโ Planner contact_relation_contact:onsite_contactโ On-site contact_relation_contact:architectโ Architect contact_relation_contact:supplierโ Supplier contact
File Collectionsโ
File collections organize documents within epilot. Two collection scopes exist:
- Global collections โ shared across all users and entities (e.g. company policies, standard contracts)
- User collections โ personal to a specific user within a schema context (e.g. working documents)
Working with Taxonomiesโ

Label Structureโ
Every taxonomy label has three fields:
{
"id": "uuid",
"slug": "_schema_contact:residential",
"name": "Residential"
}
Permissionsโ
Taxonomy operations require specific permissions:
| Permission | Allows |
|---|---|
label_builder:create | Create taxonomies and classifications |
label_builder:edit | Update existing labels |
label_builder:delete | Delete labels |
Error Handlingโ
| Error | Status | Cause |
|---|---|---|
TaxonomyNotFoundError | 404 | Taxonomy slug does not exist |
TaxonomyAlreadyExistsError | 409 | Taxonomy with this slug already exists |
TaxonomyValidationError | 400 | Invalid request payload |
TaxonomyInUseError | 400 | Cannot delete a taxonomy still in use |
Bulk Operationsโ
Create, update, and delete classifications in a single request:
{
"create": [
{ "id": "uuid", "name": "New Label", "slug": "new-label" }
],
"update": [
{ "id": "existing-id", "name": "Updated Name" }
],
"delete": [
{ "id": "id-to-delete" }
]
}
SDK Exampleโ
import { getEntityClient } from '@epilot/entity-client';
const client = getEntityClient();
// Create a taxonomy
const taxonomy = await client.createTaxonomy({}, {
slug: 'project-status',
name: 'Project Status',
type: 'entity',
enabled: true
});
// Add classifications
await client.updateClassifications({
taxonomySlug: 'project-status'
}, {
create: [
{ id: 'uuid-1', name: 'Planning', slug: 'planning' },
{ id: 'uuid-2', name: 'In Progress', slug: 'in-progress' },
{ id: 'uuid-3', name: 'Completed', slug: 'completed' }
]
});
// Search classifications
const results = await client.searchClassifications({
taxonomySlug: 'project-status',
query: 'progress',
include_archived: 'false'
});