airtableAirtable API integration with managed OAuth. Manage bases, tables, and records. Use this skill when users want to read, create, update, or delete Airtable records, or query data with filter formulas. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Install via ClawdBot CLI:
clawdbot install byungkyu/airtableAccess the Airtable API with managed OAuth authentication. Manage bases, tables, and records with full CRUD operations.
# List records from a table
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/airtable/v0/{baseId}/{tableIdOrName}?maxRecords=100')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
https://gateway.maton.ai/airtable/{native-api-path}
Replace {native-api-path} with the actual Airtable API endpoint path. The gateway proxies requests to api.airtable.com and automatically injects your OAuth token.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your Airtable OAuth connections at https://ctrl.maton.ai.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=airtable&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'airtable'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "airtable",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple Airtable connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/airtable/v0/appXXXXX/TableName')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If omitted, the gateway uses the default (oldest) active connection.
GET /airtable/v0/meta/bases
GET /airtable/v0/meta/bases/{baseId}/tables
GET /airtable/v0/{baseId}/{tableIdOrName}?maxRecords=100
With view:
GET /airtable/v0/{baseId}/{tableIdOrName}?view=Grid%20view&maxRecords=100
With filter formula:
GET /airtable/v0/{baseId}/{tableIdOrName}?filterByFormula={Status}='Active'
With field selection:
GET /airtable/v0/{baseId}/{tableIdOrName}?fields[]=Name&fields[]=Status&fields[]=Email
With sorting:
GET /airtable/v0/{baseId}/{tableIdOrName}?sort[0][field]=Created&sort[0][direction]=desc
GET /airtable/v0/{baseId}/{tableIdOrName}/{recordId}
POST /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json
{
"records": [
{
"fields": {
"Name": "New Record",
"Status": "Active",
"Email": "test@example.com"
}
}
]
}
PATCH /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json
{
"records": [
{
"id": "recXXXXXXXXXXXXXX",
"fields": {
"Status": "Completed"
}
}
]
}
PUT /airtable/v0/{baseId}/{tableIdOrName}
Content-Type: application/json
{
"records": [
{
"id": "recXXXXXXXXXXXXXX",
"fields": {
"Name": "Updated Name",
"Status": "Active"
}
}
]
}
DELETE /airtable/v0/{baseId}/{tableIdOrName}?records[]=recXXXXX&records[]=recYYYYY
Use pageSize and offset for pagination:
GET /airtable/v0/{baseId}/{tableIdOrName}?pageSize=50&offset=itrXXXXXXXXXXX
Response includes offset when more records exist:
{
"records": [...],
"offset": "itrXXXXXXXXXXX"
}
const response = await fetch(
'https://gateway.maton.ai/airtable/v0/appXXXXX/TableName?maxRecords=10',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
import os
import requests
response = requests.get(
'https://gateway.maton.ai/airtable/v0/appXXXXX/TableName',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
params={'maxRecords': 10}
)
apptbl (can also use table name)reccurl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.| Status | Meaning |
|--------|---------|
| 400 | Missing Airtable connection |
| 401 | Invalid or missing Maton API key |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from Airtable API |
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
airtable. For example:https://gateway.maton.ai/airtable/v0/{baseId}/{tableIdOrName}https://gateway.maton.ai/v0/{baseId}/{tableIdOrName}Generated Mar 1, 2026
Small businesses can use this skill to sync customer data from Airtable with other tools via API calls. For example, automatically updating contact records when a new lead is added, enabling real-time tracking of sales pipelines without manual entry.
Retailers can manage product stock levels by reading and updating Airtable records for inventory. This allows for automated alerts when items are low, integration with e-commerce platforms, and streamlined order fulfillment processes.
Teams can automate project management by creating, updating, and deleting tasks in Airtable based on triggers from other apps. This helps in tracking deadlines, assigning resources, and generating reports without manual intervention.
Organizations can handle event sign-ups by creating records for attendees in Airtable and querying data with filters. This enables real-time updates on attendance, sending confirmation emails, and managing waitlists efficiently.
Media companies can use this skill to schedule and update content posts in Airtable, integrating with publishing tools. It allows for collaborative editing, tracking publication status, and automating content distribution workflows.
Offer a service that integrates Airtable with other business apps using this skill, charging a monthly fee for setup and maintenance. This helps clients automate data flows between systems, reducing manual work and errors.
Provide consulting to businesses on leveraging the Airtable skill for specific use cases, with revenue from hourly rates or project fees. This includes building custom scripts, optimizing API calls, and training teams on implementation.
Develop a platform that uses this skill to pull data from Airtable for analytics and reporting, monetizing through tiered subscriptions. This enables businesses to gain insights from their Airtable bases without coding expertise.
💬 Integration Tip
Ensure the MATON_API_KEY is securely stored in environment variables and test connection management via ctrl.maton.ai before full deployment to avoid authentication issues.
Use the @steipete/oracle CLI to bundle a prompt plus the right files and get a second-model review (API or browser) for debugging, refactors, design checks, or cross-validation.
Manage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database). Use when a user asks Clawdbot to add a task to Things, list inbox/today/upcoming, search tasks, or inspect projects/areas/tags.
Local search/indexing CLI (BM25 + vectors + rerank) with MCP mode.
Use when designing database schemas, writing migrations, optimizing SQL queries, fixing N+1 problems, creating indexes, setting up PostgreSQL, configuring EF Core, implementing caching, partitioning tables, or any database performance question.
Connect to Supabase for database operations, vector search, and storage. Use for storing data, running SQL queries, similarity search with pgvector, and managing tables. Triggers on requests involving databases, vector stores, embeddings, or Supabase specifically.
Query, design, migrate, and optimize SQL databases. Use when working with SQLite, PostgreSQL, or MySQL — schema design, writing queries, creating migrations, indexing, backup/restore, and debugging slow queries. No ORMs required.