oikapi supports a broad set of field types covering all common enterprise data needs, plus computed types and semantic validation types.
Type Use Case textGeneral text, names, descriptions richtextFormatted long-form content (headings, lists, links) jsonStructured data, flexible schemas enumFixed value sets (status, priority) multiselectMultiple values from a set uuidUnique identifiers
Type Use Case numberFloating-point calculations integerWhole numbers, counts decimalMoney, precise arithmetic (configurable precision) booleanTrue/false flags
Caution
Use decimal instead of number for financial calculations. The decimal type provides configurable precision and scale, avoiding floating-point rounding errors.
decimal fields are encoded as JSON strings on the wire ("1250.00"), both when read and written — never a JSON number — specifically to avoid the precision loss a float64 round-trip would introduce. A client that assumes every numeric-looking field decodes as a number will get a type mismatch on decimal fields; check for a string. Plain number/integer fields decode as ordinary JSON numbers.
Type Use Case dateDates without time datetimeFull timestamps with timezone timeTime of day durationTime spans, durations
These types store text but apply built-in validation:
Type Validation Use Case emailEmail format Contact emails phonePhone format Phone numbers urlURL format Web links colorColor format (hex, rgb, or hsl) Color values
Type Use Case referenceLink to a record in another table reference_arrayMany-to-many relationships fileSingle file attachment file_arrayMultiple file attachments
See References & Relations for details on foreign keys, facades, and on-delete behavior.
Type Use Case arrayGeneric arrays (any element type, stored as JSONB) text_arrayExplicit text arrays integer_arrayLists of integers decimal_arrayLists of decimal values uuid_arrayLists of UUIDs
Type Description formulaCalculate from same-record fields lookupPull value from related record rollupAggregate from child records graph_rollupAggregate over a relationship graph (e.g. impact count, dependency depth) counterAuto-incrementing with prefix
See Computed Fields and Counter Fields for details.
Type Use Case recurrenceA recurring schedule rule (RFC 5545) that generates occurrences
A recurrence field stores a repeat rule rather than a list of dates – the platform materializes individual occurrences from it.
Property Description requiredField must have a value uniqueValues must be unique read_onlySet on create, immutable after hiddenExcluded from UI, accessible via API transientAccepted via API but not stored (for rule processing) searchableIncluded in global search conditionsDynamic visibility and requirement rules (in config)
Fields can have dynamic visibility and requirement rules via the conditions config. When a condition with action hide triggers, the field is hidden and never required. When a condition with action require triggers, the field becomes required regardless of its base required setting. See Fields API for the full list of supported operators and actions.
Some type conversions are supported when modifying existing fields. Conversions are categorized as:
Safe – No data loss (e.g., integer → decimal)
Conditional – May fail depending on data (e.g., text → integer)
Blocked – Not supported (e.g., richtext → text)