Skip to main content

Custom Field Data Types

Types for custom fields — tenant-defined metadata on governance entities.

Enumerations​

Both SDKs export these as named types, so you get autocomplete when creating or updating a definition. Responses carry them as plain strings, so a value added to the platform later widens a response rather than breaking a read.

TypeValues
CustomFieldTypestring, number, datetime, user
CustomFieldElementTypeinput, checkbox, select, datepicker

CustomFieldDefinition​

What a custom field is. Defined once per tenant and applied to entities.

FieldTypeDescription
idstringUnique identifier for the custom field.
namestringDisplay name.
typestringValue type: string, number, datetime, or user.
element_typestringInput control: input, checkbox, select, or datepicker.
optionsstring[]Permitted values, for select fields. Empty when unrestricted.
multiplebooleanWhether the field accepts more than one value.
metadataobjectAdditional configuration, such as min and max for a number.
entity_type_idsstring[]Entity types this definition applies to. An empty list means it applies to all of them.

CustomFieldCreate​

The request payload for defining a new custom field.

FieldTypeDescription
namestringRequired. Display name.
typeCustomFieldType | nullstring, number, datetime, or user. Defaults to string.
element_typeCustomFieldElementType | nullinput, checkbox, select, or datepicker. Defaults to input.
optionsstring[] | nullPermitted values, for select fields.
multipleboolean | nullWhether the field accepts more than one value.
metadataobject | nullAdditional configuration, such as min and max.
entity_type_idsstring[] | nullEntity types the field applies to. Omit it, or pass an empty list, for every entity type.

CustomFieldUpdate​

The request payload for changing a definition. Every field is optional; only the attributes supplied are changed. Fields are as CustomFieldCreate, except that name is optional and entity_type_ids is add-only — entity types can be added to a definition but not removed from it.

CustomFieldValue​

One entity's value for a definition.

FieldTypeDescription
custom_field_idstringThe custom field this value belongs to.
namestring | nullDisplay name of the custom field.
valuestring | number | boolean | string[] | nullThe current value. null when unset.
entity_idstring | nullThe entity holding this value.
definitionCustomFieldDefinition | nullThe definition this value belongs to.

CustomFieldValueUpdate​

The request payload for setting a value.

FieldTypeDescription
custom_field_idstring | nullSet one field, by ID.
namestring | nullSet one field, by name.
valuesobject | nullSet several fields at once — a map of field name to value.
valuestring | number | boolean | string[] | nullThe value, when setting one field. A list for multi-value fields; null clears it. Not used with values.

Exactly one of custom_field_id, name or values is required; anything else is a 422.

The response is always a list, whether you set one field or several.

With values, every name is resolved against the entity's definitions before any write happens, so an unknown or ambiguous name fails the request with nothing applied. Once writing starts the fields go one at a time, so a failure there — a value outside a field's options, say — leaves the earlier fields written.

How values are typed​

A value's shape on read follows the definition, not what you sent:

DefinitionYou sendYou read back
type: string, multiple: false"Finance""Finance"
type: string, multiple: true["Finance", "Legal"]["Finance", "Legal"]
type: number2.3 or "2.3"2.3
type: datetimean ISO 8601 stringthe same string
type: user, multiple: falsea user IDthe user ID
type: user, multiple: truea list of user IDsthe list
any, no value set—null

Values are stored as text and coerced on read, so a number field returns a number rather than a string. Sending a value that does not match the definition — a non-numeric string for a number field, or a value outside options for a select — is rejected with a 422.

Field names are not unique​

The only uniqueness constraint on a custom field name is a legacy one that is being retired, so a definition applying to every entity type and one targeted at a specific type can share a name. When you address a field by name, it is resolved against the definitions that apply to that one entity, and an ambiguous name is rejected rather than silently resolved to one candidate. The error lists the candidate IDs so you can pass custom_field_id instead.