---
title: "Bulk Update Cell"
method: POST
path: "/api/bitables/{table_id}/rows/bulk-update-cell"
tags: ["bitables"]
---

# Bulk Update Cell

`POST /api/bitables/{table_id}/rows/bulk-update-cell`

## Request

- Base URL: `https://api.tintin-x.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tintin-x.com/api/bitables/{table_id}/rows/bulk-update-cell`
- Auth: HTTP bearer

Set a single column's value across many rows in one transaction.

Powers the frontend's column-header "Set value for all rows" + the
cell multi-select toolbar's "Set value" action. Both surfaces hit
this endpoint with the row_ids they want to touch.

When the targeted column is the `status_col` of any recipe's
`row_gate` AND the new value is in the recipe's `allow`, the
endpoint stamps a one-shot Redis bypass marker for each affected
(row, recipe_col) pair so the next executor tick dispatches without
re-gating. This is the load-bearing piece for the v0.19+
"user advances row through stages" flow.

Only unversioned columns are accepted — versioned cells (recipe
outputs) must go through the cell-version write path so history is
preserved. Targeting a versioned column returns 400.

## Path parameters

- `table_id` string, uuid, required

## Request body

- BulkUpdateCellRequest: Set a single column's value across N rows in one transaction. Powers the frontend's "Set value for all rows in this column" column- header affordance + the cell multi-select toolbar's "Set value" action. Both surfaces converge here so the agent / user has a single endpoint to drive batch status flips (smart-bulk-tryon's awaiting_tryon → awaiting_pose → awaiting_video advances). When `set_row_gate_bypass` is True (default) AND the targeted column is the `status_col` of one or more recipes' `row_gate` AND the new `value` is in that recipe's `allow` list, the endpoint stamps the per-(row, recipe_col) bypass marker so the next executor tick dispatches without re-gating. Validation: - row_ids: 1..500 rows (server-side cap to bound the txn size) - col_id: column must exist on the table; cannot target the system `_meta` keys (none today, future-proofing). - value: validated against the column's type via the existing `validate_row_data` path — same constraints as PATCH .../rows/{rid}.
  - `row_ids` string[], required
  - `col_id` string, required
  - `value` unknown
  - `set_row_gate_bypass` boolean

## Response `200`

Successful Response

- BulkUpdateCellResult: Response from POST .../rows/bulk-update-cell.
  - `updated` integer, required
  - `skipped` object[]
  - `bypass_marks` object[]

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/tintin-x/apis/tintin-api.md) · [All operations](https://skmtc.dev/tintin-x/apis/tintin-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tintin-x/apis/tintin-api/revisions/8839a8d0a66c?raw)
