---
title: "Set many table cell values"
method: POST
path: "/tables/{table_id}/cells/bulk/"
tags: ["table-rows"]
---

# Set many table cell values

`POST /tables/{table_id}/cells/bulk/`

## Request

- Base URL: `https://api.getoneprofile.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getoneprofile.ai/tables/{table_id}/cells/bulk/`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Apply up to 1000 manual cell edits in ONE transaction, then recompute their downstream formula cells: inline when the scope is small (see `recomputed_column_ids`), otherwise via a SINGLE cell-edited run covering all of them. The endpoint that makes a grid paste one request instead of N. A null value clears that cell. All-or-nothing: every column and value is validated before anything is written, so a formula column or a type mismatch anywhere rejects the whole batch and writes nothing. Same-value edits are counted in skipped and write nothing. Read-your-writes: the response carries every named row's post-write state and version.

A Select or Multi-select cell takes only the column's own options (its `type_options.choices`): each value is matched to one ignoring case and spacing and stored as the option is spelled, and one that names no option refuses the whole batch with a 422 `cell_value_not_a_choice` naming the cell and the options. `restore` is for the grid's undo and redo history ONLY: it writes back a value the options no longer name exactly as the cell held it. Never set it to get a new value past the options; add the value to the column's options instead.

## Path parameters

- `table_id` string, uuid, required

## Request body

- TableCellsBulkEditRequestSchema: Request body for the bulk cell write: all-or-nothing, one recompute run.
  - `edits` TableCellBulkEditItemSchema[], required: The cell edits to apply.
    - `column_id` string, uuid, required
    - `record_id` string, uuid, required
    - `value` union
      - string
      - integer
      - number
      - boolean
      - string, date-time
      - string, date
      - CellValueInput[]
      - object
  - `restore` boolean: History only: set by the grid's undo and redo, which put back exactly what a cell held before. A Select or Multi-select value the column's options no longer name is then written back as it was, and no option is added; a number goes back with every digit it had, unrounded. Every other writer, AI agents and integrations included, leaves it false: a new value must be one of the column's options, and a number is rounded to the column's places.

## Response `200`

Successful Response

- TableCellsBulkMutationResponseSchema: Read-your-writes result of a bulk cell write. Never carries a run ID. ``rows`` covers every row named by the request, including ones whose edits were all same-value no-ops, so the client can reconcile its whole selection in one pass.
  - `applied` integer, required: Edits that changed a value and were written.
  - `recomputed_column_ids` string[]: Formula columns recomputed INLINE within this request. Their values in `rows` are final and no background run was requested. Empty when a run was queued instead.
  - `rows` TableRowSchema[], required
    - `cells` object, required
    - `created_at` string, date-time, required: When the row was created.
    - `record_id` string, uuid, required
  - `skipped` integer, required: Same-value edits that wrote nothing.
  - `stale_column_ids` string[], required: Transitive formula dependents now marked stale across all edited rows.

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Row or column not found
- `422`: Invalid request made to the API.
- `500`: Internal server error.
- `502`: Bad gateway error.
- `503`: Service unavailable.

---

[API](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile.md) · [All operations](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/llms.txt) · [OpenAPI document](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/revisions/4a6bd71e3f02?raw)
