{"article":{"id":15815420642455,"url":"https://plaid.zendesk.com/api/v2/help_center/en-us/articles/15815420642455.json","html_url":"https://support.plaid.com/hc/en-us/articles/15815420642455-How-do-I-implement-and-test-webhooks","author_id":396033157154,"comments_disabled":false,"draft":false,"promoted":false,"position":3,"vote_sum":0,"vote_count":0,"section_id":15991465989271,"created_at":"2023-07-06T10:06:15Z","updated_at":"2026-06-01T01:59:37Z","name":"How do I implement and test webhooks?","title":"How do I implement and test webhooks?","source_locale":"en-us","locale":"en-us","outdated":false,"outdated_locales":[],"edited_at":"2026-06-01T01:59:37Z","user_segment_id":null,"permission_group_id":1121774,"content_tag_ids":[],"label_names":[],"body":"<p>If you do not have a webhook endpoint configured but want to explore the use of webhooks, you can use a tool such as <a href=\"https://requestbin.com/\">Request Bin</a> to quickly and easily set up a webhook listener endpoint to provide to <a href=\"https://plaid.com/docs/api/sandbox/#sandboxpublic_tokencreate\"><code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">/sandbox/public_token/create</code></a>. When directing webhook traffic to third-party tools, make sure you are using Plaid's Sandbox environment and not sending out live data.</p>\n<p>If you would like to implement webhooks with Plaid, you need to follow these steps:</p>\n<ol>\n<li>\n<strong>Set up a dedicated endpoint on your server</strong>: This endpoint should be able to receive POST requests. This is where Plaid will send the webhook notifications.</li>\n<li>\n<strong>Provide the endpoint URL to Plaid</strong>: This is done via the <code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">webhook</code> parameter of <code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">/link/token/create</code> when adding an Item. The URL must be in the standard format of <code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">http(s)://(www.)domain.com/</code>.</li>\n<li>\n<strong>Handle the incoming webhooks</strong>: When Plaid sends a webhook to your endpoint, it will be a POST request with a raw JSON payload. You need to write code to handle these incoming requests. This could be as simple as writing the webhook into a queue or reliable storage, or it could involve more complex processing depending on your needs.</li>\n<li>\n<strong>Test your webhooks</strong>: Plaid allows you to test webhooks in the Sandbox environment. You can use the <code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">/sandbox/item/fire_webhook</code> endpoint to fire a webhook on demand for testing purposes. Note that not all webhook types are available to test in our Sandbox environment. See our <a href=\"https://plaid.com/docs/sandbox/#webhooks\">Sandbox Overview</a> for more details.</li>\n</ol>\n<p>Remember to design your application to handle duplicate and out-of-order webhooks. Ensure idempotency on actions you take when receiving a webhook. If you drive application state with webhooks, ensure your code doesn't rely on a specific order of webhook receipt.</p>\n<p>Additionally, for real-life examples of handling webhooks that illustrate how to handle sample transactions and Item webhooks, see <a href=\"https://github.com/plaid/pattern/blob/master/server/webhookHandlers/handleTransactionsWebhook.js\">handleTransactionsWebhook.js</a> and <a href=\"https://github.com/plaid/pattern/blob/master/server/webhookHandlers/handleItemWebhook.js\">handleItemWebhook.js</a>. These files contain webhook handling code for the Node-based <a href=\"https://github.com/plaid/pattern\">Plaid Pattern</a> sample app. You can <a href=\"https://plaid.com/docs/api/webhooks/#example-in-plaid-pattern\">learn more here</a>.</p>\n<p>For any more information please see the <a href=\"https://plaid.com/docs/api/webhooks/\">webhook section</a> of our docs.</p>","user_segment_ids":[]}}