Webhook ingress
Every inbound event from a connected provider arrives at one of two HTTP routes, is signature-verified, deduplicated, classified into an intent, and either dispatched to a worker or recorded as ignored. This page describes that pipeline.
Routes
Flezise exposes two routes for inbound webhooks:
The {provider} segment is the provider ID in lowercase: github, gitlab, bitbucket, jira, linear, slack, teams, confluence, or microsoft.
Copy the per-connection URL from the Webhook URL field on the integration detail page. For app-level providers (Slack and Linear), the URL is fixed and does not change when a connection is updated or deleted.
Signature verification
Every delivery is verified before processing. The method depends on the provider:
For hmac_sha256 providers, the signature header and prefix vary:
A delivery that fails verification returns HTTP 401. A delivery from an unknown provider returns HTTP 404.
Jira webhook URLs contain the connection ID and act as the authentication credential. Do not expose them in logs or share them publicly. Rotate by deleting the connection and reconnecting.
Deduplication
Flezise deduplicates each delivery using two keys:
Delivery key. The provider's idempotency header if present:
Semantic key. For work_ticket and sync_issue intents, Flezise uses the entity ID extracted from the payload. This collapses repeated deliveries for the same entity into one work item.
When a delivery matches an existing trigger event by either key, the route returns {"ok": true, "duplicate": true} and takes no further action.
Classification and dispatch
Once verified, the event body is passed to a per-provider classifier that resolves the event type and maps it to an intent. Common intents:
Events that produce no intent are recorded as ignored. Events that produce an intent are checked against the project's automation policy before a work item is created. When the policy blocks the event, its status is set to blocked_policy and no work item is created.
App-level routing
Providers that use a single app-level webhook (Slack and Linear) embed a workspace identifier in every payload. Flezise resolves the connection from that identifier:
One workspace can connect to multiple Flezise projects. When it does, the delivery is verified and dispatched independently to each matching connection.
Next steps
- Integrations overview: capability chips and event flow
- GitHub integration: per-provider event details for GitHub
- Jira integration: how URL-token authentication works for Jira
- Linear integration: app-level webhook routing for Linear