---
title: Airtable
---

# Airtable

## What it is

An API integration that connects AMC to your Airtable workspace. Browse bases, view tables and records, search, comment on records, and receive inbox notifications for record changes — all from within AMC. Agents can interact with Airtable via CLI routes.

## Where to find it

### Status

In-development (unreleased). Enable: turn on **Airtable** in **Settings → Lab** (`airtableEnabled`), or set `AMC_SHOW_AIRTABLE=1`.

### How to use it

1. Enable the Airtable feature (Settings > Dev Features or `AMC_SHOW_AIRTABLE=1`)
2. Connect your account: Settings → Features → Airtable. Create a personal access token at airtable.com/create/tokens with scopes: `data.records:read`, `data.recordComments:read`, `schema.bases:read`
3. Open the Airtable tab in the sidebar to browse your bases and records

## How it behaves

### Inbox source

`airtable-inbox` — Polls every ~10 minutes for recently-updated records. Enable via Settings → Features → Airtable > Inbox toggle. Kill switch: `AMC_DISABLE_AIRTABLE_INBOX_POLL=1`.

### Troubleshooting

- **401 Unauthorized:** Token may be expired or revoked. Re-create at airtable.com/create/tokens
- **403 Forbidden:** Token lacks required scopes. Ensure `data.records:read` and `schema.bases:read` are granted
- **429 Rate Limited:** Airtable enforces 5 requests/second per base. The integration handles retries automatically
- **Base not found:** Verify the base ID and that your token has access to it

## For agents

### CLI routes

- `GET /airtable/list-bases` — List the bases the connected token can see
- `GET /airtable/base-schema` — A base’s tables and fields (query: `?baseId`)
- `GET /airtable/list-records` — List records in a table (query: `?baseId&tableId&offset`)
- `GET /airtable/record-detail` — One record (query: `?baseId&tableId&recordId`)
- `GET /airtable/search-records` — Search a table (query: `?baseId&tableId&q`)
- `GET /airtable/list-comments` — A record’s comments (query: `?baseId&tableId&recordId`)
- `POST /airtable/create-record` — Create a record (body: `{baseId, tableId, fields}`)
- `POST /airtable/update-record` — Update a record (body: `{baseId, tableId, recordId, fields}`)
- `POST /airtable/add-comment` — Comment on a record (body: `{baseId, tableId, recordId, text}`)

All routes require bearer auth and a connected Airtable account.

### Architecture

- **Auth:** Personal Access Token (PAT) — stored encrypted at rest
- **SSRF guard:** `assertSafeAirtableOrigin` — HTTPS only, api.airtable.com only
- **Rate limiting:** 5 requests/second per base, managed via `createRequestQueue` (maxConcurrent=3)
- **Data hierarchy:** Base → Table → Record (3-level navigation)
- **Workflow trigger:** Polls every 2 minutes for record created/updated events. Kill switch: `AMC_DISABLE_AIRTABLE_WORKFLOW_TRIGGER=1`

## Related

Other integrations that work the same way include [Asana board](asana-board.md), and every one of them stores its account token the way [Automation credentials](automation-credentials.md) describes. If you are wiring an agent to a service yourself, [Agent tools](agent-tools.md) covers the same command-line route pattern.
