Overview
A client-mode connector for a curated IoT / low-code slice of the Airtable Web API underhttps://api.airtable.com:
BASE_ADDRESS is https://api.airtable.com (no trailing slash; endpoints already include /v0/...). Topics use devops/airtable/<object>/<verb>. Pass baseId and tableIdOrName on each MQTT payload (prefer table IDs).
Upsert: set
performUpsert.fieldsToMergeOn (for example ["Device Id"]). Zero matches create; one match updates; multiple matches fail.Webhooks: this package ships client create only. Airtable POSTs a lightweight ping to
notificationUrl. Inbound receive would need a separate ENABLE_SERVER connector.Prefer Hub secrets for tokens. This template has not been verified against a live Airtable base. Status remains blocked until an authenticated live smoke succeeds.
Basic Syntax
Events
Auth
Personal access token or OAuth 2.0 Bearer — default in the template:- Create a PAT at airtable.com/create/tokens (or an OAuth app) with scopes
data.records:read,data.records:write, plusschema.bases:readfor ListBases andwebhook:managefor CreateWebhook. Add the target base as a resource. - Pass
api_tokenon the MQTT request payload so headers resolve:Authorization: Bearer {value.json.api_token}
- Store the token in Hub secrets /
GET SECRET "AIRTABLE_TOKEN". Never commit real credentials. - Pass
baseIdandtableIdOrNameon each call (prefer table IDs so renames do not break paths).
Example payloads
List bases (smoke):Rate limits and notes
- Airtable enforces per-base rate limits; back off on HTTP 429.
- Prefer table IDs over names.
filterByFormulamust be URL-encoded; keep URLs under ~16k characters.- Deployable
.lotmust not includeADD METADATA(Hub useshub-metadata.lotseparately).
Sources
- API introduction
- Authentication
- Create records
- List records
- Update multiple records (upsert)
- Create a webhook
- Webhooks overview

