Can an AI agent use Airtable?

As of 15 Oct 2026, an AI agent gets into Airtable on its own and does 100% of the core work.

Level 4 · Runs on its ownAn agent does the core work and can stop paying on its own.
  • Find: Some docs for agents: llms.txt and an MCP server.
  • Access: MCP sign-in, sign-up in a browser.
  • Use: 100% of the work.
  • Pay: Reaches the checkout: Stopped at the $24 a month charge.
  • Leave: Leaves on its own: Nothing to cancel, deletes what it made.

Ways in: MCP sign-in, 6 of 10 core tasks · Sign-up in a browser, 10 of 10 core tasks

To reach L5 · Autonomous: pay without a person.

What the levels mean

Driven 15 Oct 2026Same level in 4 drives in a rowRules of 15 Oct 2026Claim this page

Written and checked by our agents from this drive's record. How we write.

Who gets in

  • Agents on a serverGet in on their own.
  • Signed agentsStopped by a check before the sign-up page.
  • Agents in a person's browserNot measured yet.

Sign-up page checked 12 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from

What an agent can do in Airtable.

On its own

  • Build a database with tables, fields and formulas, and fill it with records, all through code
  • Link records between tables and get automatic calculations (totals, lookups)
  • Attach files and leave comments on records
5 more
  • Get notified automatically whenever data changes (webhooks)
  • Set up an automation that updates records when something happens
  • Build a simple dashboard page or a public submission form
  • Ask the built-in AI assistant questions about the data and have it build tables from a description
  • Run an AI feature that fills in information across many records automatically

What it can't, and why

  • Sign up without a browserthe sign-up page refuses requests from code; in a browser the agent signed up on its own
  • Get an API access key without a browserkeys are made only on a page in the account settings
  • Turn a new automation on without a browserit can only be switched on in the app
1 more
  • Pay for a paid plan on its ownpaying requires typing a card into a web payment form; the drive had no card to use
On its own, in a browser

Can an AI agent sign up for Airtable on its own?

Yes, in a browser, without a human. Headless GET /signup answers 403 with a PerimeterX cookie; in our agent's browser the email + name + password form went through with no visible challenge.

Every way in it offers, as our agent tried them

Ways in
Way inWhat happened
Email and passwordGot in, 4 min
Sign‑in for apps (OAuth, MCP)Got in, 3 min
Official server · 14 of 19 calls worked

Does Airtable have an MCP server, and can an agent connect to it?

Yes. Airtable has an official MCP server. The server lists 46 tools and speaks the older 25 Nov 2025 MCP spec.

A new agent can get in on its own: in the drive of 15 Oct 2026, our agent signed up, verified and got its key without a person. Through the MCP server, 14 of our agent's 19 attempts worked.

What the drive found

API–OpenAPIMCP · officialCLIllms.txtWebhooks
On its own, in a browser

How does an AI agent get an Airtable API key?

In the drive of 15 Oct 2026, our agent got its Airtable API key in a browser, without a person. Personal access tokens are made only in Builder Hub (/create/tokens/new, scopes can be preset in the URL); no API or CLI creates one. MCP OAuth: DCR is headless, the consent page is a browser step.

On its own, in a browser

Can an AI agent delete its Airtable account?

Yes, in a browser, without a human. Account settings > Delete your Airtable user account > sign in again > confirm page > native confirm dialog > POST /account/deleteAccount. Afterwards the OAuth token gets 401 on API and MCP and the email lands on sign-up. No API route. PATs were deleted in Builder Hub first (web only); bases cannot be deleted by API below Enterprise.

Reaches the checkout

Can an AI agent pay for Airtable?

Reaches the checkout: stopped at the $24 a month charge.

Reached the card form and stopped: Team, $24 a month.

Checkout: a Stripe card formAn invisible bot check loaded at checkout3-D Secure loaded

Ways to pay found: Stripe card form inside airtable.com (Stripe Elements).

It has a free plan.

What would let agents pay on their own
  1. Accept x402 or MPP on your API. Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card.Step-by-step guide
  2. List your plans on Stripe Projects. Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev).Step-by-step guide

No 402, x402 or MPP anywhere, no billing API or MCP billing tool. Workspace Upgrade > Choose Team opens a Stripe Elements card form on airtable.com: $24/seat/month + est. tax = $28.56, last button Pay and subscribe; hCaptcha and 3-D Secure scripts load, nothing visible. New account got a 14-day Team trial without a card. We stopped at the card field: no card for this drive.

Ways to pay checked 15 Oct 2026.

For the team behind Airtable.

Agents get through Airtable today. The fixes that keep it that way, highest impact first.

Through every checkpoint

The fixes, highest impact first

  1. Let agents get a token without the web UIStep-by-step guide
  2. Let signed agents load sign-up headlessStep-by-step guide
  3. Add an MCP tool to turn automations on
5 more fixes
  1. Offer a billing API or agent payment rail Step-by-step guide
  2. Support MCP (the 28 Jul 2026 spec) server/discover
  3. Return 404 for deleted records
  4. Reject attachment URLs that fail to download
  5. Publish rate-limit headers
  • Claim it free and reply next to the result.
  • A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
  • Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
See the example report
Details

Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.

Already claimed it? Open it in your dashboard.

Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.

Embed the badge on your site

Driven · L4 · Runs on its own badge

Behind the level.

The part scores and the measures behind them.

Part scores and the measures · the docs · level history · paid plans

Part scores

  • Holds up: 78 of 100, fair

Agent-ready setup

  • llms.txt: found
  • OpenAPI: not found
  • MCP server: found
  • CLI: found

Not measured in this drive: Docs match (part of an Audit).

The measures

  1. Work done100
  2. Reliability79
  3. Crash test76

The docs

229 of 241 pages read. Some gaps.

  • A getting-started page
  • An auth page
  • Newest page updated 22 Sep 2026
  • A page for 9 of 10 core tasks
  • No page on errors
  • No code examples

Read on 15 Oct 2026.

Tried as documented

6 of 6 documented ways to do the core work worked when tried.

Tried as documented
What happenedWays
Worked when tried6
Documented, didn't work0
Not tried (a paid plan, or no way to reach it)0
Worked, but not in the docs1

Level history

  1. 1 Oct 2026L1Needs a person
  2. 1 Oct 20262 drives · sign-up variesL4Runs on its own
  3. 2 Oct 2026L4Runs on its own
  4. 15 Oct 2026L4Runs on its own

Needs a paid plan

Not counted in the level. Our drive used free plan workspace on an account with a no-card 14-day Team trial.

Needs a paid plan
CapabilityPlan
Invite collaborators via APIEnterprise Scale
Sync external dataTeam and up
Run a script actionpaid
App LibraryEnterprise Scale
Audit logsEnterprise Scale
SCIMEnterprise
Delete a base via APIEnterprise
How Airtable handles an agent's mistakes · 9 probes · core run 3×

Malformed requests, a retry, a wrong key and a short burst of reads on our agent's own account, and how Airtable answered.

  1. Clear errors77
  2. Recovery100
  3. Safe retries50
  • Vaguebad single-select valueCreate a record in a table422 {"error": {"type": "INVALID_MULTIPLE_CHOICE_OPTIONS", "message": "Insufficient permissions to create new select option \"\"Maybe\"\""}} (says "insufficient permissions" rather than naming the vali
  • VagueGET a deleted recordDelete a record403 INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND (not 404; does not say the record is gone)
  • Clearunknown field nameCreate a record in a table422 {"error": {"type": "UNKNOWN_FIELD_NAME", "message": "Unknown field name: \"Nmae\""}}
  • Clearupdate a well-formed record id that does not existUpdate/edit a record's field values422 {"error": {"type": "ROW_DOES_NOT_EXIST", "message": "Record ID recAAAAAAAAAAAAAA does not exist in this table"}}
  • Clearbatch create with one invalid record (partial failure)Create a record in a table422 {"error": {"type": "INVALID_MULTIPLE_CHOICE_OPTIONS", "message": "Insufficient permissions to create new select option \"\"Maybe\"\""}}; afterwards 0 "batch ok" records exist
  • Clearrepeat the same create twice (no idempotency key)Create a record in a table200 both; 2 records named "dup test"
  • Clearrepeat a create as upsert (performUpsert fieldsToMergeOn Name) twiceCreate a record in a table200; 1 record(s) named "upsert test" (second call: {"records": [{"id": "recAKuPAglmphEfnk", "createdTime": "15 Oct 2026", "fields": {"Double": 14, "Points": 7)
  • Clearburst of 15 sequential list callsList/query/filter/sort recordsall 200: ['200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200', '200']; no RateLimit/X-RateLimit headers
  • Clearwrong tokenList/query/filter/sort records401 application/json {"error":{"type":"UNAUTHORIZED","message":"Invalid authentication token"}}

For agents and builders.

The drive as data, every checkpoint and all 116 attempts.

How an agent connects · 7 tips
  • Use the official MCP server (https://mcp.airtable.com/mcp) with a PAT as Bearer: it has tools REST lacks (automations, interfaces, forms). Initialize with protocolVersion 2025-11-25.
  • Make the PAT at /create/tokens/new?scopes=... and check the Access list shows 'All current and future bases' before Create token; a PAT with no workspace access gives 403 INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND on create base.
  • A new account has no workspace; create one in the UI before POST /v0/meta/bases.
  • Use performUpsert with fieldsToMergeOn to make creates safe to retry; plain POST duplicates.
  • Attachment by URL fails silently on a bad URL; use content.airtable.com uploadAttachment and read back.
  • Interfaces show in list_pages_for_base only after publish_interface.
  • Account delete uses a native confirm dialog: accept it.
Every checkpoint, in detail · 9 checkpoints
  1. DocsHeadlessAgent docs at /developers/agents (llms.txt at /developers/llms.txt, Markdown via .md or Accept: text/markdown), MCP tools reference, CLI page, REST reference; AI Catalog at /.well-known/ai-catalog.json.
  2. Sign upIn a browserHeadless GET /signup answers 403 with a PerimeterX cookie; in our agent's browser the email + name + password form went through with no visible challenge.
  3. VerifyIn a browserVerification mail arrived within about a minute; we opened the /auth/verifyEmail link in our agent's browser.
  4. KeyIn a browserPersonal access tokens are made only in Builder Hub (/create/tokens/new, scopes can be preset in the URL); no API or CLI creates one. MCP OAuth: DCR is headless, the consent page is a browser step.
  5. First callHeadlessGET /v0/meta/whoami with the PAT -> 200.
  6. First actionHeadlessPOST /v0/meta/bases created a base with a 4-field table; a workspace had to be made in the browser first (a new account has none and the API cannot create one).
  7. PayIn a browserNo 402, x402 or MPP anywhere, no billing API or MCP billing tool. Workspace Upgrade > Choose Team opens a Stripe Elements card form on airtable.com: $24/seat/month + est. tax = $28.56, last button Pay and subscribe; hCaptcha and 3-D Secure scripts load, nothing visible. New account got a 14-day Team trial without a card. We stopped at the card field: no card for this drive.
  8. CancelNot neededNothing to cancel: our agent started no paid plan.
  9. DeleteIn a browserAccount settings > Delete your Airtable user account > sign in again > confirm page > native confirm dialog > POST /account/deleteAccount. Afterwards the OAuth token gets 401 on API and MCP and the email lands on sign-up. No API route. PATs were deleted in Builder Hub first (web only); bases cannot be deleted by API below Enterprise.
The attempt log · 116 attempts
Attempt log
CapabilityRouteResultEvidence
MCP version: POST server/discover to https://mcp.airtable.com/mcp (no credentials)mcppartial ✓HTTP 401 application/json {"error":"UNAUTHORIZED"}; WWW-Authenticate: Bearer resource_metadata="https://mcp.airtable.com/.well-known/oauth-protected-resource". Retry with credentials once in.
Cards: MCP server card and AI Catalogapidone ✓https://airtable.com/.well-known/ai-catalog.json 200 application/json specVersion 1.0, entries: MCP server (type application/mcp-server-card+json, url https://mcp.airtable.com/mcp, capabilities list incl. automations, forms, interfaces), 8 agent skills (github.com/airtable/skills), REST API. https://mcp.airtable.com/mcp/server-card 404 JSON "MCP proxy endpoint not found"; /.well-known/mcp/server-card.json 404 html.
aipref: robots.txt Content-Usage / headerapidone ✓robots.txt (21 lines) has only User-agent: * with Allow/Disallow and Sitemap; no Content-Usage or Content-signal line; no Content-Usage response header. Disallows include /auth, /shr*, /app*/shr*, /app*/pag*/form*, /tbl*, /sso/login.
Markdown docs: Accept: text/markdown and .md URL on /developers/web/api/introductionapidone ✓Accept: text/markdown -> content-type text/markdown, vary: Accept, User-Agent, Accept-Encoding; introduction.md -> 200 text/markdown. llms.txt at https://airtable.com/developers/llms.txt (root /llms.txt 404) with sections Agents, Web API, Extensions, Scripting.
OAuth metadata: PRM and AS metadataapidone ✓PRM https://mcp.airtable.com/.well-known/oauth-protected-resource 200 (AS https://airtable.com/oauth2/v1, 7 scopes). AS metadata: registration_endpoint (DCR), client_id_metadata_document_supported: true (CIMD), S256 PKCE, resource_indicators_supported; no device_authorization_endpoint; no agent_auth block. /auth.md disallowed by robots.txt (/auth). /.well-known/ucp 404.
Docs: Agent docs: MCP tools reference, CLI, PATapidone ✓airtable.com/developers/agents/mcp/tools.md lists ~45 MCP tools (records, tables, fields, bases, interfaces, forms, automations, workspaces); mcp/cli.md documents @airtable/mcp-cli (npm) with PAT auth; mcp/other.md: DCR default, static OAuth client, PAT bearer header. Server available on all plans.
Sign up: Sign up with email + name + password at airtable.com/signupbrowserdone ✓headless refused). In browser (pw): email -> Continue -> Full name + Password -> Sign up -> landed on airtable.com home, logged in; no visible challenge; banner "Upgrade to the Team plan before your trial expires in 14 days".
Verify email: Click verification link from inboxbrowserdone ✓Mail "Please confirm your email" from noreply@airtable.com arrived within ~1 min; link /auth/verifyEmail/usr... opened in pw (--account; /auth is disallowed for all user agents in robots.txt, a crawler rule) -> "Your email has been verified!"
Session: Logged-in session after sign-upbrowserdone ✓Sign up landed in a logged-in session on airtable.com home (user avatar, workspaces).
API credentials: Create a personal access token (PAT) with 9 scopes on all resourcesbrowserdone ✓PAT created in browser at /create/tokens/new?scopes=... (docs link from developers/agents/mcp/cli.md); token shown once in a dialog. Docs offer no API/CLI to create a PAT or an OAuth app (tokens page, OAuth integrations page are web only). Two earlier tokens were created while our script failed to read the dialog; all are revoked at the end.
First API call: GET /v0/meta/whoami with PATapidone ✓200 {"id":"usrxPOEU5AzZcqyEU","email":"the agent's inbox"}; GET /v0/meta/bases 200 {"bases":[]}; GET /v0/meta/workspaces 403 INVALID_PERMISSIONS (enterprise-only list).
MCP version: server/discover with PAT, then initialize fallbackmcpdone ✓server/discover with Bearer PAT -> HTTP 400 {"error":"BAD_REQUEST","message":"Bad request"} (no -32022): legacy. initialize offering 2026-07-28 -> 200 text/event-stream, protocolVersion "2025-11-25", serverInfo airtable-mcp-server 0.0.1, capabilities tools+resources listChanged. tools/list: 46 tools.
Create workspace: Create a workspace (needed for create base)browserdone ✓New account had no workspace (MCP list_workspaces -> []); no documented non-enterprise API to create one; created in browser via "Create a workspace" -> wspZZwWTGnC9hCm5G (FREE PLAN). MCP list_workspaces then lists it.
First real action: Create a base with a Tasks table via POST /v0/meta/basesapidone ✓200 id appL7NPyyz2SfvtaC, table tblqUgvixZQQeYSvj with 4 fields and a Grid view. Needed a second PAT: the first one had no workspace access because our "Add all resources" click had not registered.
Create a base with tables and fields: POST /v0/meta/bases "AD Drive Base 1" with Tasks table (text, single select, number, long text)apidone ✓200 appL7NPyyz2SfvtaC tables[0] tblqUgvixZQQeYSvj
Create a base with tables and fields: GET /v0/meta/bases/{id}/tablesapidone ✓200 tables [('Tasks', 4)]
Create a base with tables and fields: PATCH table name/description, read backapidone ✓PATCH 200; GET tables -> name "Tasks v2"
Create a record in a table: POST /v0/{base}/{table} 2 recordsapidone200 ids ['recGnFdh1CoBFIf6T', 'recMKCl6fN5kxZ3Uk']
Create a record in a table: GET record backapidone ✓200 fields {'Status': 'Todo', 'Points': 3, 'Name': 'Task A t1', 'Notes': 'hello'}
Update a record's field values: PATCH /v0/{base}/{table} Status->Done, Points->5apidone200
Update a record's field values: GET record after PATCH (other fields kept)apidone ✓200 fields {'Status': 'Done', 'Points': 5, 'Name': 'Task A t1', 'Notes': 'hello'}
List/query/filter/sort records: GET with filterByFormula Status='Done' and sort Points descapidone ✓200 [('Task B t1', 8), ('Task A t1', 5)]
Delete a record: DELETE /v0/{base}/{table}/{id}apidone200 {'deleted': True, 'id': 'recMKCl6fN5kxZ3Uk'}
Delete a record: GET deleted recordapifailed403 {'error': {'type': 'INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND', 'message': 'Invalid permissions, or the requested model was not found. Check that both your user and your token have the required permissions, and that the model names and/or ids are correct.'}}
Delete a record: List records: deleted id absentapidone ✓200 list ids ['recGnFdh1CoBFIf6T']; recMKCl6fN5kxZ3Uk absent=True. GET on the deleted id answers 403 INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND, not 404.
Create a record in a table: POST /v0/{base}/{table} 2 recordsapidone200 ids ['recbnprzoD8wbu7BM', 'recsuykCuGD5KbZZU']
Create a record in a table: GET record backapidone ✓200 fields {'Status': 'Todo', 'Points': 3, 'Name': 'Task A t2', 'Notes': 'hello'}
Update a record's field values: PATCH /v0/{base}/{table} Status->Done, Points->5apidone200
Update a record's field values: GET record after PATCH (other fields kept)apidone ✓200 fields {'Status': 'Done', 'Points': 5, 'Name': 'Task A t2', 'Notes': 'hello'}
List/query/filter/sort records: GET with filterByFormula Status='Done' and sort Points descapidone ✓200 [('Task B t2', 8), ('Task A t2', 5)]
Delete a record: DELETE /v0/{base}/{table}/{id}apidone200 {'deleted': True, 'id': 'recsuykCuGD5KbZZU'}
Delete a record: GET deleted recordapifailed403 {'error': {'type': 'INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND', 'message': 'Invalid permissions, or the requested model was not found. Check that both your user and your token have the required permissions, and that the model names and/or ids are correct.'}}
Delete a record: List records: deleted id absentapidone ✓200 list ids ['recGnFdh1CoBFIf6T', 'recbnprzoD8wbu7BM']; recsuykCuGD5KbZZU absent=True. GET on the deleted id answers 403 INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND, not 404.
Create a record in a table: POST /v0/{base}/{table} 2 recordsapidone200 ids ['recDg5TsbI9byxYWL', 'recN3fTJZcAPJgwmq']
Create a record in a table: GET record backapidone ✓200 fields {'Status': 'Todo', 'Points': 3, 'Name': 'Task A t3', 'Notes': 'hello'}
Update a record's field values: PATCH /v0/{base}/{table} Status->Done, Points->5apidone200
Update a record's field values: GET record after PATCH (other fields kept)apidone ✓200 fields {'Status': 'Done', 'Points': 5, 'Name': 'Task A t3', 'Notes': 'hello'}
List/query/filter/sort records: GET with filterByFormula Status='Done' and sort Points descapidone ✓200 [('Task B t3', 8), ('Task A t3', 5)]
Delete a record: DELETE /v0/{base}/{table}/{id}apidone200 {'deleted': True, 'id': 'recN3fTJZcAPJgwmq'}
Delete a record: GET deleted recordapifailed403 {'error': {'type': 'INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND', 'message': 'Invalid permissions, or the requested model was not found. Check that both your user and your token have the required permissions, and that the model names and/or ids are correct.'}}
Delete a record: List records: deleted id absentapidone ✓200 list ids ['recDg5TsbI9byxYWL', 'recGnFdh1CoBFIf6T', 'recbnprzoD8wbu7BM']; recN3fTJZcAPJgwmq absent=True. GET on the deleted id answers 403 INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND, not 404.
Create a custom view/table schema programmatically (meta API: create/update tables and fields): Create Projects table + add email field, read backapidone ✓POST tables 200 tblwSgtEhoXX0dB46; POST fields 200; GET tables shows fields ['Project:singleLineText', 'Budget:currency', 'Owner email:email']
Link records between tables (linked record field): Link a task to a project, read back reciprocalapidone ✓link field fldZm7Tem6JOju0q1 created; PATCH Tasks record recGnFdh1CoBFIf6T Project=[rec4UHG4TKzc9ofA6]; GET project record shows reciprocal field {'Tasks v2': ['recGnFdh1CoBFIf6T'], 'Project': 'Apollo', 'Budget': 1200.5}
Define formula, rollup, and lookup fields: Create formula, rollup and lookup fields, read computed valuesapidone ✓POST fields formula {Points}*2 -> 200 (record shows Double=10 for Points 5); rollup SUM(values) over link -> 200, project shows Total points=5; lookup multipleLookupValues -> 200, shows Task names ["Task A t1"]. First rollup try without options -> 422 naming the 3 missing options (clear).
Comment on a record: Comment on a record and list commentsapidone ✓POST comments 200 comQuMQzDBANzIlOF; GET comments lists it: True
Attach files to a record (attachments field): Attach a file by URL (our URL was a 404)apifailedAttachment by URL: PATCH Files=[{url:"https://agentdrives.com/favicon.ico"}] answered 200 and echoed the attachment, but our URL was a 404 and the attachment silently vanished (GET after 14 s: no Files). Our URL was wrong; the 200 hid it.
Attach files to a record (attachments field): Upload an attachment (base64) to a record, read backapidone ✓POST content.airtable.com/v0/{base}/{record}/{field}/uploadAttachment (base64 note.txt) -> 200; GET record shows Files [("note.txt", 23 bytes)] with airtableusercontent URL
Subscribe to table/record change webhooks: Subscribe to table changes and fetch payloadsapidone ✓POST webhooks 200 achIN5DTyN2Klj9T6 (no notificationUrl); edit record; GET payloads 200: 1 payload(s)
Invite and manage collaborators with roles (owner/creator/editor/commenter/read-only): Add a read-only collaborator via APIapiplan_gatedPOST /v0/meta/bases/{id}/collaborators -> 422 INVALID_REQUEST_UNKNOWN (we sent an email; the docs want a user id). Docs: "Billing plans: Enterprise (pre-2023.08 legacy plan), Enterprise Scale" and scope workspacesAndBases:write (not offered to our PAT).
Create a trigger-and-action automation (e.g. record created -> send email/update record): Create automation via MCPmcpdone ✓MCP create_automation (recordCreated -> updateRecord Notes) -> automationId wflOnsFMU8HXFuU0C, isValid true, saved OFF (tool doc: "off until the user reviews and turns it on in the Airtable UI")
Create a trigger-and-action automation (e.g. record created -> send email/update record): Read automation backmcpdone ✓MCP get_automation -> trigger recordCreated, node updateRecord, deploymentStatus undeployed, configurationStatus valid
Create a trigger-and-action automation (e.g. record created -> send email/update record): Turn the automation onbrowserdone ✓Turned ON in the browser (automation editor OFF/ON toggle); get_automation -> deploymentStatus deployed. No MCP/API tool turns an automation on.
Create a trigger-and-action automation (e.g. record created -> send email/update record): Use: record created fires the automationmcpdone ✓POST record recPtw2pp2mmn6fFA via API; 15 s later GET shows Notes "auto-noted by automation"; MCP list_automation_runs -> run wfxTRS4XP8a50GRZP status success
Create a trigger-and-action automation (e.g. record created -> send email/update record): Update automation via MCPmcpdone ✓MCP update_automation name -> "AD auto note v2"; get_automation shows new name
Create a trigger-and-action automation (e.g. record created -> send email/update record): Delete automationmcpdone ✓Turned OFF in browser (MCP delete_automation refused while on: "Cannot delete this automation because it is currently on. Turn it off in the Airtable UI first."); then MCP delete_automation ok; list_automations no longer lists it: True
Create a trigger-and-action automation (e.g. record created -> send email/update record): Create, read back, delete an automation (repeat)mcpdone ✓MCP create_automation -> wflJ0M195RXrHsROe; get_automation ok; delete_automation ok (not turned on: turning on is UI-only)
Create a trigger-and-action automation (e.g. record created -> send email/update record): Create, read back, delete an automation (repeat)mcpdone ✓MCP create_automation -> wfluq75EvF1tJNCm0; get_automation ok; delete_automation ok (not turned on: turning on is UI-only)
Build an Interface (dashboard/app page) over base data: Build an interface with a grid page over Tasks, publish, read, deletemcpdone ✓MCP create_interface -> pbdUv2oAAUaeHI9Tn; create_page grid on Tasks (first try: "grid element is invalid: fieldIds: Required", clear) -> pag0WCoeelnBSnOGd; list_pages_for_base empty until publish_interface, then lists it; list_records_for_page -> 0 records; delete_interface ok, gone from list: True. Map claim GET /v0/meta/bases/{id}/interfaces -> 404 NOT_FOUND.
Docs claim: Build an Interface (dashboard/app page) over base data: GET /v0/meta/bases/{baseId}/interfacesapifailed404 {"error":"NOT_FOUND"} on our free-plan base
Ask Omni questions about base data for analysis/insights: Ask Omni a question about base databrowserdone ✓In the base, Omni panel prompt "how many records have Status Done, and the sum of Points" -> "Count: 3 Sum of Points: 15" after ~15 s, with result tables. Matches API: 3 Done records with Points 5 each (filterByFormula read).
Build a full app (tables, interfaces, automations) from a plain-language prompt with Omni: Build an app from a plain-language prompt with Omnibrowserdone ✓Omni (in-base chat) prompt to build a book loans tracker -> "Built a table Books", "Built a table Loans", "Created interface / Set up the page Current loans" in ~20 s. API GET tables: Books (Title, Author, Status singleSelect, Loans link), Loans (Borrower, Book link, Loan date, Due date, Returned checkbox). Omni asked "OK to publish this interface?"; our Approve click did not register before the page reloaded, so the interface stayed a draft (list_pages_for_base lists published ones only). The home-page "Start with Omni" onboarding input did not take our typing.
Run a Field Agent across records to analyze, generate, or research at scale: Add a field agent and run it over recordsbrowserdone ✓Omni added AI field "Genre" (field agent) to Books but said it cannot run it ("I can't trigger AI field generation from here"). Ran it in the browser: Genre header > Run field agent > "2 of 2 cells in view ~2 credits". API GET Books: Genre {state: generated, value: "Romance"} for Pride and Prejudice, "Adventure" for Moby-Dick.
Create and configure views (grid, kanban, calendar, gallery, etc.): Create a kanban viewbrowserdone ✓Browser: Create new... > Kanban > Create new view -> viwkyegl0pnbLl3PJ. MCP list_views_for_table and API GET /v0/meta/bases/{id}/tables list it (type kanban). No API or MCP tool creates a view.
Create and configure views (grid, kanban, calendar, gallery, etc.): Read views backapidone ✓API GET tables views: [{'id': 'viwZRbGmfFvt0PcBF', 'name': 'Grid view', 'type': 'grid'}, {'id': 'viwkyegl0pnbLl3PJ', 'name': 'Kanban', 'type': 'kanban'}]
Create and configure views (grid, kanban, calendar, gallery, etc.): Use the view to list recordsapidone ✓GET records ?view=viwkyegl0pnbLl3PJ -> 200, 4 records
Create and configure views (grid, kanban, calendar, gallery, etc.): Delete the view, read backbrowserdone ✓Browser: view menu > Delete view; MCP list_views_for_table -> only Grid view left (viwkyegl0pnbLl3PJ gone)
Build and publish a form for external record submission: Build and publish a form, submit to it, read the record backmcpdone ✓Browser: Create new... > Form > Try form builder -> form page pagJpUdgsfyYSZJZY, Publish (share dialog: Anyone on the web / domain / Team / base users). MCP get_form_schema lists sections and fields; MCP submit_form -> record recS1twhaqagSI7tD; API filterByFormula read shows Name "Form submission test", Status Todo, Points 2. Public form URLs (/app*/pag*/form*) are disallowed for all user agents in robots.txt, so we did not open the public link.
Share a base/view/record via a public share link: Create a public share link for a viewbrowserpartialBrowser: Share > Create link to view -> share link /appL7NPyyz2SfvtaC/shr... created (Link settings, Copy link). Not opened without auth: robots.txt disallows /shr* and /app*/shr* for all user agents, so the unauthenticated read-back was not done.
Create a base with tables and fields: Create a base, read, rename table (repeat)apidone ✓POST bases 200 appAn2GCbAMe1jmmL; GET tables 200; PATCH table name 200; read back "Tasks t2". Base delete is not in the API for non-enterprise plans (removed in browser at the end).
Create a base with tables and fields: Create a base, read, rename table (repeat)apidone ✓POST bases 200 apprn2RTDuLD9qBxa; GET tables 200; PATCH table name 200; read back "Tasks t3". Base delete is not in the API for non-enterprise plans (removed in browser at the end).
Docs claim: Create a base with tables and fields: POST /v0/meta/basesapidone ✓worked as documented in the core chain (see the cap lines)
Docs claim: Create a record in a table: POST /v0/{baseId}/{tableIdOrName}apidone ✓worked as documented in the core chain (see the cap lines)
Docs claim: Update/edit a record's field values: PATCH /v0/{baseId}/{tableIdOrName}apidone ✓worked as documented in the core chain (see the cap lines)
Docs claim: Delete a record: DELETE /v0/{baseId}/{tableIdOrName}/{recordId}apidone ✓worked as documented in the core chain (see the cap lines)
Docs claim: List/query/filter/sort records: GET /v0/{baseId}/{tableIdOrName}apidone ✓worked as documented in the core chain (see the cap lines)
Docs claim: Create and configure views (grid, kanban, calendar, gallery, etc.): GET /v0/meta/bases/{baseId}/tables (views list)apidone ✓lists views with id/name/type (read only; no API creates a view)
Docs claim: Create a record in a table: create_records_for_tablemcpdone ✓created recbH5sJUlQEfQnp6
Docs claim: Update/edit a record's field values: update_records_for_tablemcpfailedPoints -> 9
Docs claim: List/query/filter/sort records: list_records_for_tablemcpdone ✓lists it
Docs claim: Delete a record: delete_records_for_tablemcpdone ✓API list: gone
Docs claim: Create a base with tables and fields: create_basemcpdone ✓MCP create_base -> appDNG16OE4OgPYGx; list_bases shows it
Receive data via incoming webhook trigger: Receive data via an incoming webhook triggermcppartial ✓MCP create_automation with genericWebhookReceived trigger -> wfltqkkphUCSa5yJI; get_automation gives webhookUrl (hooks.airtable.com/workflows/v1/genericWebhook/...); our POST {"title":...} -> {"success":true}; test_automation_webhook_trigger -> status captured, schema body.title string. Running the nodes needs the automation turned on (UI only), not done for this one.
Sync external data sources into a table (Airtable Sync): Sync external data into a tablenoneplan_gatedMap plan: paid. Sync source setup is UI-only (no API/MCP tool); pricing page lists cross-base/external sync under paid plans (feature flags crossBaseSyncPricingPage, externalTableSync*). Our workspace is on FREE PLAN. Not attempted.
Run custom JavaScript via 'Run a script' automation action: Add a Run a script actionmcpplan_gatedMCP create_automation with a customScript action node -> isError "{\"upstreamCode\":\"INVALID_PERMISSIONS\",\"message\":\"You are not permitted to perform this operation\"}" on our free-plan workspace; map: "action unavailable on Free plan".
Connect third-party app actions/triggers (Slack, Gmail, Jira, Salesforce, Twilio, etc.): Connect a third-party actionmcpskippedMCP list_external_accounts -> [] (no Slack/Gmail/Jira connected). Connecting one needs our own account at that third party, which this drive does not have; the MCP instructions document sendToSlack, gmailSendEmail, microsoftOutlookSendEmail actions with fetch_automation_input_data.
Package and share a reusable app across the org via App Library: Publish an app to App Librarynoneplan_gatedApp Library is an Enterprise/org feature (map plan: paid); no API or MCP tool; our workspace is on the Free plan. Not attempted.
Invite and manage collaborators with roles (owner/creator/editor/commenter/read-only): Invite a collaborator in the UIbrowserskippedUI invite would send an invite email; API route is Enterprise-only (see the paid-only line). Not done in the UI for time.
Choose which AI model (OpenAI, Anthropic, Gemini, Llama) powers AI features: Check AI model choice in docsnoneskippedDocs check: web/llms.txt and agents docs have no page on choosing the AI model; map plan paid (admin panel, Enterprise). Not callable.
Admin-level governance: enable/disable AI per workspace, RBAC, audit logs: Check governance/audit logs in docsapiplan_gatedDocs: Audit log API documented (web/api/audit-logs-overview.md: "Monitor audit log events in your organization"); Enterprise admin feature. Not callable on our plan.
Programmatic user provisioning/de-provisioning and IDP-synced groups: Check SCIM provisioningapiplan_gatedDocs: SCIM 2.0 documented (web/api/scim-overview.md, create-scim-user, create-scim-group). GET https://airtable.com/scim/v2/Users with our PAT -> 403 {'schemas': ['urn:ietf:params:scim:api:messages:2.0:Error'], 'detail': 'authed user is unclaimed but administrating mult
Apply Enterprise Key Management (EKM) and data residency controls: Check EKM/data residency in docsnoneskippedDocs: no EKM or data residency page in web/llms.txt; Enterprise security feature (map plan paid).
Upgrade/downgrade workspace between Free, Team, Business, Enterprise Scale plans: Check plan upgrade pathbrowserdone ✓Docs/UI: pricing page "Team plan is available for $20/user/month when billed annually", Business $45/user/month annually, payments "via credit card for Team workspaces"; app shows Upgrade / Compare plans. No billing API. Checkout walk logged under pay.
Pay probes: 402/x402/MPP, registries, well-known, docsapidone ✓pay_probe.json: no 402 challenge on site, API or x402./mpp. subdomains; not in mpp.dev, Stripe Projects or x402 Bazaar; /.well-known/ucp 404; no docs mentions of x402/MPP; MCP has no payment tools (tools/list: 46 tools, none billing). pay_tx.json: refused, no 402 on the product's endpoint. Pricing: Team $20/user/month annually, payments by credit card; no billing API in docs. New account got a 14-day Team trial without a card ("Upgrade to the Team plan before your trial expires in 14 days").
Checkout walk: Workspace UPGRADE > Choose Team (monthly) > checkoutbrowserdone ✓Plans page /{wsp}/workspace/plans: Team $24/seat/month billed monthly ($20 annually). Checkout /{wsp}/workspace/checkout/plnVy1fpEER1b9fqH on airtable.com with Stripe Elements card iframe (js.stripe.com), promo code, optional VAT business name/tax ID; summary $24 + est. tax $4.56 = $28.56 per month; last button "Pay and subscribe". hCaptcha and 3-D Secure strings present in the page (nothing visible). No phone field. Stopped before entering a card: we have none.
MCP OAuth sign-in: DCR register + browser consent + PKCE token exchange, then MCP callapidone ✓POST /oauth2/v1/register (DCR, headless) -> client_id; /oauth2/v1/authorize in browser shows consent "[redacted]s drive is requesting Airtable access" with Everything / Custom access; Grant access -> redirect with code; POST /oauth2/v1/token (PKCE S256, resource=https://mcp.airtable.com) -> Bearer, expires_in 3600, refresh token; MCP tools/call list_bases with it -> our 4 bases. AS also advertises CIMD (client_id_metadata_document_supported: true); we used DCR because we host no client metadata document.
Way in: No key needednoneskippedNo documented no-account route: every API/MCP call needs a PAT or OAuth token (MCP 401 without Authorization).
Way in: Sign-up by APInoneskippedNot offered: no sign-up API in the docs; /auth.md is disallowed by robots.txt (/auth) and the AS metadata has no agent_auth block.
Way in: Continue with GitHubnoneskippedNot offered: the sign-up page offers Single Sign On, Google, Apple and ChatGPT, no GitHub.
Way in: Continue with GooglenoneskippedOffered ("Continue with Google") but we holds no Google account for this drive (drive sso: github only).
Way in: Email linknoneskippedThe email route asks for a password after the email (email_password); no code or link sign-in seen.
Way in: Continue with Apple / ChatGPT / Single Sign OnnoneskippedOffered on /signup; our agent has no Apple, ChatGPT or company SSO account.
Scoped key headless: Create a PAT or OAuth app through a documented API/CLInoneblockedDocs (personal-access-tokens guide, mcp/cli.md, mcp/other.md) send you to /create/tokens/new and /create/oauth in the web UI; the CLI (@airtable/mcp-cli) takes a PAT you made there. No API creates a PAT. Closest headless route: OAuth DCR (POST /oauth2/v1/register, headless) but the consent step is a browser page.
Ask Omni questions about base data for analysis/insights: Ask Omni a count (repeat)browserdone ✓New Omni chat "how many records in Tasks v2" -> 8; API list: 8 records
Ask Omni questions about base data for analysis/insights: Ask Omni a sum (repeat)browserdone ✓New Omni chat "sum of Points across Tasks v2" -> 24; API sum: 24
Create and configure views (grid, kanban, calendar, gallery, etc.): Create, read back, delete a view (repeat)browserdone ✓Browser: Create new... > Gallery -> viwU8cp2FsUfZr6iq; MCP list_views_for_table lists it as gallery; deleted in UI, gone from list: True
Create and configure views (grid, kanban, calendar, gallery, etc.): Create, read back, delete a view (repeat)browserdone ✓Browser: Create new... > Calendar -> viwEWrHI3ahpg4vCK; MCP list_views_for_table lists it as calendar; deleted in UI, gone from list: True
Run a Field Agent across records to analyze, generate, or research at scale: Run the field agent on a new record (repeat)browserdone ✓API create book "Dracula" recjAxe0fhlD26ILT; browser Genre > Run field agent; API GET -> Genre {'state': 'generated', 'value': 'Horror', 'isStale': False}
Run a Field Agent across records to analyze, generate, or research at scale: Run the field agent on a new record (repeat)browserdone ✓API create book "Dune" recdXsnQJ7MTC1KN9; browser Genre > Run field agent; API GET -> Genre {'state': 'generated', 'value': 'Science-fiction', 'isStale': False}
Build a full app (tables, interfaces, automations) from a plain-language prompt with Omni: Build an app from a prompt with Omni (repeat)browserdone ✓Omni prompt in base appAn2GCbAMe1jmmL; API GET tables -> ['Tasks t2', 'Equipment', 'Checkouts']
Build a full app (tables, interfaces, automations) from a plain-language prompt with Omni: Build an app from a prompt with Omni (repeat)browserdone ✓Omni prompt in base apprn2RTDuLD9qBxa; API GET tables -> ['Tasks t3', 'Meetings', 'Action items']
Cancel: Cancel plannoneskippedNothing to cancel: the drive started no paid plan; the account came with a 14-day Team trial that needed no card, and our workspace shows FREE PLAN. Checkout terms say "Cancel anytime in Workspace Settings to avoid further charges" (web UI); no billing API in the docs.
Use key: Use the PATapidone ✓PAT used for all REST and MCP calls this drive (whoami 200, bases, records, webhooks).
Revoke key: Delete all 4 PATsbrowserdone ✓Builder Hub > Personal access tokens > overflow > Delete token x4 (web only; no API to revoke a PAT). GET /v0/meta/whoami with the PAT afterwards -> 401 {"error":{"type":"UNAUTHORIZED","message":"Invalid authentication token"}}.
Create a base with tables and fields: Delete the baseapiplan_gatedDocs delete-base.md: DELETE /v0/meta/bases/{id} needs scope workspacesAndBases:manage and "User role: Enterprise admin". No MCP delete_base tool. Bases were removed with the account delete.
Delete account: Delete the account in the browserbrowserdone ✓/account > "Delete your Airtable user account" -> re-sign-in (email + password) -> /account/confirmDeleteAccount -> "Yes, confirm deletion of my account" -> native confirm "Please read the notice above carefully..." -> OK -> POST /account/deleteAccount, redirect to www.airtable.com. Afterwards: OAuth token GET /v0/meta/whoami 401, MCP 401, login with the email lands on sign-up "Create your profile". No API to delete an account. Our first clicks did nothing because our agent's browser dismissed the native confirm dialog by default.
Revoke OAuth grant: Revoke the MCP OAuth grantbrowserdone ✓Integrations pane listed "[redacted]s drive, Connected 13 minutes ago"; our click on it did not open its settings; the grant went with the account delete: OAuth access token -> 401 on API and MCP afterwards.

Also in Databases.