Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Airtable

Scalekit connector
Open markdown

The Airtable connector lets your AI agent act in each user's Airtable account. Each user signs in to Airtable once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 26 tools.

Tools
26
What they doRead · write · destructive
9 · 11 · 69 read11 write6 destructive
Users sign in with
OAuth app
Scalekit's or your own

What you can do

  • Read records: list, filter, sort, and fetch records from any table or view
  • Manage records: create, update, and delete records, and upload files to attachment fields
  • Manage schema: read a base’s structure and create or update tables and fields
  • Comment on records: list, add, edit, and delete comments and replies on records
  • Watch for changes: create, refresh, and delete webhooks, and read past change notifications for a base

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Airtable connection

    In AgentKit > Connections, create an Airtable connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Airtable, so you don't need to register an OAuth app. To show your own app on the consent screen, use your own credentials instead.

    Use your own OAuth app

    Register your Scalekit environment with the Airtable connector so Scalekit handles the authentication flow and token lifecycle for you. The connection name you create will be used to identify and invoke the connection programmatically. Then complete the configuration in your application as follows:

    1. Create the Airtable connection in Scalekit

      • In Scalekit dashboard, go to AgentKit > Connections > Create Connection. Search for Airtable and click Create.

        Search for Airtable and create a new connection

      • In the Configure Airtable Connection dialog, copy the Redirect URI. You will need this when registering your OAuth integration in Airtable.

        Copy the redirect URI from the Configure Airtable Connection dialog

    2. Register an OAuth integration in Airtable

      • Go to the Airtable Builder Hub and navigate to OAuth integrations. Click Register an OAuth integration.

        OAuth integrations page in Airtable Builder Hub

      • Fill in your integration details (name, description, and other required fields).

      • Under OAuth redirect URLs, paste the redirect URI you copied from the Scalekit dashboard.

    3. Get your client credentials

      • On your OAuth integration page in the Airtable Builder Hub, find the Developer details section.

      • Copy the Client ID.

      • Click Generate client secret and copy the secret value immediately.

        Copy Client ID and generate a client secret from Airtable developer details

    4. Add credentials in Scalekit

      • In Scalekit dashboard, go to AgentKit > Connections and open the Airtable connection you created.

      • Enter your credentials:

        • Client ID — from the Airtable developer details
        • Client Secret — the generated secret from Airtable
        • Scopes — select the permissions your app needs (for example, data.records:read, data.records:write, schema.bases:read, schema.bases:write, webhook.manage). See Airtable OAuth scopes reference for the full list.

        Airtable credentials entered in the Scalekit connection configuration

      • Click Save.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'airtable'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Airtable:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'airtable_get_current_user',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • airtable_get_base_schemaRetrieve the full schema of an Airtable base, including all tables, fields, views, and field options.Read-only

    Get Base Schema

    Retrieve the full schema of an Airtable base, including all tables, fields, views, and field options. Useful for discovering the structure of a base before reading or writing records. Requires schema.bases:read scope.

    Inputs

    base_idstringrequired
    The ID of the Airtable base to retrieve the schema for. Found in the base URL: airtable.com/{base_id}/... — always starts with 'app'.
    includearray
    Optional array of additional data to include. Pass ["visibleFieldIds"] to include visible field IDs for each grid view in the schema response.
  • airtable_get_current_userRetrieve information about the currently authenticated Airtable user, including their user ID, and (when the token grants the relevant scopes) their email address and the list of OAuth scopes granted to the token.Read-only

    Get Current User

    Retrieve information about the currently authenticated Airtable user, including their user ID, and (when the token grants the relevant scopes) their email address and the list of OAuth scopes granted to the token. Useful for verifying which account and permissions a connection is using.

    Inputs

    This tool takes no inputs.

  • airtable_get_recordRetrieve a single record from an Airtable table by its record ID.Read-only

    Get Record

    Retrieve a single record from an Airtable table by its record ID. Returns the record's field values along with its ID and creation timestamp.

    Inputs

    base_idstringrequired
    The ID of the Airtable base containing the table. Found in the base URL: airtable.com/{base_id}/...
    record_idstringrequired
    The unique ID of the record to retrieve. Record IDs start with 'rec', e.g. recXXXXXXXXXXXXXX.
    table_id_or_namestringrequired
    The ID or name of the table containing the record. Table IDs start with 'tbl'; names are the display name.
    cellFormatstring
    Format for cell values. 'json' (default) returns structured objects; 'string' returns all values as strings. When using 'string', you must also provide timeZone and userLocale.one of jsonstring
    includeDateDependencyMetadataboolean
    If true, includes additional metadata about date dependency fields in the response.
    returnFieldsByFieldIdboolean
    If true, field keys in the response will be field IDs (e.g. fldXXXXXXXXXXXXXX) instead of field names.
  • airtable_get_viewRetrieve metadata for a single view in an Airtable table, including its name, type (grid, form, calendar, kanban, gallery, etc), and visible field order.Read-only

    Get View Metadata

    Retrieve metadata for a single view in an Airtable table, including its name, type (grid, form, calendar, kanban, gallery, etc), and visible field order. Complements airtable_list_views, which only returns summary info for all views.

    Inputs

    base_idstringrequired
    The ID of the Airtable base containing the table. Found in the base URL: airtable.com/{base_id}/...
    table_id_or_namestringrequired
    The ID or name of the table that contains the view. Table IDs start with 'tbl'; names are the display name of the table.
    view_id_or_namestringrequired
    The ID or name of the view to retrieve metadata for. View IDs start with 'viw'; names are the display name of the view.
  • airtable_list_basesList all Airtable bases accessible to the authenticated user.Read-only

    List Bases

    List all Airtable bases accessible to the authenticated user. Returns base IDs, names, and permission levels. Supports pagination via offset token when there are more bases than returned in a single response.

    Inputs

    offsetstring
    Pagination token returned from a previous list bases response. Pass this value to retrieve the next page of bases.
  • airtable_list_commentsList all comments on a specific Airtable record, ordered from newest to oldest.Read-only

    List Comments

    List all comments on a specific Airtable record, ordered from newest to oldest. Supports pagination via pageSize and offset. Returns comment text, author details, timestamps, and threading information.

    Inputs

    base_idstringrequired
    The ID of the Airtable base containing the table. Found in the base URL: airtable.com/{base_id}/...
    record_idstringrequired
    The unique ID of the record whose comments to list. Record IDs start with 'rec', e.g. recXXXXXXXXXXXXXX.
    table_id_or_namestringrequired
    The ID or name of the table containing the record. Table IDs start with 'tbl'; names are the display name of the table.
    offsetstring
    Pagination offset token returned from a previous list comments response. Pass this value to retrieve the next page of comments.
    pageSizenumber
    Number of comments to return per page. Maximum is 100. If not specified, Airtable defaults to returning all comments.
  • airtable_list_recordsList and query records from an Airtable table.Read-only

    List Records

    List and query records from an Airtable table. Supports filtering by formula, sorting, pagination, field selection, and view scoping. Returns an array of records with their field values, and an offset token for fetching subsequent pages.

    Inputs

    base_idstringrequired
    The ID of the Airtable base containing the table. Found in the base URL: airtable.com/{base_id}/...
    table_id_or_namestringrequired
    The ID or name of the table to list records from. Table IDs start with 'tbl'; names are the display name of the table.
    cellFormatstring
    Format for cell values. 'json' (default) returns structured objects; 'string' returns all values as strings. When using 'string', you must also provide timeZone and userLocale.one of jsonstring
    fieldsarray
    Array of field names or IDs to include in the response. If omitted, all fields are returned. Example: ["Name", "Status", "fldXXXXXXXXXXXXXX"]
    filterByFormulastring
    An Airtable formula to filter records. Only records where this formula evaluates to true will be returned. Example: {Status}='Active'
    maxRecordsnumber
    Maximum total number of records to return across all pages. Useful for capping large result sets.
    offsetstring
    Pagination offset token returned from a previous list request. Pass this value to retrieve the next page of records.
    pageSizenumber
    Number of records to return per page. Maximum is 100. If not specified, Airtable defaults to 100.
    returnFieldsByFieldIdboolean
    If true, field keys in the response will be field IDs (e.g. fldXXXXXXXXXXXXXX) instead of field names. Useful for fields with special characters or to avoid name-collision issues.
    timeZonestring
    IANA time zone identifier to use when cellFormat is 'string'. Required when cellFormat='string'. Example: 'America/New_York'.
    userLocalestring
    User locale for date/time formatting when cellFormat is 'string'. Required when cellFormat='string'. Example: 'en-us'.
    viewstring
    The name or ID of a view to scope results to. Records outside the view's filter and sort will be excluded.
  • airtable_list_webhook_payloadsRetrieve past webhook payloads for an Airtable webhook.Read-only

    List Webhook Payloads

    Retrieve past webhook payloads for an Airtable webhook. Useful for inspecting which changes triggered notifications and for cursor-based pagination through the payload history. Use the cursorForNextPayload value from the List Webhooks response as the cursor. Requires the webhook:manage scope.

    Inputs

    base_idstringrequired
    The ID of the Airtable base containing the webhook. Found in the base URL: airtable.com/{base_id}/...
    webhook_idstringrequired
    The unique ID of the webhook whose payloads to retrieve. Webhook IDs can be retrieved from the List Webhooks tool.
    cursornumber
    Numeric cursor for pagination. Use the cursorForNextPayload value from the List Webhooks response to retrieve payloads starting from that position.
    limitnumber
    Maximum number of payload records to return per page. Leave blank to use the Airtable API default.

Workflows

Proxy API call
const result = await actions.request({
connectionName: 'airtable',
identifier: 'user_123',
path: '/v0/meta/whoami',
method: 'GET',
});
console.log(result);
Execute a tool
const result = await actions.executeTool({
connector: 'airtable',
identifier: 'user_123',
toolName: 'airtable_list_bases',
toolInput: {},
});
console.log(result);