Airtable
Read and write Airtable bases - discover schema, filter and page records, create, update, upsert and delete them, and work record comments and attachments.
Connect an Airtable workspace with a personal access token to work its bases end to end: list the bases the token can reach, read a base's tables with every field's id, name and type, page through records with Airtable formulas, sorts and views, create, update, upsert and delete records in batches, read and write the comment threads on records, and attach files. Writes are attributed in Airtable's revision history to the person whose token this is.
Connect
| Credential field | Required | Where it comes from |
|---|---|---|
Personal access token (PERSONAL_ACCESS_TOKEN) | Yes | From airtable.com/create/tokens (pat…). Its scopes AND the bases it was granted are both ceilings; every write is attributed to the user who created it. |
Tools
| Tool | Access | What it does |
|---|---|---|
Whoami (yekar.airtable.whoami) | Read | Verify the connection and report the Airtable identity behind it - the user every write will be attributed to, and the scopes the token carries. Run this first when a permission error is ambiguous. |
List bases (yekar.airtable.list-bases) | Read | A page of the Airtable bases this token can reach, with each one's id, name and permission level. This is also the way to settle whether a permission error means 'the token was never granted this base' - if a base is not listed here, it is not reachable, however the scopes are set. |
Get base schema (yekar.airtable.get-base-schema) | Read | The tables in a base, with every field's id, name, type and allowed options, plus the views defined on each table. This is the discovery path for everything else: field names for filterByFormula, field types for writes, and the ids a durable automation should key on instead of names. |
List records (yekar.airtable.list-records) | Read | A page of records from a table, optionally filtered with an Airtable formula, sorted, or taken from a named view. Ask for the fields you need - a wide table returns a lot per record. This endpoint reports no total; counting matching records means paging through them all. |
Get record (yekar.airtable.get-record) | Read | One record with all of its cells. Use List records with a filterByFormula when you know a value but not the record id. |
List comments (yekar.airtable.list-comments) | Read | The comment thread on a record, with each comment's author and timestamps. Comments are separate from field values: they are the discussion about a record, not data stored on it. |
Create records (yekar.airtable.create-records) | Write | Add up to 10 new records to a table. Each record's fields must match the table's field types - call Get base schema first if unsure. Airtable has no dry run: the records exist as soon as this returns. |
Update records (yekar.airtable.update-records) | Write | Change field values on up to 10 existing records. Only the fields you pass are touched - every other field on the record is left exactly as it was. To clear a field, pass null as its value. |
Upsert records (yekar.airtable.upsert-records) | Write | Update records that already match on a key field, and create the ones that do not - up to 10 at a time. Zero matches creates a record; exactly one match updates it; MORE than one match fails the entire request without writing anything, which means the merge key is not unique rather than that the data is wrong. |
Delete records (yekar.airtable.delete-records) | Write | Permanently delete up to 10 records from a table. There is no archive and no undo through the API - a deleted record is gone, and its id stops resolving. Airtable's own trash is a UI-only recovery path, so treat this as final. |
Create comment (yekar.airtable.create-comment) | Write | Post a comment on a record. It appears under the identity of the user whose token this connection holds, and everyone with access to the base can read it - there is no private or internal comment in Airtable. |
Update comment (yekar.airtable.update-comment) | Write | Rewrite a comment's text. Airtable only lets a comment's own author edit it, so this works on comments this connection posted and not on anyone else's. |
Delete comment (yekar.airtable.delete-comment) | Write | Remove a comment from a record's thread. Airtable only lets a comment's own author delete it, so this works on comments this connection posted and not on anyone else's. |
Upload attachment (yekar.airtable.upload-attachment) | Write | Attach a file to a record's attachment field. The file comes from this run's workspace or an https URL, and must be 5 MB or smaller - Airtable's own limit for this endpoint. The upload ADDS to the field rather than replacing what is already there. |
Notes
- Create a token at airtable.com/create/tokens and paste it here - Airtable removed API keys in February 2024, so a personal access token (or OAuth) is the only way in.
- Tick the scopes for what Yekar.AI may do: reading needs
schema.bases:readanddata.records:read; writing records also needsdata.records:write; comments needdata.recordComments:readanddata.recordComments:write. Optionally adduser.email:readso Whoami can report who the token is. - Grant the token the specific bases or workspaces it may touch. That grant is a SEPARATE ceiling from the scopes and the stricter of the two always wins - a token with write scope on a base it can only read stays read-only.
- EVERY record and comment written through this connection is attributed in Airtable's revision history to the person who created the token, and cannot exceed that person's own access. Bind automations using this integration as service connections.
- Airtable answers one ambiguous error for three different problems - missing scope, base not granted, and wrong id. Run List bases and then Get base schema to tell them apart; the error message says so too.
- Rate limits are fixed at 5 requests per second per base on every plan and cannot be raised. Free and Team workspaces also have a MONTHLY API call allowance (1,000 and 100,000), which an automation paging through a large table can exhaust.
- Add one credential per token - a production and a sandbox token can live on the same connection.