Skip to main content

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.

Label Builder

Taxonomy Typesโ€‹

The system supports three taxonomy types, distinguished by slug prefix:

TypePrefixPurpose
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:

LabelAssigned When
__hiddenEntity is hidden from standard views
copyEntity was duplicated
mergedEntity resulted from a merge operation
compositeEntity is a composite (e.g. composite price)
automationEntity was created by an automation
bulk-generatedEntity 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 Builder Details

Label Structureโ€‹

Every taxonomy label has three fields:

{
"id": "uuid",
"slug": "_schema_contact:residential",
"name": "Residential"
}

Permissionsโ€‹

Taxonomy operations require specific permissions:

PermissionAllows
label_builder:createCreate taxonomies and classifications
label_builder:editUpdate existing labels
label_builder:deleteDelete labels

Error Handlingโ€‹

ErrorStatusCause
TaxonomyNotFoundError404Taxonomy slug does not exist
TaxonomyAlreadyExistsError409Taxonomy with this slug already exists
TaxonomyValidationError400Invalid request payload
TaxonomyInUseError400Cannot delete a taxonomy still in use

Bulk Operationsโ€‹

Create, update, and delete classifications in a single request:

POST /v1/entity/taxonomies/{taxonomySlug}/classifications
{
"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'
});