Webhooks
Inbound webhook triggers for workflows via the API.
Endpoints for webhooks under /api/v1/webhooks.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/webhooks | List webhooks |
| GET | /api/v1/webhooks/{id} | Get a webhook |
| POST | /api/v1/webhooks | Prepare a signed Sentry endpoint (Admin/Owner) |
Listing webhooks
GET /api/v1/webhooks returns { webhooks[], links[] }; pass ?workflowId= to filter. Each
links entry carries the public invoke URL. GET /api/v1/webhooks/{id} returns a single webhook.
Generic webhooks are provisioned when you publish a workflow destination containing a webhook
trigger (see Deploying). Production and previews have separate URLs.
Signed Sentry sources
An Admin or Owner can also prepare the endpoint from Manage versions → Add event source → Signed Sentry webhook in the selected workflow destination. Save the Sentry trigger's connection first, then choose the trigger and provide its organization and project slugs.
POST /api/v1/webhooks with provider: "sentry" requires workflowId, organizationSlug,
projectSlug, and a workspace Sentry credentialId or signingSecret. To prepare a named
destination, also pass executionTargetId and its saved Sentry trigger's nodeId.
The new endpoint remains off until that destination is approved and published with the selected
connection. Save the returned invokeUrl; only the token digest is retained for later reads.
Sentry invocation uses /api/integrations/sentry/{token} and requires the Sentry HMAC signature.
Each destination owns its integration identity and deduplication receipts. Publishing updates the
version behind the existing URL; switching off the destination stops ingress. The independent
Sentry ingress feature switch must also be enabled.
Triggering a workflow
The public invocation endpoint lives outside /api/v1:
POST https://confluye.run/api/webhooks/<token>
The token is part of the URL — no bearer key is used to invoke it. All HTTP verbs are accepted
(GET/POST/PUT/PATCH/DELETE). The payload is the JSON body (or query string for GET),
merged with a _webhook object describing the method, query, and headers (sensitive headers like
authorization, cookie, and x-api-key are stripped).
Responses
Runs execute inline against a synchronous budget (30s by default):
- If a Response node captured a reply, its status, headers, and body are returned.
- If the run pauses on a durable Wait or approval, the endpoint returns
202 { runId, status: "waiting" }and a worker resumes it later. - If the budget is exceeded, it degrades to
202 { status: "processing" }. - A legacy workflow with no Response node returns
{ token, run }.
