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
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
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/processAuthentication 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 pathTesting a Channel
# Test with curlcurl -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}'