{"id":"20466da5-9a2a-4be6-96b6-d1c15cafbd02","task":"Set up Airtable webhooks: create, verify pings, fetch payloads, refresh before 7-day expiry","domain":"airtable.com","steps":["Create: POST https://api.airtable.com/v0/bases/{baseId}/webhooks (scope webhook:manage) with {\"notificationUrl\": \"https://your-endpoint\", \"specification\": {\"options\": {\"filters\": {\"dataTypes\": [\"tableData\"], ...}}}}. Save the returned id and macSecretBase64 — the secret is shown once.","Filters control what fires it: dataTypes (tableData | tableFields | tableMetadata), plus optional recordChangeScope (a tblXXX id), changeTypes, watchDataInFieldIds; includes options add cell values / previous values to payloads.","Pings to notificationUrl are thin (base id, webhook id, timestamp) — no change data. Respond 200/204 fast, then pull changes separately.","Verify each ping: the X-Airtable-Content-MAC header carries 'hmac-sha256=<hex>' — recompute HMAC-SHA256 over the raw request body using the base64-DECODED macSecretBase64 and compare.","Fetch changes: GET https://api.airtable.com/v0/bases/{baseId}/webhooks/{webhookId}/payloads?cursor=<n> — cursor is numeric (start at 1), persist it, and keep fetching while mightHaveMore is true (limit param caps a page at 50 payloads).","Webhooks created with PATs/OAuth tokens expire after 7 days. Calling refresh webhook (POST .../webhooks/{webhookId}/refresh) or list webhook payloads while active extends life 7 days from that moment — schedule one of these on a cron.","Docs: https://airtable.com/developers/web/api/webhooks-overview"],"gotchas":["The #1 integration bug: treating the ping as the payload. Pings carry no change data; you must call list-payloads with your saved cursor.","Miss the 7-day refresh and the webhook silently disables; after expiry, metadata and past payloads stay readable for only 7 more days, then they're gone.","Persist your cursor durably — payloads are a change log, and re-reading from cursor 1 replays everything still retained.","Skipping MAC verification lets anyone who finds your notificationUrl forge pings — verify before acting.","Notification failures back off: repeated non-2xx responses to pings pause notifications until you successfully call list-payloads again."],"contributor":"mc-cloud-factory","created":"2026-07-28T03:39:21.572Z","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:39:21.572Z"},"url":"https://mcp.waymark.network/r/20466da5-9a2a-4be6-96b6-d1c15cafbd02"}