> ## Documentation Index
> Fetch the complete documentation index at: https://help.teable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Record Field Interface

<Note>Lookup field is not a specific field type. We can look up any type of field from a linked base. The type of a lookup field is determined by the original field in the linked base and has the isLookup property. Lookup fields cannot be edited.</Note>

<Note>
  All field return values may have `isMultipleCellValue: true` in certain cases:

  1. This occurs when the field is a lookup field. When the linked value allows multiple selections, the lookup field value will necessarily be an array.

  2. Fields can be configured - for example, user fields and link fields can be configured as single or multiple selection. In your code, you can use `field.isMultipleCellValue` to determine if a field accepts multiple values.
</Note>

<Note>
  Do not use field type to determine write permissions. Instead, use the isComputed property of the field.
</Note>

### 1. Number Field

* type: number
* Write type: `number`
* Return type:
  * `isMultipleCellValue: false`: `number`
  * `isMultipleCellValue: true`: `number[]`

Example:

```js theme={null}
// Write value
42

// Return value (isMultipleCellValue: false)
42

// Return value (isMultipleCellValue: true)
[42, 17, 99]
```

### 2. Single Line Text Field

* type: singleLineText
* Write type: `string`
* Return type:
  * `isMultipleCellValue: false`: `string`
  * `isMultipleCellValue: true`: `string[]`

Example:

```js theme={null}
// Write value
"Hello, Teable!"

// Return value (isMultipleCellValue: false)
"Hello, Teable!"

// Return value (isMultipleCellValue: true)
["Hello, Teable!", "Welcome", "Good day"]
```

### 3. Long Text Field

* type: longText
* Write type: `string`
* Return type:
  * `isMultipleCellValue: false`: `string`
  * `isMultipleCellValue: true`: `string[]`

Example:

```js theme={null}
// Write value
"This is a long text field that can contain multiple paragraphs..."

// Return value (isMultipleCellValue: false)
"This is a long text field that can contain multiple paragraphs..."

// Return value (isMultipleCellValue: true)
["This is a long text...", "Another long text...", "Yet another long text..."]
```

### 4. Single Select Field

* type: singleSelect
* Write type: `string` (option value)
* Return type:
  * `isMultipleCellValue: false`: `string`
  * `isMultipleCellValue: true`: `string[]`

Example:

```js theme={null}
// Write value
"Option A"

// Return value (isMultipleCellValue: false)
"Option A"

// Return value (isMultipleCellValue: true)
["Option A", "Option B", "Option C"]
```

### 5. Multiple Select Field

* type: multipleSelect
* Write type: `string[]` (array of option values)
* Return type: `string[]`

Example:

```js theme={null}
// Write value
["Red", "Blue", "Green"]

// Return value
["Red", "Blue", "Green"]
```

### 6. Link Field

* type: link
* Write type:
  * `isMultipleCellValue: false`: `{ id: string }`
  * `isMultipleCellValue: true`: `{ id: string }[]`
* Return type:
  * `isMultipleCellValue: false`: `{ id: string, title?: string }`
  * `isMultipleCellValue: true`: `{ id: string, title?: string }[]`

Example:

```js theme={null}
// Write value (isMultipleCellValue: false)
{ id: "rec123456" }

// Write value (isMultipleCellValue: true)
[{ id: "rec123456" }, { id: "rec789012" }]

// Return value (isMultipleCellValue: false)
{ id: "rec123456", title: "Related Record 1" }

// Return value (isMultipleCellValue: true)
[
  { id: "rec123456", title: "Related Record 1" },
  { id: "rec789012", title: "Related Record 2" }
]
```

### 7. Formula Field

* type: formula
* Write type: Cannot be written directly
* Return type: Depends on formula result, can be `string | number | boolean` or their array forms

Example:

```js theme={null}
// Return value (isMultipleCellValue: false)
42 // or "Result" or true

// Return value (isMultipleCellValue: true)
[42, 17, 99] // or ["Result1", "Result2"] or [true, false, true]
```

### 8. Attachment Field

To upload an attachment to an attachment field, use the dedicated API. For details, see the [Upload Attachment](/en/api-doc/record/upload-attachment) section.

* type: attachment

* Write type:
  ```ts theme={null}
  {
    id: string;
    name: string;
    path: string;
    token: string; // Unique identifier
    size: number; // File size in bytes
    mimetype: string; // File type
    presignedUrl?: string; // File preview/download URL
    width?: number; // Image width
    height?: number; // Image height
  }[]
  ```

* Return type:

```ts theme={null}
{
  id: string;
  name: string;
  path: string;
  token: string; // Unique identifier
  size: number; // File size in bytes
  mimetype: string; // File type
  presignedUrl?: string; // File preview/download URL
  width?: number; // Image width
  height?: number; // Image height
}[]
```

Example:

```js theme={null}
// Write value
[
  {
    name: "document.pdf",
    type: "application/pdf",
    token: "abc123",
    size: 1024000
  }
]

// Return value
[
  {
    id: "att123",
    name: "document.pdf",
    path: "/uploads/document.pdf",
    token: "abc123",
    size: 1024000,
    mimetype: "application/pdf",
    presignedUrl: "https://app.teable.ai/preview/document.pdf",
  },
  {
    id: "att456",
    name: "image.jpg",
    path: "/uploads/image.jpg",
    token: "def456",
    size: 2048000,
    mimetype: "image/jpeg",
    presignedUrl: "https://app.teable.ai/preview/image.jpg",
    width: 1920,
    height: 1080
  }
]
```

### 9. Date Field

* type: date
* Write type: `string` (ISO 8601 format)
* Return type:
  * `isMultipleCellValue: false`: `string` (ISO 8601 format)
  * `isMultipleCellValue: true`: `string[]` (ISO 8601 format)
    You can use `new Date().toISOString()` to get the ISO 8601 time format

Example:

```js theme={null}
// Write value
"2024-09-02T02:51:03.875Z"

// Return value (isMultipleCellValue: false)
"2024-09-02T02:51:03.875Z"

// Return value (isMultipleCellValue: true)
["2024-09-02T02:51:03.875Z", "2024-09-02T02:51:03.875Z"]
```

### 10. Created Time Field

* type: createdTime
* Write type: Cannot be written directly
* Return type:
  * `isMultipleCellValue: false`: `string` (ISO 8601 format)
  * `isMultipleCellValue: true`: `string[]` (ISO 8601 format)

Example:

```js theme={null}
// Return value (isMultipleCellValue: false)
"2024-09-02T02:51:03.875Z"

// Return value (isMultipleCellValue: true)
["2024-09-02T02:51:03.875Z", "2024-09-02T02:51:03.875Z"]
```

### 11. Last Modified Time Field

* type: lastModifiedTime
* Write type: Cannot be written directly
* Return type:
  * `isMultipleCellValue: false`: `string` (ISO 8601 format)
  * `isMultipleCellValue: true`: `string[]` (ISO 8601 format)

Example:

```js theme={null}
// Return value (isMultipleCellValue: false)
"2023-04-15T10:30:00Z"

// Return value (isMultipleCellValue: true)
["2023-04-15T10:30:00Z", "2023-04-16T14:45:00Z"]
```

### 12. Checkbox Field

* type: checkbox
* Write type: `boolean`
* Return type:
  * `isMultipleCellValue: false`: `boolean`
  * `isMultipleCellValue: true`: `boolean[]`

Example:

```js theme={null}
// Write value
true

// Return value (isMultipleCellValue: false)
true

// Return value (isMultipleCellValue: true)
[true, false, true]
```

### 13. Rollup Field

* type: rollup
* Write type: Cannot be written directly
* Return type: Depends on rollup configuration, can be `number | string` or their array forms

Example:

```js theme={null}
// Return value (isMultipleCellValue: false)
42 // or "Summary Result"

// Return value (isMultipleCellValue: true)
[42, 17, 99] // or ["Summary 1", "Summary 2"]
```

### 14. Rating Field

* type: rating
* Write type: `number`
* Return type:
  * `isMultipleCellValue: false`: `number`
  * `isMultipleCellValue: true`: `number[]`

Example:

```js theme={null}
// Write value
4

// Return value (isMultipleCellValue: false)
4

// Return value (isMultipleCellValue: true)
[4, 3, 5]
```

### 15. Auto Number Field

* type: autoNumber
* Write type: Cannot be written directly
* Return type:
  * `isMultipleCellValue: false`: `number`
  * `isMultipleCellValue: true`: `number[]`

Example:

```js theme={null}
// Return value (isMultipleCellValue: false)
42

// Return value (isMultipleCellValue: true)
[42, 43, 44]
```

### 16. User Field

* type: user
* Write type:
  * `isMultipleCellValue: false`: `{ id: string, title: string }`
  * `isMultipleCellValue: true`: `{ id: string, title: string }[]`
* Return type:
  * `isMultipleCellValue: false`: `{ id: string, title: string, email?: string, avatar?: string }`
  * `isMultipleCellValue: true`: `{ id: string, title: string, email?: string, avatar?: string }[]`

Example:

```js theme={null}
// Write value (isMultipleCellValue: false)
{ id: "user123", title: "John Doe" }

// Write value (isMultipleCellValue: true)
[
  { id: "user123", title: "John Doe" },
  { id: "user456", title: "Jane Smith" }
]

// Return value (isMultipleCellValue: false)
{
  id: "user123",
  title: "John Doe",
  email: "john@example.com",
  avatar: "https://example.com/avatar.jpg"
}

// Return value (isMultipleCellValue: true)
[
  {
    id: "user123",
    title: "John Doe",
    email: "john@example.com",
    avatar: "https://example.com/avatar1.jpg"
  },
  {
    id: "user456",
    title: "Jane Smith",
    email: "jane@example.com",
    avatar: "https://example.com/avatar2.jpg"
  }
]
```

### 17. Created By Field

* Write type: Cannot be written directly
* Return type:
  * `isMultipleCellValue: false`: `{ id: string, title: string, email?: string, avatar?: string }`
  * `isMultipleCellValue: true`: `{ id: string, title: string, email?: string, avatar?: string }[]`
    Example:

```js theme={null}
// Return value (isMultipleCellValue: false)
{
  id: "user123",
  title: "John Doe",
  email: "john@example.com",
  avatar: "https://example.com/avatar.jpg"
}

// Return value (isMultipleCellValue: true)
[
  {
    id: "user123",
    title: "John Doe",
    email: "john@example.com",
    avatar: "https://example.com/avatar1.jpg"
  },
  {
    id: "user456",
    title: "Jane Smith",
    email: "jane@example.com",
    avatar: "https://example.com/avatar2.jpg"
  }
]
```

### 18. Last Modified By Field

* Write type: Cannot be written directly
* Return type:
  * `isMultipleCellValue: false`: `{ id: string, title: string, email?: string, avatar?: string }`
  * `isMultipleCellValue: true`: `{ id: string, title: string, email?: string, avatar?: string }[]`

Example:

```js theme={null}
// Return value (isMultipleCellValue: false)
{
  id: "user123",
  title: "John Doe",
  email: "john@example.com",
  avatar: "https://example.com/avatar.jpg"
}

// Return value (isMultipleCellValue: true)
[
  {
    id: "user123",
    title: "John Doe",
    email: "john@example.com",
    avatar: "https://example.com/avatar1.jpg"
  },
  {
    id: "user456",
    title: "Jane Smith",
    email: "jane@example.com",
    avatar: "https://example.com/avatar2.jpg"
  }
]
```
