Skip to main content
Technical Preview

Overview

A client-mode connector for a curated IoT / low-code slice of the Airtable Web API under https://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:
  1. Create a PAT at airtable.com/create/tokens (or an OAuth app) with scopes data.records:read, data.records:write, plus schema.bases:read for ListBases and webhook:manage for CreateWebhook. Add the target base as a resource.
  2. Pass api_token on the MQTT request payload so headers resolve:
    • Authorization: Bearer {value.json.api_token}
  3. Store the token in Hub secrets / GET SECRET "AIRTABLE_TOKEN". Never commit real credentials.
  4. Pass baseId and tableIdOrName on each call (prefer table IDs so renames do not break paths).

Example payloads

List bases (smoke):
Create records:
List with filterByFormula (URL-encoded):
Upsert by device id:
Create webhook:

Rate limits and notes

  • Airtable enforces per-base rate limits; back off on HTTP 429.
  • Prefer table IDs over names.
  • filterByFormula must be URL-encoded; keep URLs under ~16k characters.
  • Deployable .lot must not include ADD METADATA (Hub uses hub-metadata.lot separately).

Sources

Last modified on October 21, 2026