Custom fields
Typed fields you define yourself and attach to core records, then fill in on forms, load through imports, and filter lists by.
A custom field is an extra piece of information you decide a record should carry — a delivery zone on a destination, a fuel-card number on a vehicle, a gate code on a stop. You define it once for an entity, and from then on it appears on that entity’s forms, in its import template, as an optional list column, and as something you can filter by.
Who can do this
- Role
- Administrators
- Permission
custom-fields:readcustom-fields:write
Destinations, origins and tasks accept custom fields for every tenant. The other entities are behind the custom_fields_expansion feature, and the settings page only lists the ones your tenant is entitled to.
Behind the custom_fields_expansion feature flag. Ask support to enable it for your organisation.
Define a field
Fields are defined per entity, in one place, and take effect immediately.
- 1
Open the custom fields area
Customization → Data & language → Custom FieldsThe entity list is server-driven: it shows exactly the entities your tenant can attach fields to, labelled with your own terminology.
- 2
Give the field a label and a type
The label is what people see. Cooriroo derives a key from it — lowercase, underscores, starting with a letter — and that key is what the API, the import template and the filters use.
- 3
For a select field, list its options
Options are required for a select field and rejected for every other type. Removing an option later leaves records that already hold it readable and filterable — it stops being offered, it does not vanish.
- 4
Archive rather than delete when a field falls out of use
An archived field disappears from forms and filters while the values already stored stay legible, which matters for reports written months later.
Field types
| Type | What it holds | Stored as |
|---|---|---|
| Text | Free-form text | Whatever was typed, trimmed |
| Number | A decimal number | A canonical decimal string |
| Date | A calendar date | ISO YYYY-MM-DD |
| Select | One value from the field’s options | The chosen option |
| Boolean | A yes-or-no flag | true or false |
Which records can carry fields
Available to every tenant: destinations, origins and tasks.
Behind the expansion feature: vehicles, trips, trip stops, users, work orders, inspections, shifts, maintenance logs and service schedules.
Drivers are a special case worth knowing. A driver is a user, so a driver’s custom fields are defined on the User entity, not a separate driver one — which is also why the driver import template picks up the user fields.
Filtering a list by a custom field
List pages that support custom fields show a filter control once you have at least one active definition for that entity. You pick a field, pick an operator, and give it a value; several filters combine with AND. Which operators are offered depends on the field’s type — there is no "greater than" on a text field because there is no order to compare against.
| Operator | Matches when | Field types |
|---|---|---|
| Equals | The value is exactly the operand | All |
| Not equals | The value differs, or the field is unset | All |
| Contains | The value contains the text, ignoring case | Text, select |
| Does not contain | The text is absent, or the field is unset | Text, select |
| Starts with | The value begins with the text | Text, select |
| Ends with | The value ends with the text | Text, select |
| Is any of | The value is one of a list you give | All but boolean |
| Is none of | The value is in none of the list, or is unset | All but boolean |
| Greater than | The value is above the operand | Number, date |
| Greater or equal | The value is at or above the operand | Number, date |
| Less than | The value is below the operand | Number, date |
| Less or equal | The value is at or below the operand | Number, date |
| Between | The value lies within two bounds, inclusive | Number, date |
| Is set | The field is present, whatever its value | All |
| Is not set | The field is absent from the record | All |
| Is empty | The field is present but blank | All but boolean |
| Is not empty | The field is present and not blank | All but boolean |
Where else fields show up
- Import templates: every active field becomes a column, keyed by its slug and labelled with its label. Blank cells never clear a stored value, so a partial file is safe.
- List tables: a summary badges column plus one hidden-by-default column per field, which you turn on from the Columns control.
- The trip PDF report: trip fields are resolved to their labels, including archived ones, so an old report still reads correctly.
Limits
- 20 fields per record by default; your plan may set a different cap per entity.
- 100 definitions per entity type.
- Keys: 60 characters, matching
^[a-z][a-z0-9_]*$. Labels: 100 characters. - Values: 500 characters.
- Select options: 100 per field.
- Filtering: at most 25 custom-field filters on one request, and at most 50 values in an "is any of" or "is none of" list.
Terminology
Your organisation can rename these. If your screens say something else, this is what they mean here.
- Destination
- The custom fields settings page labels each entity with your term, so this row reads "Client" or "Site" if that is what you call it.Rename it in Settings → Terminology
- User
- Deliberately not renamed with your driver term: user fields cover admins as well, and calling them driver fields would mislead.Rename it in Settings → Terminology