Documentation Index
Fetch the complete documentation index at: https://docs.firstflow.app/llms.txt
Use this file to discover all available pages before exploring further.
Webhooks
Firstflow delivers webhook events via Svix — a signed, retried webhook platform.Enable webhooks
Webhooks are workspace-level. Events are not sent until you enable them.- Go to Integrations in the sidebar
- Click Webhooks
- Click Enable webhooks
- Add and manage endpoint URLs
- Select which events each endpoint receives
- View delivery history and retry failed events
The portal is embedded directly in the Integrations page. No external Svix account is required.
Events
| Event | When it fires |
|---|---|
experience.created | An experience is created |
experience.updated | An experience is updated (content or settings) |
experience.deleted | An experience is deleted |
experience.started | A user begins an experience |
experience.completed | A user completes all nodes in an experience |
experience.dismissed | A user dismisses an experience |
survey.submitted | A user submits a survey |
survey.answer | A user answers a survey question |
announcement.clicked | A user clicks an announcement CTA |
experience.logic_action.webhook | A flow node’s webhook action fires (see Logic actions) |
Payload format
Verifying signatures
Every webhook is signed with HMAC-SHA256. The signature is in thesvix-signature header.
Retry policy
| Attempt | Delay after failure |
|---|---|
| 1 | Immediate |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
2xx to confirm delivery.
Idempotency
Use thesvix-id header as an idempotency key to guard against duplicate deliveries on retries.
Slack
Send Firstflow events to a Slack channel.Connect Slack
- Go to Integrations in the sidebar
- Click Slack
- Click Connect to Slack
- Authorize with your Slack workspace
- Select a default channel from the dropdown
- Optionally send a test message to confirm delivery
Default channel
The default channel is set in Integrations → Slack → Default channel. Individual flow node Slack actions can target different channels (see Logic actions).Logic actions
Logic actions fire automatically when a flow node’s trigger condition matches — as the user moves through the experience in the widget. They are configured per-node in the flow editor. Each trigger group can chain multiple actions in sequence.Configuring logic actions
- Open the flow editor for an experience
- Select a node
- In the editor sidebar, expand Actions
- Click Add action and choose a type
Action types
Webhook
Webhook
Emits
experience.logic_action.webhook to your workspace webhook subscribers when the trigger fires.When to use: Push data to your backend at a specific point in the flow — for example, after a user answers a key question or clicks a CTA. Your endpoint receives the event and can update a CRM, trigger an automation, or log the interaction.Requirements: Webhooks must be enabled in Integrations. The flow editor shows a notice if webhooks are off and links to the Integrations page.Idempotency: The SDK sends an idempotencyKey per logic webhook call. The server de-duplicates calls with the same key so retries don’t double-fire.Payload:Slack
Slack
Sends a message to a Slack channel when the trigger fires.When to use: Alert your team at a specific point in the flow — for example, when a user selects a low NPS score, post to your support channel immediately.Requirements: Slack must be connected in Integrations. If not connected, the action type is shown disabled in the editor.Configuration:
- Channel — select from the channels in your connected workspace
- Message template — static text with optional dynamic variables like
{{userName}}
Push experience
Push experience
Triggers another experience to show after the current node fires.When to use: Chain experiences — for example, after completing an onboarding tour, push an NPS survey. The pushed experience must be active and still subject to its own eligibility rules (frequency, audience, schedule).
Assign to segment
Assign to segment
Adds the current user to an audience segment when the trigger fires.When to use: Dynamically classify users based on behavior — for example, assign users who clicked “interested in upgrade” to an upgrade-intent segment, then target them with a separate announcement.The segment must already exist in Audience → Segments. Membership updates on the next SDK config fetch (within 5 minutes, or immediately after
refreshConfig()).Security
- Webhook endpoints must use HTTPS
- All payloads are HMAC-SHA256 signed via Svix
- Slack OAuth tokens are stored encrypted
- Revoke webhook endpoints or disconnect Slack at any time from Integrations