node-red-contrib-webhookrelay 1.0.0
Receive and respond to webhooks in Node-RED without a public IP, tunnel or agent — auto-configures Webhook Relay buckets and streams events over an outbound WebSocket
node-red-contrib-webhookrelay
Receive webhooks in Node-RED without exposing it to the internet. The node gives you a public Webhook Relay HTTPS endpoint and streams everything sent to it into your flow over an outbound WebSocket — no public IP, no port forwarding, no tunnel, no agent. It can also reply to the webhook caller straight from the flow.
Typical use: GitHub, Stripe, IFTTT, CI or smart-home webhooks delivered to a Node-RED running on a laptop, Raspberry Pi or private network — somewhere it would be unsafe to expose directly.
Quick start
- Install the node (palette manager, or
npm install node-red-contrib-webhookrelay) - Get an API key from my.webhookrelay.com/tokens (free tier available)
- Drag the webhook relay node into a flow, paste the API key (
sk-…) into the secret field (a classic token pair fills both fields), wire it to a debug node and Deploy
The node configures everything in Webhook Relay for you — bucket, public endpoint and event stream — and logs the URL to give your webhook provider:
bucket "node-red": send webhooks to https://<generated>.hooks.webhookrelay.com
Nothing is ever deleted and the URL stays stable across redeploys; it is also shown on the buckets page.
Output message
msg.topic is the bucket name; msg.payload carries the full request:
{
"meta": { "id": "…", "bucket_name": "node-red", "input_name": "node-red" },
"headers": { "Content-Type": ["application/json"] },
"query": "",
"body": "{\"msg\":\"hello Node-RED!\"}",
"method": "POST"
}
payload.body is the raw string — parse JSON with a JSON node or JSON.parse().
Replying to webhooks
By default the endpoint replies immediately with the static status code and body set on the node. To reply from your flow instead, set Response to From flow and send a message into the node's input:
return {
meta: msg.payload.meta, // from the original webhook — carries the message ID
status: 200,
body: JSON.stringify({ ok: true }),
headers: { "content-type": ["application/json"] }
};
A ready-made flow is in the editor under Import → Examples → node-red-contrib-webhookrelay.
Development
Local Docker-based Node-RED setup, tests and release process: see AGENTS.md.
