How it works
From cloud request to private result
Your private n8n keeps an always-connected outbound SignalR (WebSocket) connection to hub.nodeflex.io.
The hub relays requests in and results back out over that connection, so you never open an inbound port.
| Participant | What it is |
| Public n8n | Any n8n instance running the NodeFlex Execute Workflow node. Your own code can make the same calls with an HTTP POST. |
| Hub | hub.nodeflex.io: checks API keys, routes requests and holds results |
| Private n8n | Your self-hosted n8n, running the NodeFlex Trigger node behind your firewall |
Step by step
- Connect. The NodeFlex Trigger in your private n8n opens an outbound SignalR (WebSocket) connection to the hub and registers each workflow by its network path. The connection stays open, so nothing in your network has to be publicly reachable.
- Call. The caller sends one authenticated request. Inside n8n, that's the NodeFlex Execute Workflow node. From your own code, it's an HTTP POST with an
x-api-key header.
- Verify. The hub checks the API key and confirms the account is active and the key belongs to that path. If no private workflow is connected at the path, the request fails right away with a 404, so the caller can retry later.
- Relay. The hub pushes the request down the open connection with a new correlation ID. Your n8n acknowledges it and runs the workflow inside your network.
- Complete. When the workflow finishes, your n8n sends the result back to the hub, which keeps it briefly under the correlation ID.
- Return. With
waitForResponse set, the hub holds the request open until the result arrives or waitTimeout runs out. Otherwise it answers at once with the correlation ID, and the caller polls GET /api/workflow/results/{correlationId}: 202 while the workflow is still running, 429 with a Retry-After header if it polls too often, and 200 with the result when it's done.
# Call a private workflow from your own code
POST https://hub.nodeflex.io/api/workflow/acme/sync-orders
x-api-key: <your-api-key>
{
"payload": { "orderId": 10482 },
"waitForResponse": true,
"waitTimeout": 30
}
Sending more than one response
A private workflow can answer the request that called it with the Respond to Private Workflow node. That reply
is the result the public n8n picks up when it polls.
It isn't limited to that single reply. At any point, the private workflow can start a new workflow on the public
n8n instance through the hub, treating the public side as if it were its own private node handler. It can do
this as many times as it needs, so one private run can publish several results back to the public side.
Keeping data private
Only what you put in the payload passes through the hub. To keep sensitive data inside your own systems, send
a reference to a private store (Google Drive, OneDrive or a private file server) instead of the data itself.