> For the complete documentation index, see [llms.txt](https://v5docs.keyfax.biz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://v5docs.keyfax.biz/script-data/databoxes.md).

# Databoxes

A databox is a named value a script can read from and write to. Some come from your housing system, some from what the caller told you, and some are worked out along the way.

<figure><img src="/files/TF4bKRKW68IEyYZBarj9" alt="A databox open in the editor"><figcaption><p>A databox, showing the settings every databox has</p></figcaption></figure>

## Settings every databox has

**Group** — the toolbox group it appears under. Purely organisational, and worth keeping tidy: this is how anyone else will find it.

**Code** and **Name** — what it is known by. The Name is what you will search for; the Code is what scripts and merge fields refer to.

**Description** — what it holds and where the value comes from. The one field most worth filling in, because a databox with a cryptic name and no description is unusable by the next person.

**Source type** — where the value comes from. This is the setting that decides what the rest of the screen looks like:

| Source type                                                     | The value comes from                                         |
| --------------------------------------------------------------- | ------------------------------------------------------------ |
| Script data                                                     | The conversation itself — an answer, or something worked out |
| [SQL query](/script-data/sql-query-databoxes.md)                | A database                                                   |
| [HTTP request](/script-data/http-request-databoxes.md)          | A web service                                                |
| [System values](/script-data/system-values-and-company-data.md) | Keyfax itself — the date, the channel                        |
| Company data                                                    | A value your organisation sets once and uses everywhere      |
| Import / Export                                                 | Values passed in at the start, or carried out at the end     |

## Behaviour

**Mandatory** — the conversation cannot proceed without a value.

**Read-only** — a script may read it but never write to it. Right for anything sourced from another system, where writing would give a false impression that the change went somewhere.

**Allow empty** — an empty value is acceptable rather than a failure.

**Allow multiple records** — the databox may hold several rows rather than one value. This is what makes a [dynamic list](/scripts/questions/dynamic-list.md) possible, and it changes how expressions read the value: see [Row](/reference/expression-reference/text-expressions/row.md) and [RowMerge](/reference/expression-reference/text-expressions/rowmerge.md).

**Append on write** — a write adds to what is there rather than replacing it.

## Expressions

Underneath the source is the expressions grid: named expressions that transform the raw value into something a script or a message can use. See [Databox expressions](/script-data/databox-expressions.md).
