{"product_id":"n8n-expense-approval-workflow-gmail-http-webhook-routing","title":"n8n Expense Approval Workflow: Gmail \u0026 HTTP Webhook Routing","description":"\u003ch3\u003eAutomatically route expense approvals with an n8n webhook, Gmail, and HTTP updates\u003c\/h3\u003e\n\u003cp\u003eThis n8n Expense Approval Workflow receives expense requests via an HTTP POST webhook, validates and routes them by amount for auto-approval or Gmail-based manager\/director decisions, then records the final outcome to an external HTTP system and emails the requester with the result.\u003c\/p\u003e\n\n\u003ch3\u003eWhat this workflow does\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cb\u003eReceives\u003c\/b\u003e an expense request through a webhook (HTTP POST) to the path \u003ccode\u003eexpense-request\u003c\/code\u003e.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cb\u003eNormalizes \u0026amp; validates\u003c\/b\u003e the incoming payload, assigning defaults such as request ID, currency, and approver emails when needed.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cb\u003eRejects invalid submissions\u003c\/b\u003e with a validation reason, or \u003cb\u003eroutes valid requests by amount\u003c\/b\u003e to one of the approval stages: auto-approval, manager approval, or director approval.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cb\u003eSends approval\/notification emails\u003c\/b\u003e using \u003cb\u003eGmail\u003c\/b\u003e and waits for the manager\/director to approve or decline within the configured time limit.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cb\u003eBuilds a final decision record\u003c\/b\u003e including approved\/rejected status, stage, approver, and reason.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cb\u003ePosts the decision\u003c\/b\u003e to your external system of record via an \u003cb\u003eHTTP request\u003c\/b\u003e (e.g., update \u003ccode\u003ehttps:\/\/example.com\/api\/expenses\/decisions\u003c\/code\u003e to your real endpoint).\u003c\/li\u003e\n  \u003cli\u003e\n\u003cb\u003eEmails the requester\u003c\/b\u003e the final status via Gmail and returns the decision record as the webhook response.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eUse cases\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eExpense intake from a custom app or form that submits \u003ccode\u003erequesterEmail\u003c\/code\u003e, \u003ccode\u003eamount\u003c\/code\u003e, \u003ccode\u003ecategory\u003c\/code\u003e, and \u003ccode\u003edescription\u003c\/code\u003e.\u003c\/li\u003e\n  \u003cli\u003eAutomating spend approval chains by amount (auto-approve small expenses; require manager\/director for larger ones).\u003c\/li\u003e\n  \u003cli\u003eKeeping a single source of truth by logging every decision to an external HTTP API.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTechnical details\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cb\u003eWebhook\u003c\/b\u003e (HTTP POST): listens on path \u003ccode\u003eexpense-request\u003c\/code\u003e.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cb\u003eNodes used\u003c\/b\u003e: \u003ccode\u003eif\u003c\/code\u003e, \u003ccode\u003eset\u003c\/code\u003e, \u003ccode\u003ecode\u003c\/code\u003e, \u003ccode\u003eswitch\u003c\/code\u003e, \u003ccode\u003egmail\u003c\/code\u003e, \u003ccode\u003ewebhook\u003c\/code\u003e.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cb\u003eGmail OAuth2\u003c\/b\u003e credential required for sending approval and notification emails.\u003c\/li\u003e\n  \u003cli\u003eConfigurable default \u003ccode\u003emanagerEmail\u003c\/code\u003e and \u003ccode\u003edirectorEmail\u003c\/code\u003e (or provided per request).\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"N8N Commerce","offers":[{"title":"Default Title","offer_id":45931041620147,"sku":"N8N-18964","price":3.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0749\/6279\/6723\/files\/2L2eDR5vxbZ0xNCJHyGIT_YDXLqnKN.png?v=1788254025","url":"https:\/\/buyflowscripts.com\/products\/n8n-expense-approval-workflow-gmail-http-webhook-routing","provider":"N8N Commerce","version":"1.0","type":"link"}