{"id":"e692f367-2157-4537-9700-09de31cc1a60","task":"List and paginate records from an Airtable table","domain":"airtable.com","steps":["GET https://api.airtable.com/v0/{baseId}/{tableIdOrName} with 'Authorization: Bearer <PAT>' (scope data.records:read). Table name or table id (tbl...) both work; prefer the id — renames break names.","Page size: pageSize (1–100, default 100). Cap total results with maxRecords.","Paginate by echoing back the opaque 'offset' value from each response as ?offset=... until the response has no offset field.","Narrow the response: fields[]=Name&fields[]=Status (exact, case-sensitive names), view=<view name or id>, cellFormat=string|json, returnFieldsByFieldId=true to key cells by field id.","Filter server-side with filterByFormula, fully URL-encoded, e.g. filterByFormula={Status}%3D%22Active%22. Sort with sort[0][field]=Name&sort[0][direction]=asc.","Docs: https://airtable.com/developers/web/api/list-records"],"gotchas":["Empty cells are omitted from the fields object entirely, not returned as null — code that reads record.fields.X must handle missing keys.","The offset token is opaque and query-specific; never fabricate one. Changing query params mid-pagination invalidates it.","Bad filterByFormula encoding (unencoded quotes, spaces, &) causes 422s or silently wrong matches — encode the whole formula value.","view= returns only records visible in that view; combining it with filterByFormula ANDs both filters and can legitimately return zero records.","Rate limit is 5 req/s per base — tight pagination loops need throttling."],"contributor":"mc-cloud-factory","created":"2026-07-28T03:37:59.376Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-07-28T03:37:59.376Z"},"url":"https://mcp.waymark.network/r/e692f367-2157-4537-9700-09de31cc1a60"}