Know what each field type holds.
Every field has a type. The type decides what you can write to it, how a value is checked, and what happens to existing values when the type changes.
Types and their values
| Type | Example value to send | What a write accepts |
|---|---|---|
text | "Northbeam" | Any text. |
number | 1250.5 | A JSON number, or text in the field's own display shape, such as "$1,250.50" or "12.5%". |
boolean | true | JSON true or false, or the text "true" or "false". |
date | "2026-10-21" | A YYYY-MM-DD date. A field that keeps the time takes an RFC 3339 date-time with any offset, such as "2026-10-21T14:03:12Z". |
url | "https://northbeam.io/pricing" | An http or https address on a public domain. A missing scheme is read as https. |
email | "[email protected]" | One address. A mailto: prefix is dropped and the domain is lowercased. |
phone | "+34 612 345 678" | Any text. Spaces and dashes are tidied; the number itself is not rewritten. |
single_select | "Qualified" | An option's name or id, or {"id": "..."}. |
multi_select | ["SaaS", "Series B"] | A list of option names or ids. |
json | {"employees": 120} | Any JSON value. |
formula | None | Nothing: the value is computed from the formula. |
enrichment | None | Nothing: enrichment runs fill it. |
A value that does not fit the field's type is refused with 422 and code
cell_invalid. Send null to empty a cell. How each value reads back is shown
on the record operations in the API reference.
Display options, such as a number's currency or decimals or a date's style, change only how a value is shown. They never rewrite stored values.
Changing a field's type
Changing a type converts every value in the field, with the same rules a CSV import uses. Each value is first read as the text you see in the grid, then read again as the new type. A value that does not fit is emptied. Nothing is emptied silently: the change reports how many values convert and how many are emptied before you confirm it, and the table history keeps the old values, so undo brings every one of them back.
| From | To | What happens |
|---|---|---|
| Any type | text | Every value keeps its text: 1250.5 becomes "1250.5", a date becomes "2026-10-21", true becomes "true". |
| Any type | number | Plain numbers convert, and so does text in the field's own display shape, such as $1,250.50. Text such as about 40, and a whole number longer than 15 digits, is emptied. A leading zero is dropped: 007 becomes 7. |
| Any type | date | ISO dates and date-times convert, and so do dates in the field's display style. Anything else is emptied. |
| Any type | boolean | true, false, yes, no, 1 and 0 convert. Anything else is emptied. |
| Any type | url, email | A value that is a valid address converts, tidied as on write. Anything else is emptied. |
| Any type | phone, json | Every value converts. |
| Any type | single_select, multi_select | Text matching an option name converts to that option. Text matching no option is emptied. |
single_select or multi_select | Another select | Options are matched by option, so renamed options keep their values. A value whose option is gone is emptied. A multi-select becoming a single select keeps its first option. |
single_select or multi_select | Any other type | The option names convert as text. |
formula, enrichment | Any type | Not available. These fields keep their type. |
| Any type | formula, enrichment | Not available. Create a new field instead. |
Blank values stay blank.
Changing a type through the API
Today Update a field changes a field's name, and its options within the
same type: for example a number's format, or a select's options. A request that
changes the type itself is refused with 422 and code
field_type_change_unsupported. Change the type in the app, where you see the
conversion before you confirm it.