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

# Data table

> A hand-authored Summation table you fill in and maintain yourself.

A **data table** is a hand-authored [Summation table](/features/tables) — a grid you fill in and maintain yourself. Reach for one when you want reference or master data, a manually curated list, or any dataset you'd rather enter by hand than import or compute.

**What you can do**

* Edit rows directly in the grid — add, update, and delete.
* Add columns of any type (Text, Integer, Number, Date, Boolean), plus **SQL / computed** columns and **Dimension** columns that reference a [dimension table](/features/tables/dimension).
* Mark one column as the table's **key** with the **Set as key** radio in the grid. (The `primary_key` is shown read-only, and "business keys" is only a backend parameter on the upsert path — neither is set here.)

## Create a data table

<Tabs sync={false}>
  <Tab title="In the app">
    On the [Tables](/features/tables) page, click **Create → Data Table**. You land on the table's grid, where the **+ Add** column menu adds typed or computed columns and you enter rows.

    <Frame caption="Adding a column to a data table">
      <img src="https://mintcdn.com/summation-676748f5/ewrpxeNnW54PEh54/images/features/tables/data-table.png?fit=max&auto=format&n=ewrpxeNnW54PEh54&q=85&s=5347b297fb347adeadec2bd6447ce732" alt="A data table 'DemoDataTable' with a '# Height' column and a '+ Add' column button; the Add-column menu lists SQL, Dimension, Boolean, Date, Integer, Number, and Text." width="934" height="960" data-path="images/features/tables/data-table.png" />
    </Frame>
  </Tab>

  <Tab title="Via the API">
    <Card title="POST /v1/tables/{tableId}/rows" icon="code" href="/api-reference/tables/append-rows-to-a-table" horizontal>
      Append 1–500 rows per request; every row must include the table's primary key column(s) (a `400` otherwise). Returns `200` when all rows apply, `207` for a partial result, or `422`; a `409` means the table isn't promoted yet. Requires the `tables:append` scope.
    </Card>

    <Card title="PUT /v1/tables/{tableId}/rows" icon="code" href="/api-reference/tables/upsert-rows-into-a-table" horizontal>
      Upsert rows (insert or update by key) — same 1–500 row limit and `tables:append` scope.
    </Card>

    <Card title="POST /v1/tables/{tableId}/ingestion-batches" icon="code" href="/api-reference/tables/create-an-ingestion-batch" horizontal>
      Start a batched (multipart) ingestion for larger loads.
    </Card>

    <Card title="POST .../ingestion-batches/{batchId}/parts/{partNumber}/upload-url" icon="code" href="/api-reference/tables/create-a-batch-part-upload-url" horizontal>
      Get a presigned URL to upload one part of a batch.
    </Card>

    <Card title="POST .../ingestion-batches/{batchId}/commit" icon="code" href="/api-reference/tables/commit-an-ingestion-batch" horizontal>
      Commit the batch to apply its rows.
    </Card>

    <Card title="DELETE .../ingestion-batches/{batchId}" icon="code" href="/api-reference/tables/abort-an-ingestion-batch" horizontal>
      Abort a batch and discard its parts. Requires the `tables:append` scope and `confirm=true`.
    </Card>

    <Card title="GET .../ingestion-batches/{batchId}" icon="code" href="/api-reference/tables/get-an-ingestion-batch" horizontal>
      Check a batch's status.
    </Card>

    <Card title="Coming soon" icon="clock" horizontal>
      Create a data table.
    </Card>
  </Tab>
</Tabs>
