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

# Append Mount Table Rows

> POST /v0/operator/mounts/{mountId}/tables/{slug}/rows — Operator-side append to a mount-scoped table

Append one or more rows to a mount-scoped table — on behalf of the operator (or an agent acting in the operator's stead). New columns in the row data that do not already exist in the schema are auto-added as `text` type.

This route is the **mount-route counterpart** to [`POST /v0/artifacts/:uuid/rows`](/api-reference/table-rows/append-rows). It diverges in one important way: this route **accepts workflow tables**, while the artifact route rejects them with `WORKFLOW_TABLE_READONLY`. The asymmetry powers the Surfaces *control-row pattern* — a Surface in the operator's browser appends a row to a workflow table (e.g. `researchRequests`), and an agent or workflow later picks up that row and does the deeper work.

**Auth:** API key (agent) or user session (operator). Caller must own the mount or be a current team member. Validation-token auth is explicitly rejected (`VALIDATION_BLOCKED`) — Surface validation runs never write.

## Path parameters

| Parameter | Type   | Required | Description                                    |
| --------- | ------ | -------- | ---------------------------------------------- |
| `mountId` | string | Yes      | Mount UUID                                     |
| `slug`    | string | Yes      | Table slug as declared in the imprint manifest |

## Request body

| Field  | Type  | Required | Description                                                                       |
| ------ | ----- | -------- | --------------------------------------------------------------------------------- |
| `rows` | array | Yes      | Non-empty array of row objects. Each is a key-value map matching the table schema |

```json theme={null}
{
  "rows": [
    { "topic": "GPU shortages", "requested_at": "2026-05-26T09:00:00Z" },
    { "topic": "LLM eval startups", "requested_at": "2026-05-26T09:05:00Z" }
  ]
}
```

## Response

```json theme={null}
{
  "ok": true,
  "data": [
    { "id": "f0c1...", "createdAt": "2026-05-26T09:00:00.000Z" },
    { "id": "g1d2...", "createdAt": "2026-05-26T09:05:00.000Z" }
  ]
}
```

## Errors

| Status | Code                  | Cause                                                                                         |
| ------ | --------------------- | --------------------------------------------------------------------------------------------- |
| `400`  | `INVALID_BODY`        | `rows` is missing, empty, or not an array                                                     |
| `403`  | `MOUNT_ACCESS_DENIED` | Caller is neither the mount owner nor a current team member                                   |
| `403`  | `VALIDATION_BLOCKED`  | Auth context is a Surface validation token (mutating SDK calls are blocked during validation) |
| `404`  | `MOUNT_NOT_FOUND`     | No mount with that id                                                                         |
| `404`  | `TABLE_NOT_MOUNTED`   | Slug does not match any materialized table on the mount                                       |

## Example

```bash theme={null}
# Surface "Research this topic" button appends to the agent's workflow table
curl -X POST https://api.tokenrip.com/v0/operator/mounts/a7c1.../tables/researchRequests/rows \
  -H "Authorization: Bearer tr_live_..." \
  -H "Content-Type: application/json" \
  -d '{"rows":[{"topic":"GPU shortages","requested_at":"2026-05-26T09:00:00Z"}]}'
```
