Custom Fields
Custom fields extend InLoox entities with user-defined properties. The API exposes three related entity sets — CustomField for reading and writing values, CustomFieldDefinition for managing field schemas, and CustomFieldPermission for controlling access — plus Dynamic endpoints that surface custom field values directly alongside standard entity properties.
CustomField
The CustomField entity represents a single custom field value attached to an entity instance.
CustomField uses a composite key of Name and ObjectId. Two URL notations are supported for accessing individual values: parenthesis notation and slash notation. Both behave identically.
Properties
| Property | Type | Description |
|---|---|---|
ObjectId | guid | The entity instance the custom field belongs to. |
Name | string | The custom field column name (matches ColumnName in CustomFieldDefinition). |
Value | string | The field value, serialized as a string. |
Type | string | Data type of the value (e.g., Text, Number, Boolean, Date). |
Endpoints
Get value (parenthesis notation)
/odata/CustomField(Name={keyName},ObjectId={keyObjectId})Retrieve a single custom field value using parenthesis notation.
| Parameter | Type | Required | Description |
|---|---|---|---|
keyName | string | ✅ | The custom field column name. |
keyObjectId | guid | ✅ | The ID of the entity instance. |
Update value (parenthesis notation)
/odata/CustomField(Name={keyName},ObjectId={keyObjectId})Update a custom field value using parenthesis notation.
| Parameter | Type | Required | Description |
|---|---|---|---|
keyName | string | ✅ | The custom field column name. |
keyObjectId | guid | ✅ | The ID of the entity instance. |
{
"Value": "Updated value"
}
Get value (slash notation)
/odata/CustomField/Name={keyName},ObjectId={keyObjectId}Retrieve a single custom field value using slash notation.
| Parameter | Type | Required | Description |
|---|---|---|---|
keyName | string | ✅ | The custom field column name. |
keyObjectId | guid | ✅ | The ID of the entity instance. |
Update value (slash notation)
/odata/CustomField/Name={keyName},ObjectId={keyObjectId}Update a custom field value using slash notation.
| Parameter | Type | Required | Description |
|---|---|---|---|
keyName | string | ✅ | The custom field column name. |
keyObjectId | guid | ✅ | The ID of the entity instance. |
{
"Value": "Updated value"
}
Batch update
/CustomField/BatchUpdateBatch update multiple custom field values in a single request.
[
{ "Name": "CustomField_Priority", "ObjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "Value": "High" },
{ "Name": "CustomField_Region", "ObjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "Value": "EMEA" }
]
CustomFieldDefinition
The CustomFieldDefinition entity describes the schema of a custom field — its name, data type, default value, display rules, and more.
Properties
| Property | Type | Description |
|---|---|---|
CustomFieldDefinitionId | guid | Unique identifier of the definition. |
ColumnName | string | Internal column identifier (used as the key in CustomField.Name). |
DisplayName | string | User-facing label shown in the UI. |
TableName | string | Entity table this field belongs to, e.g. "Project", "TaskItem". |
OrdinalPosition | int32 | Display order among custom fields for the same table. |
ColumnType | string | Data type of the field: Text, Number, Boolean, Date, DropDown. |
StringValue | string | Default string value. |
IntValue | int32 | Default integer value. |
BoolValue | boolean | Default boolean value. |
DecimalValue | decimal | Default decimal value. |
DateTimeValue | DateTimeOffset | Default date/time value. |
WriteProtectionEnabled | boolean | Whether the field is read-only for non-admin users. |
DisplayRuleField | string | Field name that controls visibility of this custom field. |
DisplayRuleExpression | string | Expression that determines when this custom field is visible. |
CurrencySymbol | string | Currency symbol for monetary fields. |
WarningIfEmpty | boolean | Show a warning indicator when the field value is empty. |
AllowAddNewItem | boolean | Allow users to add new items to a DropDown field's option list. |
Endpoints
List all definitions
/odata/CustomFieldDefinitionRetrieve all custom field definitions.
Count definitions
/odata/CustomFieldDefinition/$countReturn the total number of custom field definitions.
Get single definition
/odata/CustomFieldDefinition({key})Retrieve a single custom field definition by ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The CustomFieldDefinitionId. |
Create definition
/odata/CustomFieldDefinitionCreate a new custom field definition.
{
"ColumnName": "CustomField_Priority",
"DisplayName": "Priority",
"TableName": "Project",
"ColumnType": "DropDown",
"OrdinalPosition": 1,
"AllowAddNewItem": true
}
Update definition
/odata/CustomFieldDefinition({key})Update an existing custom field definition.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The CustomFieldDefinitionId. |
{
"DisplayName": "Project Priority",
"WriteProtectionEnabled": true
}
Delete definition
/odata/CustomFieldDefinition({key})Delete a custom field definition.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The CustomFieldDefinitionId. |
Deleting a definition removes the schema only. Existing CustomField values referencing the deleted column may become orphaned.
CustomFieldPermission
The CustomFieldPermission entity controls which users or roles can read or write specific custom fields.
Properties
| Property | Type | Description |
|---|---|---|
CustomFieldPermissionId | guid | Unique identifier of the permission. |
CustomFieldDefinitionId | guid | ID of the associated field definition. |
SubjectType | int32 | Type of the permission subject (e.g., user, role). |
SubjectId | guid | ID of the subject (user ID or role ID). |
RoleType | int32? | Role type (optional, for role-based permissions). |
Endpoints
List all permissions
/odata/CustomFieldPermissionRetrieve all custom field permissions.
Count permissions
/odata/CustomFieldPermission/$countReturn the total number of custom field permissions.
Get single permission
/odata/CustomFieldPermission({key})Retrieve a single custom field permission by ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The permission ID. |
Create permission
/odata/CustomFieldPermissionCreate a new custom field permission.
Update permission
/odata/CustomFieldPermission({key})Update an existing custom field permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The permission ID. |
Delete permission
/odata/CustomFieldPermission({key})Delete a custom field permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The permission ID. |
Get blocked fields for entity
/odata/CustomFieldPermission/GetBlockedFieldsForEntity(entityType={entityType})Retrieve the list of custom fields blocked for a specific entity type.
| Parameter | Type | Required | Description |
|---|---|---|---|
entityType | string | ✅ | The entity type to query, e.g. "Project", "TaskItem". |
Dynamic Endpoints
Dynamic endpoints expose custom field values alongside standard entity properties in a single flat result set. Instead of querying CustomField separately and joining by ObjectId, you can read and filter custom field data directly on the entity.
Available dynamic entity sets
| Dynamic Endpoint | Base Entity |
|---|---|
/odata/DynamicProject | Project |
/odata/DynamicTaskItem | TaskItem |
/odata/DynamicBudget | Budget |
/odata/DynamicLineItem | LineItem |
/odata/DynamicTimeEntry | TimeEntry |
/odata/DynamicContact | Contact (see Contacts) |
/odata/DynamicProjectRetrieve projects with custom field columns included.
/odata/DynamicTaskItemRetrieve task items with custom field columns included.
/odata/DynamicBudgetRetrieve budgets with custom field columns included.
/odata/DynamicLineItemRetrieve line items with custom field columns included.
/odata/DynamicTimeEntryRetrieve time entries with custom field columns included.
Custom field column naming
Custom field columns appear with a CustomField_ prefix followed by the ColumnName from the corresponding CustomFieldDefinition. For example, a definition with ColumnName = Priority appears as CustomField_Priority in the dynamic response.
These prefixed columns can be used in all standard OData query options:
| Query Option | Example |
|---|---|
$select | $select=Name,CustomField_Priority |
$filter | $filter=CustomField_Priority eq 'High' |
$orderby | $orderby=CustomField_Priority asc |
Example: filter projects by a custom field
GET /odata/DynamicProject?$filter=CustomField_Priority eq 'High'
GET /odata/DynamicProject?$select=ProjectId,Name,CustomField_Priority,CustomField_Region&$filter=CustomField_Region eq 'EMEA'&$orderby=CustomField_Priority asc
Dynamic endpoints are read-only views. To update custom field values, use the CustomField PATCH or BatchUpdate endpoints described above.