Hi,
W’re encountering a persistent issue with the Airtable node (v2.1, on n8n v1.93.0 self-hosted via Docker) when trying to update a single record. We’d appreciate any insights or suggestions.
- Update an existing Airtable record’s “Status” and “Booking Options” fields (both are Single Select fields in Airtable).
- The n8n Setup for the Airtable Update Node (“Airtable - Update to Path A Start”):
- Input to the Node: A single JSON item from a previous “Switch” node, which correctly provides the Airtable Record ID. Example input:
{
- “airtableRecordIdToUpdate”: “recUkSMINWTJgvPzw”,
- “senderId”: “9198xxxxxxxx”,
- “recipientPhoneNumberId”: “659903680537898”,
- “chosenServiceButtonId”: “select_service_A”
- }
Airtable Node Configuration:
- Operation: Update
- Resource: Record
- Mapping Column Mode: Map Each Column Manually
- Columns to match on: id
ID (using to match) - Expression:** {{$json.airtableRecordIdToUpdate}}
(The expression editor correctly previews this as the string recUkSMINWTJgvPzw)
Values to Update:
- Status: (Hardcoded string) “In Progress - A - Needs Pickup location”
- Booking Options: (Hardcoded string) “A - Pickup/Drop”
- (Field names “Status” and “Booking Options” exactly match Airtable, case-sensitive)
When the node executes with the ‘Record ID’ supplied by the expression {{$json.airtableRecordIdToUpdate}} , it fails with:
Error Code: 422
Airtable Message: “You must provide an array of up to 10 record objects, each with an "id" field and a "fields" object for cell values.”
What We’ve Found/Tried:
-
Hardcoding Works: If we delete the expression {{$json.airtableRecordIdToUpdate}} from the “ID (using to match)” field and instead type the literal string recUkSMINWTJgvPzw directly into that field, the update succeeds perfectly . The “Status” and “Booking Options” fields in Airtable are updated as expected.
-
n8n Version: We recently upgraded from n8n v1.90.2 to v1.93.0. The Airtable node version is listed as v2.1 (Latest). The issue persists on v1.93.0.
-
Airtable API Limits: We have confirmed with Airtable support that we are within a grace period for API limits, and this should not be causing the failure.
-
Input Data: The input to the Airtable node (containing airtableRecordIdToUpdate) is a single, clean JSON object as shown above.
-
Field Types: “Status” and “Booking Options” are ‘Single Select’ in Airtable. The string values being sent from n8n exactly match the defined options.
-
Simplified Update: The error persists even if we try to update only the “Status” field (removing “Booking Options” from the mapping temporarily).
-
Error Output: We have not been able to locate the exact “Request Body” JSON that n8n sends to Airtable within the error details in the n8n UI’s output panel (the “Other info” section does not seem to contain it for this specific error).
It seems the n8n Airtable v2 node, in “Update Record” operation with “Map Each Column Manually” mode, has an issue correctly constructing the required Airtable API payload ({“records”: [{“id”: “…”, “fields”: {…}}]}) when the “ID (using to match)” is derived from an expression, even if that expression correctly resolves to a valid Record ID string. It behaves as if it doesn’t recognize it as a direct ID update and thus Airtable complains about the missing array/fields structure.
-
Is there a known best practice or different expression syntax for providing the Record ID dynamically in this scenario that we might be missing for this node version?
-
Is there a way to reliably see the exact JSON payload n8n is sending to Airtable when this 422 error occurs, if it’s not readily visible in the standard error output?
-
Short of using the HTTP Request node for full manual control, is there a recommended workaround within the Airtable node itself (e.g., a specific “Mapping Column Mode” for updates that better handles dynamic IDs, or a way to structure input for “Map Each Column Manually” that we haven’t tried)?
We’re trying to avoid adding an extra “Set” node just to materialize the ID if the Airtable node should handle this directly.
Any guidance or suggestions would be greatly appreciated!
Thanks!