Table Operations with REST API

Contents

Overview

Tables (External link) are powerful field types that help users view multiple data entries at a glance. Although Tables are easy to control via the browser's UI, they can be tricky to manage when adjusting the data with REST API. This article introduces techniques for updating Table fields with the REST API.

Prepare a Sample App

Create an App with the following fields and settings.

Field Type Field Name Field Code Notes
Table To Do Table to_do_table Place the following Text and Radio Button fields inside.
Text Task table_task
Radio Button Status table_radio Choices: Not Started, In Progress, Done

The form should look like the following image:

After creating the App, add some sample data.

Retrieve the Record data and Check the Table Structure

The Get Record or Get Records REST APIs can be used to check how the Table data is structured.
Understanding the structure will help make later REST API operations with Tables clearer.

The following image shows a sample response from the Get Record API.

A detailed example of the response is as follows. Record values are returned in JSON format.
Notice how, that for every row of the table to_do_table, there is an id property. This id is the unique row ID for the row of the Table. The behavior of the REST APIs that are later introduced in this article, changes depending on whether row IDs are included in request.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{
  "record": {
    "Record_number": {
      "type": "RECORD_NUMBER",
      "value": "2"
    },
    "to_do_table": {
      "type": "SUBTABLE",
      "value": [
        {
          "id": "9594",
          "value": {
            "table_task": {
              "type": "SINGLE_LINE_TEXT",
              "value": "Create article B"
            },
            "table_status": {
              "type": "RADIO_BUTTON",
              "value": "Not Started"
            }
          }
        },
        {
          "id": "9592",
          "value": {
            "table_task": {
              "type": "SINGLE_LINE_TEXT",
              "value": "Create article A"
            },
            "table_status": {
              "type": "RADIO_BUTTON",
              "value": "Not Started"
            }
          }
        }
      ]
    },
    "Updated_by": {
      "type": "MODIFIER",
      "value": {
        "code": "user1",
        "name": "User 1"
      }
    },
    "Created_by": {
      "type": "CREATOR",
      "value": {
        "code": "user1",
        "name": "User 1"
      }
    },
    "$revision": {
      "type": "__REVISION__",
      "value": "1"
    },
    "Updated_datetime": {
      "type": "UPDATED_TIME",
      "value": "2026-08-03T08:37:00Z"
    },
    "Created_datetime": {
      "type": "CREATED_TIME",
      "value": "2026-08-03T08:37:00Z"
    },
    "$id": {
      "type": "__ID__",
      "value": "2"
    }
  }
}

Update Table Data

Table rows can be added, updated, and deleted using REST API. These operations all use the Update Record and Update Records API.

The format of the record object in the request changes depending on the operation.
The following sections explain each case.

Add a Row to the Table

The following sample request adds a new row at the beginning of the Table.
As the other rows don't need to be modified, just their row IDs are stated in the request.

Sample data to add:

  • Research new AI tools / Not Started

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "app": 448,
  "id": 2,
  "record": {
    "to_do_table": {
      "value": [
        {
          "value": {
            "table_task": {
              "value": "Research new AI tools"
            },
            "table_status": {
              "value": "Not Started"
            }
          }
        },
        {
          "id": "9594"
        },
        {
          "id": "9601"
        }
      ]
    }
  }
}

Update Fields in the Table Row

For each Table row, specify the row IDs and fields be updated.
Fields that do not need to be updated are omitted.

Sample data to update:

  • Row ID 9604: Create article A / Not Started → Review article A / Not Started
  • Row ID 9605: Create article B / Not Started → Create article B / In Progress

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "app": 448,
  "id": 3,
  "record": {
    "to_do_table": {
      "value": [
        {
          "id": "9604",
          "value": {
            "table_task": {
              "value": "Review article A"
            }
          }
        },
        {
          "id": "9605",
          "value": {
            "table_status": {
              "value": "In Progress"
            }
          }
        }
      ]
    }
  }
}

Replace All Table Data

If Table data is specified without row IDs, all existing rows are deleted.
The data in the request is then added to the Table.

Sample data to replace:

  • Create article C / In Progress
  • Create article D / In Progress

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "app": 448,
  "id": 4,
  "record": {
    "to_do_table": {
      "value": [
        {
          "value": {
            "table_task": {
              "value": "Create article C"
            },
            "table_radio": {
              "value": "In Progress"
            }
          }
        },
        {
          "value": {
            "table_task": {
              "value": "Create article D"
            },
            "table_radio": {
              "value": "In Progress"
            }
          }
        }
      ]
    }
  }
}

Delete Table Rows

If existing row IDs are omitted from the request, those rows are deleted.

Sample data to delete:

  • Row ID 9615: Create article A / Not Started (keep)
  • Row ID 9616: Create article B / Not Started (delete)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "app": 448,
  "id": 5,
  "record": {
    "to_do_table": {
      "value": [
        {
          "id": "9615"
        }
      ]
    }
  }
}

Delete All Table Rows

To delete all rows, set "value": [] for the Table.

1
2
3
4
5
6
7
8
9
{
  "app": 448,
  "id": 6,
  "record": {
    "to_do_table": {
      "value": []
    }
  }
}

Notes

  • If a nonexistent row ID is specified, no error occurs. The row is treated as a new row. The row ID of the new row will be unrelated to the row ID specified in the request.
  • Existing rows that are not specified in the request are deleted.
  • If the field values of existing rows do not need to be updated, include just the existing row ID. The values of those rows can be omitted.