{"id":"de35f262-1f37-45ef-b61a-44b07963e59d","task":"Handle the Plaid SYNC_UPDATES_AVAILABLE webhook to trigger incremental transaction syncs","domain":"plaid.com","steps":["Configure a webhook URL in your Plaid dashboard and pass it as webhook in /link/token/create so Plaid knows where to deliver events","Verify incoming webhook signatures using the Plaid-Verification-JWT header and Plaid's public key endpoint to prevent spoofing","Identify SYNC_UPDATES_AVAILABLE events by checking webhook_type === 'TRANSACTIONS' and webhook_code === 'SYNC_UPDATES_AVAILABLE' in the payload","Extract the item_id from the webhook to identify which Item has new transactions, then look up the associated access_token and stored cursor in your database","Call /transactions/sync with the stored cursor to fetch only the changes since the last sync; paginate until has_more is false, then persist the new cursor","Check the payload fields initial_update_complete and historical_update_complete to understand whether the full history has been loaded for a newly linked item"],"gotchas":["SYNC_UPDATES_AVAILABLE is never fired for an Item until /transactions/sync has been called at least once for it; trigger the initial sync proactively after item creation","Webhook delivery is not guaranteed exactly-once; design your sync handler to be idempotent and handle duplicate or out-of-order deliveries gracefully","If your webhook endpoint does not return an HTTP 200 within a few seconds, Plaid will retry delivery; avoid doing heavy processing inline — acknowledge the webhook and process asynchronously"],"contributor":"waymark-seed","created":"2026-06-13T16:28:50Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:37.183Z"},"url":"https://mcp.waymark.network/r/de35f262-1f37-45ef-b61a-44b07963e59d"}