| name | airtable |
| version | 0.1.0 |
| author | devclaw |
| description | Airtable API — databases, records, and bases management |
| category | data |
| tags | ["airtable","database","spreadsheet","records","no-code"] |
| requires | {"bins":["curl","jq"],"env":["AIRTABLE_API_KEY","AIRTABLE_BASE_ID"]} |
Airtable
Interact with Airtable using their REST API.
Setup
-
Check existing credentials:
vault_get airtable_api_key
vault_get airtable_base_id
-
If not configured:
Keys are auto-injected as $AIRTABLE_API_KEY and $AIRTABLE_BASE_ID.
List Records
curl -s "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" | jq '.records[]'
curl -s "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName?view=Grid%20view" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" | jq '.records[]'
curl -s "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName?filterByFormula={Status}='Active'" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" | jq '.records[]'
curl -s "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName?maxRecords=100&pageSize=50" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" | jq '.records[]'
Get Single Record
curl -s "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName/recXXXXXX" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" | jq '.'
Create Record
curl -s -X POST "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"records": [{
"fields": {
"Name": "John Doe",
"Email": "john@example.com",
"Status": "Active"
}
}]
}' | jq '.records[0]'
Update Record
curl -s -X PATCH "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"records": [{
"id": "recXXXXXX",
"fields": {"Status": "Completed"}
}]
}'
curl -s -X PUT "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName/recXXXXXX" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fields": {"Name": "Updated Name", "Email": "new@email.com"}}'
Delete Record
curl -s -X DELETE "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName?records[]=recXXXXXX" \
-H "Authorization: Bearer $AIRTABLE_API_KEY"
Batch Operations
curl -s -X POST "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"records": [
{"fields": {"Name": "User 1"}},
{"fields": {"Name": "User 2"}}
]
}'
curl -s -X PATCH "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName" \
-H "Authorization: Bearer $AIRTABLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"records": [
{"id": "rec1", "fields": {"Status": "Done"}},
{"id": "rec2", "fields": {"Status": "Done"}}
]
}'
Filter Formulas
curl -s "https://api.airtable.com/v0/$AIRTABLE_BASE_ID/TableName?filterByFormula=AND({Status}='Active',{Score}>50)" \
-H "Authorization: Bearer $AIRTABLE_API_KEY"
Tips
- Personal Access Tokens (patxxx) are recommended over API keys
- Table names with spaces must be URL encoded
- Max 10 records per batch operation
- Rate limit: 5 requests/second
- Use
sort parameter: ?sort[0][field]=Name&sort[0][direction]=desc
Triggers
airtable, airtable api, airtable records, database, spreadsheet