Airtable Integration
🎥 Video Tutorial: Watch on YouTube
Lese, erstelle, aktualisiere und lösche Airtable-Records direkt aus deiner ChimerAI-App — ohne Python-Service, rein im Next.js-Layer über die Airtable REST API.
| Eigenschaft | Wert |
|---|---|
| Feature-Key | airtable |
| Tier | Enterprise Pro |
| Abhängigkeit | chimerai add integration |
| Env-Variablen | AIRTABLE_API_KEY, AIRTABLE_BASE_ID |
Installation
chimerai add integration # Landing Page + Shell
chimerai add airtable # Airtable Client-Lib + API-Route + Demo-Page
Generierte Dateien:
lib/airtable-client.ts ← listRecords, createRecord, updateRecord, deleteRecord
app/api/integrations/airtable/route.ts ← POST-Endpoint (list / create / update / delete)
app/api/integrations/airtable/status/route.ts ← GET Health-Check (prüft ob Key + Base ID vorhanden)
app/dashboard/integrations/airtable/page.tsx ← Demo-UI
Airtable Setup
1. Personal Access Token erstellen
- In Airtable einloggen → oben rechts auf den Account-Namen → Developer Hub (oder direkt airtable.com/create/tokens)
- Create new token
- Name vergeben (z.B.
chimerai-integration) - Scopes hinzufügen: mindestens
data.records:readunddata.records:write - Unter Access die gewünschte(n) Base(s) auswählen, auf die der Token zugreifen darf
- Create token → den angezeigten Wert (Format
pat...) sofort kopieren, er wird danach nicht mehr angezeigt
2. Base ID finden
Öffne die Base im Browser und schau in die URL:
https://airtable.com/appXXXXXXXXXXXXXX/...
^^^^^^^^^^^^^^^^^
Base ID
Alternativ: Base öffnen → Help → API documentation → die Base ID steht oben auf der Seite.
3. Environment Variables setzen
# .env
AIRTABLE_API_KEY=pat...
AIRTABLE_BASE_ID=appXXXXXXXXXXXXXX
Sicherheit: Token niemals ins Git-Repository committen. Nur die tatsächlich benötigten Scopes vergeben (kein
data.records:write, wenn nur gelesen werden muss).
API-Endpunkt
POST /api/integrations/airtable
Alle Operationen über einen einzigen Endpunkt, gesteuert via operation-Feld. baseId ist optional — fehlt es, wird AIRTABLE_BASE_ID aus der Umgebung verwendet.
Records auflisten
POST /api/integrations/airtable
Content-Type: application/json
{
"operation": "list",
"table": "Tasks",
"filterByFormula": "{Status} = 'Open'",
"maxRecords": 20
}
Antwort:
{
"records": [
{ "id": "recAbc123", "fields": { "Name": "Setup CI", "Status": "Open" }, "createdTime": "2026-07-01T10:00:00.000Z" }
]
}
Record erstellen
POST /api/integrations/airtable
Content-Type: application/json
{
"operation": "create",
"table": "Tasks",
"fields": { "Name": "Neue Aufgabe", "Status": "Open" }
}
Record aktualisieren
POST /api/integrations/airtable
Content-Type: application/json
{
"operation": "update",
"table": "Tasks",
"recordId": "recAbc123",
"fields": { "Status": "Done" }
}
Record löschen
POST /api/integrations/airtable
Content-Type: application/json
{
"operation": "delete",
"table": "Tasks",
"recordId": "recAbc123"
}
GET /api/integrations/airtable/status
Prüft ob AIRTABLE_API_KEY und AIRTABLE_BASE_ID konfiguriert sind:
{ "ok": true }
// oder
{ "ok": false, "error": "AIRTABLE_API_KEY is not configured" }
Lib-Funktionen direkt nutzen
import { listRecords, createRecord, updateRecord, deleteRecord } from '@/lib/airtable-client';
// Lesen (mit Filter und Sortierung)
const records = await listRecords('Tasks', {
filterByFormula: "{Status} = 'Open'",
sort: [{ field: 'Name', direction: 'asc' }],
});
// Erstellen
const created = await createRecord('Tasks', { Name: 'Neue Aufgabe', Status: 'Open' });
// Aktualisieren
await updateRecord('Tasks', created.id, { Status: 'Done' });
// Löschen
await deleteRecord('Tasks', created.id);
Troubleshooting
| Fehler | Ursache | Lösung |
|---|---|---|
AIRTABLE_API_KEY is not configured | Env-Variable fehlt | Variable in .env setzen, Server neu starten |
AIRTABLE_BASE_ID is not configured | Env-Variable fehlt und kein baseId im Request | AIRTABLE_BASE_ID setzen oder baseId explizit mitgeben |
Airtable error 401 | Token ungültig oder abgelaufen | Neuen Personal Access Token erstellen |
Airtable error 403 | Token hat keinen Zugriff auf die Base | Base unter Token-Einstellungen → Access hinzufügen |
Airtable error 404 | Falsche Base ID oder Tabellenname | Base ID aus der URL prüfen, Tabellennamen exakt (Groß-/Kleinschreibung) angeben |
Airtable error 422 | Ungültige Felder (z.B. Feldname existiert nicht in der Tabelle) | Feldnamen gegen das Airtable-Tabellenschema prüfen |
Rate Limits (Airtable API)
| Limit | Wert |
|---|---|
| Anfragen pro Base | 5 / Sekunde |
| Bei Überschreitung | HTTP 429, Airtable empfiehlt Backoff von 30s |
Bei höherem Volumen: Request-Batching (Airtable unterstützt bis zu 10 Records pro Create/Update-Call über die native Batch-API) oder Caching-Layer einbauen.