AIRTABLE · DATA & ANALYTICS
Bases, tables, and records reached with that person’s own token.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
airtable_create_baseWRITECreate a new, empty Airtable base in a workspace. Nothing is lost — but this is a ONE-WAY door: deleting a base needs an Enterprise Scale scope Agentic Fabriq does not request, so you cannot undo it and the base stays until a person removes it. The token's user must hold the workspace-creator role. Airtable publishes no list-workspaces endpoint below Enterprise, so the workspace id has to come from the workspace's URL.
airtable_create_commentWRITEAdd a comment to one Airtable record. Airtable emails every collaborator named in an @mention, so a comment can reach people who have never used Agentic Fabriq — treat the text as outbound communication, not as an internal note.
airtable_create_fieldWRITEAdd a new, empty column to an Airtable table. Strictly additive — the column starts empty, so no existing cell changes. PERMANENT: Airtable publishes no delete-field endpoint at any plan. Some types require `options` (singleSelect needs choices, number needs precision); airtable_get_base_schema shows the shapes already in use in the base.
airtable_create_recordsWRITECreate up to 10 records in one Airtable table. Each entry is {"fields": {...}} keyed by field NAME (or field id) — call airtable_get_base_schema first, because a field name the table does not have is rejected rather than created. More than 10 records in one call is refused; split the batch.
airtable_create_tableWRITECreate a new, empty table in an Airtable base. Strictly additive — no existing data changes. PERMANENT: Airtable publishes no delete-table endpoint at any plan, so you cannot undo this and only a person can remove the table in the Airtable UI. At least one field is required and the first one becomes the primary field, which Airtable restricts to a few types (singleLineText is always safe).
airtable_delete_commentWRITEDESTRUCTIVE — delete one comment from an Airtable record. Unrecoverable: Airtable publishes no restore for comments. This is the only way to retract a comment an agent posted, and posting one emails every @mentioned collaborator, so retracting is often the right call. You can only delete comments this connection created, unless its token belongs to an enterprise admin. The record's field data is untouched.
airtable_delete_recordsWRITEDESTRUCTIVE — delete up to 10 records from one Airtable table. The records move to the base's trash: a base collaborator can restore them through the Airtable UI for a limited retention window, but there is no restore endpoint, so you cannot undo this call yourself. Confirm the record ids with airtable_get_record before calling.
airtable_get_base_metadataREADRead one Airtable base's name, permission level and workspace id, and optionally its collaborators, interfaces or packages. Useful before a write: permissionLevel tells you whether this connection can actually edit the base. Invite links are deliberately not available through Agentic Fabriq.
airtable_get_base_schemaREADGet one Airtable base's tables, and for each table its fields (name, id and type) and views. Call this before writing records: airtable_create_records and airtable_update_records address fields by name or id, and a name that does not exist in the table is rejected by Airtable rather than created.
airtable_get_recordREADGet one Airtable record by id, with all of its field values. Fields that are empty in Airtable are omitted from the response rather than returned as null.
airtable_list_basesREADList the Airtable bases this connection can see, with each base's id, name and permission level. Start here: every other Airtable tool needs a base_id, and base ids are not guessable (they look like appAbC123XyZ). Returns at most 1000 bases per call plus an `offset` token; pass that token back for the next page.
airtable_list_commentsREADList the comments on one Airtable record, each with its author, text and creation time. Comments are a separate resource from field values: reading a record does not return them.
airtable_list_recordsREADList records in one Airtable table, one page at a time, optionally SORTED. Returns at most 100 records per call plus an `offset` token; pass that token back to read the next page. An empty `records` array with no `offset` means the table (or the filtered view) is exhausted. Prefer `sort` + `max_records` over reading every page and sorting yourself — "the 5 most recent open leads" is one call.
airtable_replace_recordsWRITEDESTRUCTIVE — replace up to 10 Airtable records, CLEARING every field you do not name. This is Airtable's PUT form: a field absent from your `fields` object is emptied, not left alone, and Airtable publishes no restore endpoint. Use airtable_update_records unless you specifically intend to blank the omitted fields. If you are not certain what a record currently holds, call airtable_get_record first — reading it is also how you undo this, by writing the old values back. Requires confirm='clear-unnamed-fields'.
airtable_sync_csvWRITEDESTRUCTIVE — bulk-load CSV into an Airtable table the customer configured in the Airtable UI as an API-endpoint sync source, REPLACING that table's contents. Up to 10,000 rows, 500 columns and 2 MB per call, and Airtable rate-limits this to 20 requests per 5 minutes per base. TWO PROVIDER GATES: the Pro plan or above, AND a personal access token — Airtable does not accept an OAuth token on this endpoint however it is scoped. Both failures arrive as a 403. This is not a general table writer; use airtable_create_records or airtable_upsert_records for ordinary tables.
airtable_update_commentWRITEEdit a comment on an Airtable record. Airtable emails every collaborator named in an @mention AGAIN on the edit, so this is outbound communication, not a silent correction. You can only edit comments this connection created, unless its token belongs to an enterprise admin. Get the comment id from airtable_list_comments.
airtable_update_date_dependencyWRITESet how one task's dates follow another's in an Airtable timeline: the dependency kind and the buffer in whole days, on a predecessor link that ALREADY EXISTS between two records. It creates no link, deletes no link and changes no cell value, and re-writing the previous values restores it exactly. The predecessor record must already be linked in the successor's predecessor field or Airtable rejects the call. Airtable ships this endpoint behind a feature flag, so an account without it enabled returns an error it will not explain.
airtable_update_fieldWRITEChange an Airtable field's name, description, or — for a formula field — its formula expression. A formula rewrite changes a DERIVED column: Airtable recomputes every row, no stored value is coerced or discarded, and writing the old expression back undoes it exactly, so read the current one from airtable_get_base_schema first. You still cannot change a field's TYPE through this endpoint; Airtable does not publish that at all. Renaming is reversible too, but references keyed on the old name break silently — filterByFormula strings, view filters, automations and third-party integrations, none of which Airtable reports.
airtable_update_recordsWRITEUpdate up to 10 Airtable records, changing ONLY the fields named in the request. Fields you do not name are left exactly as they are. Each entry needs an existing record `id` — use airtable_create_records for new rows. More than 10 records in one call is refused; split the batch.
airtable_update_tableWRITERename an Airtable table or change its description. The rows are untouched and a rename is reversible — but every reference keyed on the OLD name breaks silently: filterByFormula strings, view filters, automations and third-party integrations. Airtable reports none of that in the response, so check before renaming a table anything else depends on.
airtable_upload_attachmentWRITEAppend one file, up to 5 MB, to an attachment cell on an Airtable record. Additive — nothing already in the cell is replaced or removed. The file travels as base64, so keep it small; for anything large, write a public URL into the attachment field with airtable_update_records instead and let Airtable fetch it.
airtable_upsert_recordsWRITECreate-or-update up to 10 Airtable records in one call, matched on 1-3 key fields. Use this instead of listing, diffing and then splitting into creates and updates — that is three round trips and it races anything else writing the table. One match updates that record; no match creates one; MORE THAN ONE MATCH FAILS THE WHOLE REQUEST rather than guessing which row was meant. Fields you do not name are left untouched.
airtable_whoamiREADIdentify the Airtable account this connection belongs to, returning its user id and email address. On an OAuth connection the response also lists the scopes the token actually holds; a personal access token reports none, so its scope set cannot be verified this way.
Put Airtable behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.