Skip to content

HTTP Channels

HTTP Channels

Channels let you expose flows as inbound HTTP endpoints β€” turning any flow into a webhook receiver, API endpoint, or integration target.

How Channels Work

Each channel gets a dedicated port (from the CHANNEL_PORT_RANGE, default 7701-7799). When a request arrives on that port, the matching route triggers the configured flow(s).

Create a Channel

Terminal window
POST /api/channels
{
"name": "Invoice Webhook Receiver",
"kind": "http",
"authMode": "header_token",
"authToken": "your-secret-token-here",
"enabled": true
}

Response includes the allocated port.

Define Routes

Terminal window
POST /api/channels/65chan1/routes
{
"name": "Process Invoice",
"httpMethod": "POST",
"path": "/invoice/process",
"targetFlowIds": ["65flow1"],
"responseMode": "sync",
"timeoutSeconds": 30
}

The endpoint becomes accessible at:

POST http://your-host:7701/invoice/process

Authentication Modes

public β€” no authentication required. Use for public webhooks where the sender provides their own signature (validate via HMAC module in the flow).

header_token β€” requires Authorization: Bearer <token> header. The token must match the channel’s authToken field.

Response Modes

sync β€” waits for the flow to complete and returns its output as the HTTP response. Best for request/response integrations.

// Response body = the output of the flow's last step
{"invoiceId": "INV-001", "status": "processed", "pdfUrl": "https://..."}

async β€” returns immediately with the play ID. The caller can poll or subscribe via WebSocket.

{"playId": "65play1", "status": "queued"}

Request Data in Flows

The incoming request body, headers, and query params are available in the flow as input args:

{{ $prev.args.body.invoiceId }} ← request body field
{{ $prev.args.headers.authorization }} ← request header
{{ $prev.args.query.page }} ← query parameter
{{ $prev.args.method }} ← HTTP method
{{ $prev.args.path }} ← request path

Testing a Channel

Terminal window
# Test with curl
curl -X POST http://localhost:7701/invoice/process \
-H "Authorization: Bearer your-secret-token-here" \
-H "Content-Type: application/json" \
-d '{"invoiceId":"INV-001","amount":1250}'