---
title: "Reconcile Row Gates"
method: POST
path: "/api/bitables/{table_id}/reconcile-row-gates"
tags: ["bitables"]
---

# Reconcile Row Gates

`POST /api/bitables/{table_id}/reconcile-row-gates`

## 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}/reconcile-row-gates`
- Auth: HTTP bearer

Walk every cell_state on this table and reconcile against row_gate.

One-shot rescue for pre-0.19.1 tables where row_gate-blocked cells
landed at `pending_approval` (B3 HITL UI state, triggers the
Review modal) instead of `row_gated`. Also handles cells whose
status has since advanced past the gate but stayed stuck because
the bypass-marker path didn't wake them up.

For each versioned cell on the table:
  - If recipe has no `row_gate` → skip
  - Resolve current status from row.data[status_col]
  - If status IS in row_gate.allow:
      * state in {pending_approval, row_gated} → flip to `ready`
        (executor's next tick dispatches normally)
  - If status NOT in row_gate.allow:
      * state == pending_approval → flip to `row_gated` (silent
        gate, no Review modal)
      * state == row_gated → leave (already correct)
  - All other states → leave (running / done / failed / etc.)

Owner / team-member auth via `_load_for_write`. Idempotent — running
twice produces the same result. Returns the per-row counts so the
caller can verify the rescue actually moved cells.

## Path parameters

- `table_id` string, uuid, required

## Response `200`

Successful Response

- 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)
