Outbound workspace webhooks#
LumenFlow can POST signed workspace events to an HTTPS endpoint you register. This is the Settings → Connections → Webhooks flow — not a separate incoming-webhook URL surface.
Configure a subscription#
- Go to Settings → Connections → Webhooks
- Click Add Webhook
- Enter a public HTTPS destination URL
- Save — LumenFlow generates a signing secret and shows it once
Store the signing secret immediately. It cannot be retrieved again; delete and recreate the subscription to rotate it.
v1 delivers the tool_invocation event kind (workspace tool runs
recorded in the action log). Each event is delivered at most
once on success, with retry on transient failures.
Test delivery#
Use Send test on a subscription card to POST a synthetic signed event through the same delivery path the worker uses. A successful test reaches your endpoint with a valid signature.
Destination rules (egress)#
Destinations must be HTTPS and resolve to a public address.
Loopback (127.0.0.1, localhost) and private-network targets are
refused at create/edit time and again at delivery time — they never
enter the retry loop.
Event payload#
Each delivery is a JSON envelope:
delivery_id— stable id for this delivery chainworkspace_id— your workspaceoccurred_at— delivery timestamp (ISO-8601)events[]— one or more events withid,kind,occurredAt, anddata
Webhook signing#
Every delivery includes:
X-Lumenflow-Signature: sha256=<hex>— HMAC-SHA256, using your subscription secret, of<timestamp>.<raw body>X-Lumenflow-Delivery-Id— the envelopedelivery_idX-Lumenflow-Timestamp— unix seconds used when signing
To verify a delivery, join the X-Lumenflow-Timestamp value, a dot and the
raw request body. Compute HMAC-SHA256 of that string with your secret, and
compare the hex digest with the value after sha256= in constant time. Reject
any delivery whose timestamp is more than five minutes from your clock. That
window is the replay guard. Verify the signature before you trust the payload.
Signature schemes by surface#
| Surface | Header value | Signed input | Versioned |
|---|---|---|---|
| Workspace webhooks | sha256=<hex> | <timestamp>.<raw body> | No |
| Job result callbacks | t=<unix>,v1=<hex> | <t>.<raw body>, keyed with the callback secret | Yes, v1 |
Engagement subscriptions use the same sha256= form as workspace webhooks.
Job result callbacks are described in the Jobs lifecycle article in the
Developer Guide.