Overview
Add Airtable to any ModuleX agent or workflow. CRUD against the Airtable REST API (api.airtable.com/v0): base + table discovery via /meta/, record list/get/create/update/delete via /<base>/<table>.
Categories : Project & Task Management · Project Management · Workflow · Automation · Auth : Personal Access Token · Actions : 7
Authentication
Personal Access Token
Authenticate using your Airtable Personal Access Token. Create one at airtable.com/create/tokens
Required Credentials
Field Description Required Format Airtable Personal Access Token Your Airtable Personal Access Token for API authentication Yes patXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Available Actions
list_bases — List all Airtable bases accessible with your API token
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"bases" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Bases" ,
"type" : "array"
},
"count" : {
"default" : 0 ,
"title" : "Count" ,
"type" : "integer"
}
},
"required" : [
"success"
],
"title" : "ListBasesOutput" ,
"type" : "object"
}
list_tables — List all tables in a specific Airtable base with their fields and views
Parameters The ID of the Airtable base (starts with ‘app’)
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"tables" : {
"items" : {
"additionalProperties" : true ,
"type" : "object"
},
"title" : "Tables" ,
"type" : "array"
},
"count" : {
"default" : 0 ,
"title" : "Count" ,
"type" : "integer"
},
"base_id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Base Id"
}
},
"required" : [
"success"
],
"title" : "ListTablesOutput" ,
"type" : "object"
}
list_records — List records from an Airtable table with optional filtering and sorting
Parameters The ID of the Airtable base
Maximum number of records to return (1-100) (Default: 100)
Airtable formula to filter records
Sort direction (‘asc’ or ‘desc’) (Default: asc)
Name or ID of a view to use for filtering/sorting
Response {
"$defs" : {
"AirtableRecord" : {
"additionalProperties" : false ,
"properties" : {
"id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Id"
},
"fields" : {
"additionalProperties" : true ,
"title" : "Fields" ,
"type" : "object"
},
"createdTime" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Createdtime"
}
},
"title" : "AirtableRecord" ,
"type" : "object"
}
},
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"records" : {
"items" : {
"$ref" : "#/$defs/AirtableRecord"
},
"title" : "Records" ,
"type" : "array"
},
"count" : {
"default" : 0 ,
"title" : "Count" ,
"type" : "integer"
},
"table" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Table"
},
"base_id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Base Id"
}
},
"required" : [
"success"
],
"title" : "ListRecordsOutput" ,
"type" : "object"
}
get_record — Get a specific record from an Airtable table by its ID
Parameters The ID of the Airtable base
The ID of the record (starts with ‘rec’)
Response {
"$defs" : {
"AirtableRecord" : {
"additionalProperties" : false ,
"properties" : {
"id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Id"
},
"fields" : {
"additionalProperties" : true ,
"title" : "Fields" ,
"type" : "object"
},
"createdTime" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Createdtime"
}
},
"title" : "AirtableRecord" ,
"type" : "object"
}
},
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"record" : {
"anyOf" : [
{
"$ref" : "#/$defs/AirtableRecord"
},
{
"type" : "null"
}
],
"default" : null
}
},
"required" : [
"success"
],
"title" : "GetRecordOutput" ,
"type" : "object"
}
create_records — Create one or more records in an Airtable table. Batched up to 10 per request.
Parameters The ID of the Airtable base
List of {field: value} record objects
If true, Airtable converts string values to the appropriate cell types (Default: false)
Response {
"$defs" : {
"AirtableRecord" : {
"additionalProperties" : false ,
"properties" : {
"id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Id"
},
"fields" : {
"additionalProperties" : true ,
"title" : "Fields" ,
"type" : "object"
},
"createdTime" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Createdtime"
}
},
"title" : "AirtableRecord" ,
"type" : "object"
}
},
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"records" : {
"items" : {
"$ref" : "#/$defs/AirtableRecord"
},
"title" : "Records" ,
"type" : "array"
},
"count" : {
"default" : 0 ,
"title" : "Count" ,
"type" : "integer"
},
"table" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Table"
},
"base_id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Base Id"
}
},
"required" : [
"success"
],
"title" : "CreateRecordsOutput" ,
"type" : "object"
}
update_records — Update one or more records in an Airtable table. Each record must include `id`; remaining fields can be nested under `fields` or at the top level.
Parameters The ID of the Airtable base
Records to update; each is {‘id’: ‘rec…’, ‘fields’: {…}} or {‘id’: ‘rec…’, ‘field_a’: value, …}
If true, Airtable converts string values to the appropriate cell types (Default: false)
Response {
"$defs" : {
"AirtableRecord" : {
"additionalProperties" : false ,
"properties" : {
"id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Id"
},
"fields" : {
"additionalProperties" : true ,
"title" : "Fields" ,
"type" : "object"
},
"createdTime" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Createdtime"
}
},
"title" : "AirtableRecord" ,
"type" : "object"
}
},
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"records" : {
"items" : {
"$ref" : "#/$defs/AirtableRecord"
},
"title" : "Records" ,
"type" : "array"
},
"count" : {
"default" : 0 ,
"title" : "Count" ,
"type" : "integer"
},
"table" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Table"
},
"base_id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Base Id"
},
"updated_count" : {
"anyOf" : [
{
"type" : "integer"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Updated Count"
}
},
"required" : [
"success"
],
"title" : "UpdateRecordsOutput" ,
"type" : "object"
}
delete_records — Delete one or more records from an Airtable table. Batched up to 10 per request.
Parameters The ID of the Airtable base
List of record IDs to delete (each starts with ‘rec’)
Response {
"additionalProperties" : false ,
"properties" : {
"success" : {
"title" : "Success" ,
"type" : "boolean"
},
"error" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Error"
},
"deleted_ids" : {
"items" : {
"type" : "string"
},
"title" : "Deleted Ids" ,
"type" : "array"
},
"count" : {
"default" : 0 ,
"title" : "Count" ,
"type" : "integer"
},
"table" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Table"
},
"base_id" : {
"anyOf" : [
{
"type" : "string"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Base Id"
},
"deleted_count" : {
"anyOf" : [
{
"type" : "integer"
},
{
"type" : "null"
}
],
"default" : null ,
"title" : "Deleted Count"
}
},
"required" : [
"success"
],
"title" : "DeleteRecordsOutput" ,
"type" : "object"
}
Limits & Quotas
Airtable caps batch record operations at 10 records per request ;
create/update/delete_records split larger inputs automatically.
update_records accepts both shapes per record:
{"id": "rec…", "fields": {"X": 1}} (canonical) and
{"id": "rec…", "X": 1, "Y": 2} (flat top-level fields). Both
normalize to the canonical wire shape internally.
delete_records uses ?records[]=rec1&records[]=rec2 query
parameters (Airtable’s documented batch-delete contract).
Partial-batch failures surface as success=False + the count of
records that completed before the error (via updated_count /
deleted_count).
Links