Field types reference

Every field type, how it is stored, its type-specific configuration, the aliases the API accepts, and the common field options.

A field is a record in the fields system collection with a type, common options and a fieldTypeConfig JSON object for type-specific settings. The canonical type names are the upper-case values below; the API, CLI and MCP tools also accept the lower-case aliases.

Type table#

TypeStored asNotes
STRINGTEXTDefault text type. Aliases: text, string.
TEXTTEXTLong text. API/CLI/MCP only.
RICH_TEXTTEXTHTML-formatted text rendered with a rich editor.
INTEGERINTEGER32-bit. API/CLI/MCP only — the console’s Number is DOUBLE.
LONGBIGINT64-bit. API/CLI/MCP only.
DOUBLEDOUBLE PRECISIONAlias number in the console.
BOOLEANBOOLEAN
DATEDATEISO YYYY-MM-DD.
DATETIMETIMESTAMPISO 8601.
JSONJSONBArbitrary JSON. Aliases object, array.
ARRAYJSONBJSON array. API/CLI/MCP only.
PICKLISTVARCHAR(255)One value from a field-level or global picklist. See Picklists.
MULTI_PICKLISTTEXT[]Several values from a picklist.
CURRENCYNUMERIC(18,2) + <field>_currency_code VARCHAR(3)Amount plus ISO 4217 code companion column.
PERCENTNUMERIC(8,4)
AUTO_NUMBERVARCHAR(100)Generated from a database sequence (autoNumberSequenceName) with a format in fieldTypeConfig.
PHONEVARCHAR(40)
EMAILVARCHAR(320)
URLVARCHAR(2048)
ENCRYPTEDBYTEAAES-256-GCM with a per-tenant derived key; decrypted on read for authorized callers.
EXTERNAL_IDVARCHAR(255) + unique indexIdentifier from another system; unique per collection.
GEOLOCATIONDOUBLE PRECISION + <field>_longitudeLatitude in the primary column, longitude in the companion column.
VECTORvector(N) (pgvector)Embedding for semantic search. fieldTypeConfig.dimension 1–16000 (default 1536); optional embeddingSource names a text field to embed on write. An HNSW cosine index is created automatically. API/CLI/MCP only.
LOOKUPVARCHAR(36) + FK ON DELETE SET NULLOptional relationship. See Relationships.
MASTER_DETAILVARCHAR(36) + FK ON DELETE CASCADE, NOT NULLRequired, owning relationship. Alias reference.
FORMULAno columnComputed on read from fieldTypeConfig.expression; returnType TEXT, NUMBER or BOOLEAN. See Formula fields.
ROLLUP_SUMMARYno columnCOUNT/SUM/AVG/MIN/MAX over a master-detail child collection, computed on read. Also computed at write time for any validation rule that references it.

REFERENCE still deserialises for compatibility and is treated as MASTER_DETAIL; do not create new fields with it.

Aliases accepted on write#

text→STRING, number→DOUBLE, object/array→JSON, reference→MASTER_DETAIL, plus every canonical name in lower case. The CLI additionally maps number→INTEGER and decimal→DOUBLE; check kelta fields add --help.

Console vs API#

The field editor in the console offers 22 types: string number boolean date datetime json master_detail lookup picklist multi_picklist currency percent auto_number phone email url rich_text encrypted external_id geolocation formula rollup_summary. TEXT, INTEGER, LONG, ARRAY and VECTOR are created through the API, CLI or MCP.

Common field options#

AttributeEffect
name^[a-zA-Z][a-zA-Z0-9_]*$. Reserved: id, createdAt, updatedAt, createdBy, updatedBy, tenantId, type, attributes, relationships.
displayName, descriptionUI label and one-line help (the description is exposed by the schema endpoint and OpenAPI).
requiredNOT NULL; enforced by validation before the database sees it.
uniqueConstraintSingle-column unique constraint; violations answer 409. Composite constraints: Validation rules and unique constraints.
indexedMaintain a B-tree index on the column.
defaultValueApplied when the write supplies no value.
constraintsJSON field-level checks, enforced on every write: min/max (value on numbers, CURRENCY, PERCENT; length on text types), minLength, maxLength, minValue, maxValue, pattern. email, url, and min/max on DATE/DATETIME are accepted but not enforced. See Field constraints.
searchableInclude the value in the collection’s full-text index. See Search and attachments.
trackHistoryRecord old/new values in field-history. See Record history.
fieldOrderOrdinal position in the collection.
fieldTypeConfigType-specific JSON — currency code, formula expression, roll-up config, vector dimension, masking ({"masking": {"type": "FULL" | "LAST4" | "EMAIL" | "CUSTOM"}} on string-typed fields; see Field-level security and data masking).

Adding and changing fields#

kelta fields add invoices --name amount --type currency --required
kelta fields update <fieldId> --display-name "Invoice amount"
kelta fields remove <fieldId> --yes    # drops the column and its data

Adding a field adds a column; the change is broadcast to every pod like a collection change. Changing a field’s type after it has data is not a generic update — use the schema migration planner (Setup → Platform → Migrations) which computes and applies a typed migration. Removing a field drops the column and its data.

Maskable types (string, rich_text, email, phone, url, encrypted, external_id) accept a masking configuration; numbers and dates use HIDDEN field permissions instead.

Edit this page on GitHub