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
Known 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
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp