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

# Add column

> Add a writable column to a table. Rate limit: 10 write requests per minute per workspace, one write at a time per workspace, plus 60 requests per minute per API key. 100 column changes per UTC day per workspace.

Adds a `text` (default), `email`, `phone`, `url`, `number` or `json` column at the end of the table and returns it with its `id`. Existing rows have no value in the new column.

The label must be unique within the table, ignoring case (`409` with `code: "column_label_conflict"`). Tables have a maximum number of columns (`409` with `code: "column_limit_reached"`).

Adding, renaming and deleting columns count toward 100 column changes per workspace per UTC day.

> [!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. 100 column changes 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. |
| `Idempotency-Key` | header | No | Reuse the same key and identical body when retrying this operation. A changed body with the same key returns 409 idempotency\_conflict. |

## JSON body

| Field | Type | Required | Description |
| - | - | - | - |
| `label` | string | Yes | Unique within the table, ignoring case. 1–200 characters. |
| `type` | string | No | One of: `text`, `email`, `phone`, `url`, `number`, `json` Default: `text`. |

## 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 POST "https://api.airscale.io/v1/tables/$TABLE_ID/columns" \
  --header "Authorization: Bearer $AIRSCALE_API_KEY" \
  --header "Idempotency-Key: addTableColumn-001" \
  --header "Content-Type: application/json" \
  --data '{
  "label": "Phone",
  "type": "phone"
}'
```

## Response

### 201

The column was added.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "column": {
    "id": "bc629d4d-cc75-4cee-b10a-851203d82fac",
    "label": "Phone",
    "type": "phone",
    "fieldKey": "phone"
  }
}
```

## Errors

| Status | Meaning |
| - | - |
| 400 | Invalid body or unsupported column 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 | The label is taken, the table has the maximum number of columns, or another table operation is running. |
| 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.