Airtable
List, create, and update records in an Airtable base using the Airtable Web API. Standard-library Python only — no external dependencies.
Grounded in the official docs: https://airtable.com/developers/web/api/introduction
- Base URL:
https://api.airtable.com/v0 - Auth:
Authorization: Bearer <personal access token>
Operations
| operation | HTTP | Endpoint | Notes |
|---|---|---|---|
list |
GET |
/v0/{baseId}/{tableIdOrName} |
Optional view, filterByFormula, maxRecords, pageSize, offset. |
create |
POST |
/v0/{baseId}/{tableIdOrName} |
Body { "records": [ { "fields": {…} } ] }. |
update |
PATCH |
/v0/{baseId}/{tableIdOrName} |
Body { "records": [ { "id": "rec…", "fields": {…} } ] }. PATCH is non-destructive — only the supplied fields change. |
Inputs
| name | required | applies to | description |
|---|---|---|---|
apiKey |
yes | all | Airtable personal access token (PAT). |
operation |
yes | all | list, create, or update. |
baseId |
yes | all | Base ID, starts with app…. |
tableIdOrName |
yes | all | Table ID (tbl…) or table name. |
view |
no | list | View name or ID. |
filterByFormula |
no | list | Airtable formula, e.g. {Status}='Open'. |
maxRecords |
no | list | Max total records to return. |
pageSize |
no | list | Records per page (max 100). |
offset |
no | list | Pagination offset from a prior list call. |
records |
yes | create, update | JSON array of record objects. |
typecast |
no | create, update | true to coerce string values to field types. |
Outputs
| key | description |
|---|---|
result |
The raw Airtable response body (JSON string). For list, contains records and an optional offset. For create/update, contains the affected records. |
status |
HTTP status code as a string (e.g. 200). |
Reference as {{run.result}} / {{run.status}} in a job (the tool publishes
result and status).
Getting an API key
- Sign in to Airtable and go to https://airtable.com/create/tokens.
- Create a personal access token.
- Grant scopes:
data.records:read(forlist) and/ordata.records:write(forcreate/update). - Add the base(s) the token may access.
- Copy the token (starts with
pat…) and pass it asapiKey.
You can find your baseId (app…) in the API docs for your base at
https://airtable.com/developers/web/api/introduction (select the base from
the right sidebar), or in the base URL when viewing it in the browser.
Examples
1. List up to 5 open tasks from a view
operation = list
apiKey = patXXXXXXXXXXXXXX
baseId = appAbCdEfGhIjKlMn
tableIdOrName = Tasks
view = Grid view
filterByFormula = {Status}='Open'
maxRecords = 5
Returns JSON like:
{
"records": [
{ "id": "recABC123", "createdTime": "2026-06-01T12:00:00.000Z",
"fields": { "Name": "Ship release", "Status": "Open" } }
]
}
2. Create a record
operation = create
apiKey = patXXXXXXXXXXXXXX
baseId = appAbCdEfGhIjKlMn
tableIdOrName = Tasks
records = [{"fields": {"Name": "Write docs", "Status": "Open"}}]
3. Update an existing record (non-destructive)
operation = update
apiKey = patXXXXXXXXXXXXXX
baseId = appAbCdEfGhIjKlMn
tableIdOrName = Tasks
records = [{"id": "recABC123", "fields": {"Status": "Done"}}]
Only the Status field is changed; all other fields on recABC123 are left
intact.