name: airtable display_name: Airtable description: Save or retrieve records from Airtable bases auth_type: oauth2 category: database
Airtable Integration Skill
When to use
When the user wants their voice agent to create, read, update, or delete records in an Airtable base during a phone call. Common triggers:
- "save caller info to Airtable"
- "log leads in a spreadsheet"
- "create a record when someone calls"
What to do
Check connection via the connection status in your instructions, or call
check_connection("airtable").If not connected: Use
secret("airtable")in tool scripts. The system will automatically emit the correct action card (OAuth or manual PAT) based on the platform configuration. Do NOT emit action cards manually.Discover schema (Airtable supports full auto-discovery):
api_call("airtable", "GET", "/meta/bases")→ list all basesapi_call("airtable", "GET", "/meta/bases/{base_id}/tables")→ tables + fields- Use the discovered base_id, table name, and field names in tool config.
Analyze schema: Compare discovered fields with what the agent needs. If fields are missing, present numbered options and let the user decide.
If discovery fails (e.g. 401, timeout), ask the user for the base ID and table name directly.
Example tool config
{
"name": "airtable.create_record",
"description": "Save caller information to the Leads table in Airtable",
"params": [
{"name": "Name", "description": "Caller's full name", "type": "string", "required": true},
{"name": "Phone", "description": "Caller's phone number", "type": "string", "required": true},
{"name": "Notes", "description": "Summary of the call", "type": "string", "required": false}
],
"script": "let key = secret('airtable');\nlet resp = http_post_h('https://api.airtable.com/v0/appXXXXXXXX/Leads', {fields: {Name: Name, Phone: Phone, Notes: Notes}}, {'Authorization': 'Bearer ' + key, 'Content-Type': 'application/json'});\nif (resp.status >= 200 && resp.status < 300) { return 'Record saved successfully.'; }\nthrow new Error(`Airtable ${resp.status}: ${resp.body}`);",
"side_effect": true
}
IMPORTANT: Replace appXXXXXXXX and Leads with real values obtained
from api_call discovery. The example above is only a template.
Rules
- NEVER hardcode API keys in tool headers
- NEVER ask for the API key in the chat conversation
- Always use
secret("airtable")to reference credentials - PREFER using
api_callto discover the base_id and table name instead of asking - Always include
Content-Type: application/jsonin headers for POST requests - For script tools, treat non-2xx HTTP responses as failures and
throwusingresp.status/resp.bodyinstead of returning a plain-text error string - The Airtable API requires parameters nested inside a
"fields"wrapper. Name each tool parameter with the exact Airtable field name (e.g.Name,Phone) so the script can build the{"fields": {...}}payload correctly.