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

# Update rows

> Update cells in up to 1,000 rows at once. Rate limit: 10 write requests per minute per workspace, one write at a time per workspace, plus 60 requests per minute per API key. Rows count toward 5,000 rows per minute and 100,000 rows per UTC day per workspace.

Send `rows`, each with a row `id` and the `values` to change, keyed by column ID. Only the cells you send change; `null` clears a cell. Each row ID may appear once per request.

All rows are updated in one transaction: an invalid value or read-only column rejects the whole request. Rows that are deleted or not in this table are skipped and listed in `notFound`.

Editing a cell filled by an enrichment removes its enrichment details, as an edit in the app does. Updates never start enrichments.

> [!NOTE]
>
> Paid plans only. No credits are charged. Limits: 10 write requests per minute per workspace, one write at a time per workspace, plus 60 requests per minute per API key. Rows count toward 5,000 rows per minute and 100,000 rows per UTC day per workspace. See the [Tables API overview](https://docs.airscale.io/api-reference/tables/overview.md) for every limit.

## Authentication

Send `Authorization: Bearer $AIRSCALE_API_KEY`. The key determines the workspace. See [Authentication](https://docs.airscale.io/api-reference/authentication.md).

## Parameters

| Name | Location | Required | Description |
| - | - | - | - |
| `table_id` | path | Yes | Table ID returned by Create table or List tables. |

## JSON body

| Field | Type | Required | Description |
| - | - | - | - |
| `rows` | array | Yes | Each row ID may appear once. 1–1000 items. |
| `rows[].id` | string | Yes | UUID. |
| `rows[].values` | object | Yes | Cell values keyed by column ID. Strings for text, email, phone and url columns; finite numbers for number columns; any JSON value for json columns; null to leave or make a cell empty. |

## Request example

Replace path variables with IDs returned by the API. Column UUIDs in the example body must belong to your table.

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl --request PATCH "https://api.airscale.io/v1/tables/$TABLE_ID/rows" \
  --header "Authorization: Bearer $AIRSCALE_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "rows": [
    {
      "id": "4f9f5468-c311-4ee9-a85f-536e3e8b7a7b",
      "values": {
        "c3a1f7e2-5b8d-4e6f-9a2b-1d4c7e8f0a3b": 45
      }
    },
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "values": {
        "c3a1f7e2-5b8d-4e6f-9a2b-1d4c7e8f0a3b": 1
      }
    }
  ]
}'
```

## Response

### 200

Rows were updated.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "updated": 1,
  "ids": [
    "4f9f5468-c311-4ee9-a85f-536e3e8b7a7b"
  ],
  "notFound": [
    "00000000-0000-4000-8000-000000000000"
  ]
}
```

## Errors

| Status | Meaning |
| - | - |
| 400 | Invalid body, duplicate row IDs, unknown or read-only column, or a value of the wrong type. |
| 401 | Missing or invalid API key. |
| 403 | The workspace does not have an active paid plan. |
| 404 | Table not found in this workspace, or deleted. |
| 409 | A conflicting table operation is running. |
| 413 | Body larger than 8 MiB, or an updated row larger than 5 MiB. |
| 429 | A rate limit, the one-write-at-a-time rule or a daily limit was reached. Wait for Retry-After before retrying. |
| 502 | The service could not be reached. Retry with backoff. |
| 503 | The service is at capacity or temporarily unavailable. Retry after Retry-After. |
| 504 | The request timed out after 30 seconds. A write may still have been applied; check the result before retrying it. |

See [limits, retries and error codes](https://docs.airscale.io/api-reference/tables/overview.md#limits) for shared behavior.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.