[{"data":1,"prerenderedAt":611},["ShallowReactive",2],{"content-query-lsf61GMK2y":3,"content-query-W4RtfFQaoh":395,"content-query-yP1cWMns5L":420,"content-query-M5aWdXgQKx":424,"content-query-eJ9XWy0CGH":431,"content-query-UP87PRcOMw":444,"content-query-7VgBfxLOWV":448,"content-query-Z6fTkbgt1D":470,"content-query-9giMhwHrGj":483,"content-query-j8GGVgf9na":490,"content-query-IVhcXRs1sR":503,"content-query-G03kJtQzJS":507,"content-query-1mvwAKmUBq":526,"content-query-zRSmsuVl55":551,"content-query-No6iPTj4EO":555,"content-query-MsdmgXewTK":565,"content-query-BMhIInEJl2":572},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"intro":10,"type":11,"layout":12,"tags":13,"body":15,"_type":388,"_id":389,"_source":390,"_file":391,"_stem":392,"_extension":393,"sitemap":394},"/docs/tutorials/n8n/webhook-trigger","n8n",false,"","n8n Webhook Trigger (No Public IP)","Receive webhooks (Stripe, GitHub, Shopify…) in self-hosted / on-prem n8n with no public IP, port forwarding or tunnel. n8n connects out over a WebSocket and is never exposed to the internet.","Receive webhooks in self-hosted n8n with no public IP, port forwarding or tunnel — n8n connects out over a WebSocket and is never exposed.","tutorial","doc",[5,14],"Webhooks",{"type":16,"children":17,"toc":381},"root",[18,56,79,117,124,144,153,159,194,202,208,256,264,270,289,297,332,342,348,375],{"type":19,"tag":20,"props":21,"children":22},"element","p",{},[23,26,32,34,41,43,54],{"type":24,"value":25},"text","To receive a webhook, n8n's built-in Webhook node needs a ",{"type":19,"tag":27,"props":28,"children":29},"strong",{},[30],{"type":24,"value":31},"public URL",{"type":24,"value":33}," — which means exposing your instance to the internet with a reverse proxy, a tunnel, or ",{"type":19,"tag":35,"props":36,"children":38},"code",{"className":37},[],[39],{"type":24,"value":40},"--tunnel",{"type":24,"value":42},". If your n8n runs ",{"type":19,"tag":27,"props":44,"children":45},{},[46,48],{"type":24,"value":47},"on-prem, behind a firewall, or on ",{"type":19,"tag":35,"props":49,"children":51},{"className":50},[],[52],{"type":24,"value":53},"localhost",{"type":24,"value":55},", that's the hard part.",{"type":19,"tag":20,"props":57,"children":58},{},[59,61,70,72,77],{"type":24,"value":60},"The ",{"type":19,"tag":62,"props":63,"children":67},"a",{"href":64,"rel":65},"https://www.npmjs.com/package/n8n-nodes-webhookrelay",[66],"nofollow",[68],{"type":24,"value":69},"Webhook Relay Trigger",{"type":24,"value":71}," removes it. Webhook Relay gives your provider a stable public URL, verifies and answers the sender, and your n8n node ",{"type":19,"tag":27,"props":73,"children":74},{},[75],{"type":24,"value":76},"opens an outbound WebSocket",{"type":24,"value":78}," to receive each event. Nothing listens for inbound connections — no public IP, no tunnel, no agent.",{"type":19,"tag":80,"props":81,"children":84},"pre",{"className":82,"code":83,"language":24,"meta":7,"style":7},"language-text shiki shiki-themes github-dark","Provider ──HTTP──▶ Webhook Relay (public URL, auth + response)\n                        │\n        n8n ──outbound WebSocket──┘   ← n8n connects out; nothing inbound\n",[85],{"type":19,"tag":35,"props":86,"children":87},{"__ignoreMap":7},[88,99,108],{"type":19,"tag":89,"props":90,"children":93},"span",{"class":91,"line":92},"line",1,[94],{"type":19,"tag":89,"props":95,"children":96},{},[97],{"type":24,"value":98},"Provider ──HTTP──▶ Webhook Relay (public URL, auth + response)\n",{"type":19,"tag":89,"props":100,"children":102},{"class":91,"line":101},2,[103],{"type":19,"tag":89,"props":104,"children":105},{},[106],{"type":24,"value":107},"                        │\n",{"type":19,"tag":89,"props":109,"children":111},{"class":91,"line":110},3,[112],{"type":19,"tag":89,"props":113,"children":114},{},[115],{"type":24,"value":116},"        n8n ──outbound WebSocket──┘   ← n8n connects out; nothing inbound\n",{"type":19,"tag":118,"props":119,"children":121},"h2",{"id":120},"_1-install-the-node",[122],{"type":24,"value":123},"1. Install the node",{"type":19,"tag":20,"props":125,"children":126},{},[127,129,134,136,142],{"type":24,"value":128},"In n8n go to ",{"type":19,"tag":27,"props":130,"children":131},{},[132],{"type":24,"value":133},"Settings → Community Nodes → Install",{"type":24,"value":135}," and enter ",{"type":19,"tag":35,"props":137,"children":139},{"className":138},[],[140],{"type":24,"value":141},"n8n-nodes-webhookrelay",{"type":24,"value":143},". Two triggers appear in the node picker.",{"type":19,"tag":20,"props":145,"children":146},{},[147],{"type":19,"tag":148,"props":149,"children":152},"img",{"alt":150,"src":151},"Webhook Relay Trigger and Email Trigger in the n8n node picker","/images/tutorials/n8n/01-node-list.png",[],{"type":19,"tag":118,"props":154,"children":156},{"id":155},"_2-add-the-credential",[157],{"type":24,"value":158},"2. Add the credential",{"type":19,"tag":20,"props":160,"children":161},{},[162,164,169,171,178,180,185,187,192],{"type":24,"value":163},"Create an ",{"type":19,"tag":27,"props":165,"children":166},{},[167],{"type":24,"value":168},"API key",{"type":24,"value":170}," at ",{"type":19,"tag":62,"props":172,"children":175},{"href":173,"rel":174},"https://my.webhookrelay.com/tokens",[66],[176],{"type":24,"value":177},"my.webhookrelay.com/tokens",{"type":24,"value":179},", then in the node click ",{"type":19,"tag":27,"props":181,"children":182},{},[183],{"type":24,"value":184},"Set up credential",{"type":24,"value":186}," and paste it into a ",{"type":19,"tag":27,"props":188,"children":189},{},[190],{"type":24,"value":191},"Webhook Relay API",{"type":24,"value":193}," credential.",{"type":19,"tag":20,"props":195,"children":196},{},[197],{"type":19,"tag":148,"props":198,"children":201},{"alt":199,"src":200},"Webhook Relay API credential in n8n","/images/tutorials/n8n/05-credential.png",[],{"type":19,"tag":118,"props":203,"children":205},{"id":204},"_3-configure-the-trigger",[206],{"type":24,"value":207},"3. Configure the trigger",{"type":19,"tag":20,"props":209,"children":210},{},[211,213,218,220,225,227,232,234,239,241,246,248,254],{"type":24,"value":212},"Give it a ",{"type":19,"tag":27,"props":214,"children":215},{},[216],{"type":24,"value":217},"Bucket",{"type":24,"value":219}," name (e.g. ",{"type":19,"tag":35,"props":221,"children":223},{"className":222},[],[224],{"type":24,"value":5},{"type":24,"value":226},") — created automatically. Optionally set ",{"type":19,"tag":27,"props":228,"children":229},{},[230],{"type":24,"value":231},"Endpoint Authentication",{"type":24,"value":233}," (Basic or token) and the ",{"type":19,"tag":27,"props":235,"children":236},{},[237],{"type":24,"value":238},"Response",{"type":24,"value":240}," returned to the sender. Open the ",{"type":19,"tag":27,"props":242,"children":243},{},[244],{"type":24,"value":245},"Public URL",{"type":24,"value":247}," field to get the URL to hand your provider (",{"type":19,"tag":35,"props":249,"children":251},{"className":250},[],[252],{"type":24,"value":253},"https://\u003Cid>.hooks.webhookrelay.com",{"type":24,"value":255},").",{"type":19,"tag":20,"props":257,"children":258},{},[259],{"type":19,"tag":148,"props":260,"children":263},{"alt":261,"src":262},"Webhook Relay Trigger parameters","/images/tutorials/n8n/02-trigger-config.png",[],{"type":19,"tag":118,"props":265,"children":267},{"id":266},"_4-activate-and-test",[268],{"type":24,"value":269},"4. Activate and test",{"type":19,"tag":20,"props":271,"children":272},{},[273,278,280,287],{"type":19,"tag":27,"props":274,"children":275},{},[276],{"type":24,"value":277},"Activate",{"type":24,"value":279}," the workflow, then send webhooks to that public URL. Requests appear in the ",{"type":19,"tag":62,"props":281,"children":284},{"href":282,"rel":283},"https://my.webhookrelay.com/buckets",[66],[285],{"type":24,"value":286},"Webhook Relay dashboard",{"type":24,"value":288}," and flow into n8n over the socket; the body, headers, query and method are all available to downstream nodes.",{"type":19,"tag":20,"props":290,"children":291},{},[292],{"type":19,"tag":148,"props":293,"children":296},{"alt":294,"src":295},"Webhooks delivered to the n8n bucket","/images/tutorials/n8n/view-events.png",[],{"type":19,"tag":298,"props":299,"children":300},"blockquote",{},[301],{"type":19,"tag":20,"props":302,"children":303},{},[304,309,311,317,319,324,326,330],{"type":19,"tag":27,"props":305,"children":306},{},[307],{"type":24,"value":308},"Test vs activate:",{"type":24,"value":310}," ",{"type":19,"tag":312,"props":313,"children":314},"em",{},[315],{"type":24,"value":316},"Test this trigger",{"type":24,"value":318}," captures a ",{"type":19,"tag":27,"props":320,"children":321},{},[322],{"type":24,"value":323},"single",{"type":24,"value":325}," event so you can build the workflow, then stops — that's expected. ",{"type":19,"tag":27,"props":327,"children":328},{},[329],{"type":24,"value":277},{"type":24,"value":331}," the workflow to receive events continuously. The connection keeps itself alive with a ping every 15 s and reconnects immediately if it ever drops.",{"type":19,"tag":20,"props":333,"children":334},{},[335,340],{"type":19,"tag":27,"props":336,"children":337},{},[338],{"type":24,"value":339},"Throttle or rate-limit delivery:",{"type":24,"value":341}," the node creates an internal output on the bucket; open it in the dashboard to pace delivery (throttling) or tune per-output options without touching the node.",{"type":19,"tag":118,"props":343,"children":345},{"id":344},"get-started",[346],{"type":24,"value":347},"Get started",{"type":19,"tag":20,"props":349,"children":350},{},[351,358,360,365,367,373],{"type":19,"tag":62,"props":352,"children":355},{"href":353,"rel":354},"https://my.webhookrelay.com/register",[66],[356],{"type":24,"value":357},"Create a free Webhook Relay account",{"type":24,"value":359},", install the node, and receive webhooks in on-prem n8n in a few minutes — no public IP required. Receiving ",{"type":19,"tag":27,"props":361,"children":362},{},[363],{"type":24,"value":364},"email",{"type":24,"value":366}," instead? See the ",{"type":19,"tag":62,"props":368,"children":370},{"href":369},"/docs/tutorials/n8n/email-trigger",[371],{"type":24,"value":372},"n8n Email Trigger",{"type":24,"value":374},".",{"type":19,"tag":376,"props":377,"children":378},"style",{},[379],{"type":24,"value":380},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":110,"depth":110,"links":382},[383,384,385,386,387],{"id":120,"depth":101,"text":123},{"id":155,"depth":101,"text":158},{"id":204,"depth":101,"text":207},{"id":266,"depth":101,"text":269},{"id":344,"depth":101,"text":347},"markdown","content:docs:tutorials:n8n:webhook-trigger.md","content","docs/tutorials/n8n/webhook-trigger.md","docs/tutorials/n8n/webhook-trigger","md",{"loc":4},[396,399,402,405,408,411,414,417],{"_path":397,"title":398},"/docs/installation/cli","CLI",{"_path":400,"title":401},"/docs/installation/docker","Docker container",{"_path":403,"title":404},"/docs/installation/docker-compose","Docker Compose",{"_path":406,"title":407},"/docs/installation/kubernetes","Kubernetes",{"_path":409,"title":410},"/docs/installation/autostart-windows","Autostart (Windows)",{"_path":412,"title":413},"/docs/installation/autostart-linux","Autostart (Linux)",{"_path":415,"title":416},"/docs/installation/autostart-macos","Autostart (MacOS)",{"_path":418,"title":419},"/docs/installation/behind-proxy","HTTP proxy configuration",[421],{"_path":422,"title":423},"/docs/webhooks/internal/localhost","Receiving webhooks on localhost",[425,428],{"_path":426,"title":427},"/docs/webhooks/public/public-destination","Forward to public URL",{"_path":429,"title":430},"/docs/webhooks/public/multiple-destination-urls","Multiple destinations",[432,435,438,441],{"_path":433,"title":434},"/docs/webhooks/auth/username-password","Username and password",{"_path":436,"title":437},"/docs/webhooks/auth/hmac","HMAC",{"_path":439,"title":440},"/docs/webhooks/auth/jwt","JWT authentication",{"_path":442,"title":443},"/docs/webhooks/auth/http-method","Auth using request method",[445],{"_path":446,"title":447},"/docs/webhooks/cron/using-cron-webhooks","Schedule recurring webhooks",[449,452,455,458,461,464,467],{"_path":450,"title":451},"/docs/service-connections","Service Connections",{"_path":453,"title":454},"/docs/service-connections/aws_s3","AWS S3",{"_path":456,"title":457},"/docs/service-connections/aws_sns","AWS SNS",{"_path":459,"title":460},"/docs/service-connections/aws_sqs","AWS SQS",{"_path":462,"title":463},"/docs/service-connections/azure","Azure",{"_path":465,"title":466},"/docs/service-connections/gcp_gcs","GCP Cloud Storage",{"_path":468,"title":469},"/docs/service-connections/gcp_pubsub","GCP Pub/Sub",[471,474,477,480],{"_path":472,"title":473},"/docs/email","Receive emails as webhooks",{"_path":475,"title":476},"/docs/email/payload","Email webhook payload",{"_path":478,"title":479},"/docs/email/filtering-and-policy","Sender filtering & policy",{"_path":481,"title":482},"/docs/email/cli","Create & poll email addresses from the CLI",[484,487],{"_path":485,"title":486},"/docs/tunnels/demoing-your-website","Demoing your website",{"_path":488,"title":489},"/docs/tunnels/regions","Regions",[491,494,497,500],{"_path":492,"title":493},"/docs/account/account-management","Account management",{"_path":495,"title":496},"/docs/account/mfa","Multi-factor authentication (MFA)",{"_path":498,"title":499},"/docs/account/team","Teams and sub-accounts",{"_path":501,"title":502},"/docs/account/billing-and-subscriptions","Billing & subscriptions",[504,506],{"_path":369,"title":505},"n8n Email Trigger (Inbound Email)",{"_path":4,"title":8},[508,511,514,517,520,523],{"_path":509,"title":510},"/docs/tutorials/cicd/jenkins-bitbucket","Jenkins and Bitbucket",{"_path":512,"title":513},"/docs/tutorials/cicd/jenkins-github","Jenkins and GitHub",{"_path":515,"title":516},"/docs/tutorials/cicd/jenkins-plugin","Jenkins Plugin",{"_path":518,"title":519},"/docs/tutorials/cicd/kubernetes-operator","Kubernetes Operator",{"_path":521,"title":522},"/docs/tutorials/cicd/terraform-atlantis","Terraform Atlantis",{"_path":524,"title":525},"/docs/tutorials/cicd/webhook-exec","Execute scripts on webhook",[527,530,533,536,539,542,545,548],{"_path":528,"title":529},"/docs/tutorials/email/airtable","Email to Airtable",{"_path":531,"title":532},"/docs/tutorials/email/api","Email to API",{"_path":534,"title":535},"/docs/tutorials/email/database","Email to Database",{"_path":537,"title":538},"/docs/tutorials/email/discord","Email to Discord",{"_path":540,"title":541},"/docs/tutorials/email/google-sheets","Email to Google Sheets",{"_path":543,"title":544},"/docs/tutorials/email/microsoft-teams","Email to Microsoft Teams",{"_path":546,"title":547},"/docs/tutorials/email/notion","Email to Notion",{"_path":549,"title":550},"/docs/tutorials/email/slack","Email to Slack",[552],{"_path":553,"title":554},"/docs/tutorials/warehouse/bigquery","GCP BigQuery",[556,559,562],{"_path":557,"title":558},"/docs/tutorials/edge/home-assistant","Home Assistant",{"_path":560,"title":561},"/docs/tutorials/edge/javascript-app","JavaScript app",{"_path":563,"title":564},"/docs/tutorials/edge/node-red","Node-RED",[566,569],{"_path":567,"title":568},"/docs/tutorials/transform/docker-to-slack","DockerHub webhook to Slack notification",{"_path":570,"title":571},"/docs/tutorials/transform/enrich-webhooks","Enrich webhooks from APIs",[573,576,579,582,585,588,591,594,597,600,602,605,608],{"_path":574,"title":575},"/docs/webhooks/functions/manipulating-json","JSON encoding",{"_path":577,"title":578},"/docs/webhooks/functions/make-http-request","Make HTTP request",{"_path":580,"title":581},"/docs/webhooks/functions/modify-request","Read, write request data",{"_path":583,"title":584},"/docs/webhooks/functions/multipart-form-data","Multipart form to JSON",{"_path":586,"title":587},"/docs/webhooks/functions/url-encoded-data","URL Encoded Form",{"_path":589,"title":590},"/docs/webhooks/functions/working-with-time","Working with time",{"_path":592,"title":593},"/docs/webhooks/functions/send-emails","Sending emails",{"_path":595,"title":596},"/docs/webhooks/functions/crypto-functions","Base64, encryption",{"_path":598,"title":599},"/docs/webhooks/functions/integrate-into-cicd","Integrating into CI/CD",{"_path":601,"title":554},"/docs/webhooks/functions/big-query",{"_path":603,"title":604},"/docs/webhooks/functions/accessing-metadata","Accessing metadata",{"_path":606,"title":607},"/docs/webhooks/functions/response-functions","Response (post-delivery) functions",{"_path":609,"title":610},"/docs/webhooks/functions","Functions",1783169493723]