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

# Limits

> Request-size limits on Infino Cloud, what happens when you exceed them, and how to size append batches.

Limits that apply to Infino Cloud connections. The open-source engine running locally
has no request cap, because there is no request: writes go straight to storage.

## Request body: 5 MiB

A single data-plane request body is capped at **5 MiB**. In practice this applies to
`append` and `update`, whose bodies carry your rows as Arrow IPC; a request over the
cap is rejected with HTTP `413` and nothing is written.

## Target 4 MiB or less per batch

The SDK re-encodes rows before sending, so the bytes on the wire are not exactly the
bytes you measured client-side. A batch sized right at the cap can pass or fail on
that small encoding difference. Keep a margin: **aim for at most 4 MiB of Arrow data
per append**, and treat the last MiB as headroom rather than budget.

Rough row budgets, dominated by the vector column (4 bytes per dimension):

| row shape                        | approx. bytes per row | rows per 4 MiB batch |
| -------------------------------- | --------------------- | -------------------- |
| `vector(384)` + \~200 B of text  | \~1.7 KiB             | \~2,400              |
| `vector(768)` + \~200 B of text  | \~3.2 KiB             | \~1,200              |
| `vector(1536)` + \~200 B of text | \~6.2 KiB             | \~650                |

## Batching and throughput

One `append` is one atomic commit, so batch size is the main ingest-throughput knob:
prefer batches near the 4 MiB target over many small appends, and split large loads
into a loop.

<CodeGroup>
  ```python Python icon="python" theme={null}
  BATCH = 2000  # ~4 MiB for 384-dim vectors with short text
  for i in range(0, len(rows), BATCH):
      table.append(rows[i : i + BATCH])
  ```

  ```typescript Node.js icon="node-js" theme={null}
  const BATCH = 2000; // ~4 MiB for 384-dim vectors with short text
  for (let i = 0; i < rows.length; i += BATCH) {
    table.append(rows.slice(i, i + BATCH));
  }
  ```
</CodeGroup>

## See also

* [Errors & retries](/docs/cloud/errors): which errors clear on a retry and which do not.
* [Working with tables](/docs/guides/tables): create, append, update, delete.
* [Troubleshooting](/docs/troubleshooting): common errors and fixes.
