---
title: "Import Rows"
method: POST
path: "/api/tf/tables/{table_id}/import"
tags: ["tableflow"]
---

# Import Rows

`POST /api/tf/tables/{table_id}/import`

## 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/tf/tables/{table_id}/import`
- Auth: HTTP bearer

Bulk-create rows from a parsed CSV / Excel payload.

The frontend parses the file client-side and POSTs the column-
mapped rows here. Per-row validation errors land in `errors[]`
instead of aborting the import — partial imports are a feature
for paste-from-spreadsheet flows where some rows have bad data.

`dry_run=True` returns the same shape without committing, so the
user can see how many rows + cells would land + any validation
errors before clicking Import.

## Path parameters

- `table_id` string, uuid, required

## Request body

- ImportRowsRequest: POST /tables/{id}/import body. `rows` is a list of `{column_id: value}` dicts. Unknown column_ids are reported in `response.errors[]` and skipped; the row is still created. `dry_run` validates without committing — the FE uses this to surface validation errors during the column-mapping step.
  - `rows` object[], required
  - `dry_run` boolean

## Response `201`

Successful Response

- ImportRowsResponse
  - `rows_created` integer, required
  - `cells_written` integer, required
  - `errors` ImportRowsError[], required
    - `row_idx` integer, required
    - `column_id` string, required
    - `message` string, required

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