Connect Bubble to Flock using either incoming webhooks (outbound notifications, no OAuth) or Flock's Bot API (bidirectional, permanent Bearer token). Both methods use the Bubble API Connector with credentials kept private in a Backend Workflow. Flock's webhook path takes about 20 minutes; the Bot API path with channel listing and rich attachments takes 45–60 minutes. Both require Bubble Starter plan for server-side routing.
| Fact | Value |
|---|---|
| Tool | Flock |
| Category | Communication |
| Method | Backend Workflow (Webhooks) |
| Difficulty | Beginner |
| Time required | 20–60 minutes depending on method |
| Last updated | July 2026 |
Two integration tiers for every Bubble use case
Flock's developer platform offers meaningfully more than Chanty's webhook-only surface, while still being simpler than Slack's sprawling API. The two tiers let you start small and expand:
**Tier 1 — Incoming webhooks:** One webhook URL per channel, no OAuth, no token expiry. In Bubble, you add a single API Connector call and trigger it from a Backend Workflow. Setup takes about 20 minutes. This is the right choice when you need operational alerts (new orders, failed payments, error counts) posted to a fixed Flock channel.
**Tier 2 — Bot API:** Create a Flock App at dev.flock.com, get a permanent bot token (does not expire unless revoked), and add it to Bubble's API Connector as a private Bearer header. With the Bot API you can call `GET /channels.list` to discover all channels the bot has joined, store those IDs in a Bubble Option Set, and send messages to dynamically selected channels. The Bot API also supports rich attachment objects — cards with a colored sidebar, a title, description, and clickable action buttons — making Flock alerts much more information-dense than plain text webhooks.
For inbound events — Flock messages triggering actions in Bubble — you register an outgoing webhook endpoint in your Flock App settings, pointing to a Bubble Backend Workflow URL. Bubble's 'Detect request data' parses the incoming JSON, and your workflow can respond: create a record, send an email, update a user's status. Inbound webhooks require the Bubble Starter plan.
Flock's Free plan allows 10,000 messages per month, which is sufficient for most Bubble apps at early scale. If you exceed this or need priority support, the Pro plan is $4.50 per user per month.
Integration method
Outbound notifications via Flock incoming webhook (primary method) plus optional bidirectional Bot API — both routed through Bubble Backend Workflows to keep credentials server-side.
Prerequisites
- A Flock account with admin access to the workspace (required to create apps and webhooks at dev.flock.com)
- A Bubble app on the Starter plan ($32/month) or higher — Backend Workflows are not available on the Free plan
- The API Connector plugin by Bubble installed in your app (free, from the Bubble Plugin Marketplace)
- For the Bot API tier: the bot must be invited to every Flock channel it needs to post in before the API calls will succeed
- Basic familiarity with Bubble Workflows, the Workflow editor, and Option Sets
Step-by-step guide
Create a Flock App and get your webhook URL or bot token
Open your browser and go to `https://dev.flock.com`. Sign in with your Flock account. Click 'Create App'. Give the app a name — for example, 'Bubble Notifications'. This is what will appear as the sender name when messages arrive in Flock. **For incoming webhooks (Tier 1):** In your new app's settings, click 'Incoming Webhooks' in the left menu. Click 'New Webhook'. Select the Flock channel where messages should appear (e.g., #alerts). Click 'Create'. Flock generates a webhook URL in the format: `https://api.flock.com/hooks/sendMessage/XXXXXXXXXX`. Copy this URL — it contains the authentication token in the path and must be treated as a secret. **For the Bot API (Tier 2):** In your Flock App settings, click 'Bots' in the left menu. Click 'Create Bot'. Give the bot a name and optionally an avatar. After saving, Flock shows you a permanent bot token — a long string starting with something like `flock-bot-...`. Copy this token. It does not expire unless you revoke it in the Flock developer portal. Before the bot can post to a Flock channel, a workspace admin must invite the bot by its name into that channel. In Flock, open the channel → click the Members icon → Add Member → search for your bot's name → invite it. Do this for every channel the bot needs to reach.
Pro tip: Create separate webhook URLs for each notification type (one for #sales, one for #ops, one for #errors). Each webhook is tied to a specific channel at creation time, making it easy to disable or rotate one channel's notifications independently.
Expected result: You have either a Flock incoming webhook URL (starts with https://api.flock.com/hooks/sendMessage/) or a permanent bot token, depending on the tier you chose. For Bot API: the bot has been invited to at least one Flock channel.
Install the API Connector and configure the Flock call
In your Bubble editor, open the Plugins tab. Click 'Add plugins', search for 'API Connector' (by Bubble), and install it. It is free. Once installed, click the API Connector in the Plugins panel and then click 'Add another API'. Name the group 'Flock'. **Incoming webhook configuration:** Click 'Add another call' inside the Flock group. Name it 'Send Notification'. Set method to POST. In the URL field, enter the webhook URL directly or as a dynamic private parameter (see Step 3 of the Chanty guide pattern for the Option A/B decision). Set the Content-Type header to `application/json`. For the body, add a parameter named `text`. A minimal body looks like: ```json { "text": "[text]" } ``` Flock also supports the `channel` parameter in the webhook body to override the default channel, using the format `g:channelId` (for group channels) or `u:userId` (for direct messages). **Bot API configuration:** Click 'Add another call' inside the Flock group. Name it 'Send Message'. Set method to POST. URL: `https://api.flock.com/v2/chat.sendMessage`. Add a shared header at the group level: - Key: `Authorization` - Value: `Bearer [bot_token]` - Check the 'Private' checkbox Set Content-Type to `application/json`. The body for a simple text message: ```json { "to": "[channel_id]", "text": "[message_text]" } ``` For rich attachments, the body expands to include an `attachments` array (see Step 4 for the full format). After configuring the call, click 'Initialize call'. Bubble needs a real successful HTTP response to detect the response schema and confirm the call works. For the webhook path: temporarily paste the actual webhook URL and a test message text, then click Initialize. A successful Flock webhook response returns HTTP 200. For the Bot API: ensure the bot token is in the header and the `to` field contains a valid channel ID, then Initialize. After initialization, you can switch URL or parameters back to dynamic references.
1{2 "webhook_call": {3 "method": "POST",4 "url": "https://api.flock.com/hooks/sendMessage/<private-token-in-url>",5 "headers": {6 "Content-Type": "application/json"7 },8 "body": {9 "text": "<dynamic message text>"10 }11 },12 "bot_api_call": {13 "method": "POST",14 "url": "https://api.flock.com/v2/chat.sendMessage",15 "headers": {16 "Authorization": "Bearer <private-bot-token>",17 "Content-Type": "application/json"18 },19 "body": {20 "to": "<dynamic channel_id>",21 "text": "<dynamic message text>"22 }23 }24}Pro tip: The Initialize call step requires Bubble to receive a real HTTP 200 response from Flock. If initialization fails with 'There was an issue setting up your call', confirm the webhook URL or bot token is correct, and that the bot has been invited to the target channel for Bot API calls.
Expected result: The Flock API group in your API Connector shows a green checkmark on the 'Send Notification' or 'Send Message' call. Bubble has confirmed the call shape. The Private credential is stored and will not appear in browser requests.
(Bot API only) List channels and store IDs in a Bubble Option Set
One of the Bot API's key advantages over incoming webhooks is the ability to send to different Flock channels dynamically — your Bubble app logic can decide at runtime which channel should receive a message. To do this, you need to know each channel's ID (Flock channels use a string ID like `g:xxxxxxxxxxxx`). Add another call inside your Flock API Connector group. Name it 'List Channels'. Set method to GET. URL: `https://api.flock.com/v2/channels.list`. The shared Authorization header applies automatically. Click Initialize call — Flock will return a list of channels the bot has joined, each with a `uid` (the channel ID) and `name`. Now create a Bubble Option Set to store these IDs. Go to Data → Option Sets → click the plus icon to add a new Option Set. Name it 'Flock Channels'. Add attributes: 'Channel Name' (text) and 'Channel ID' (text). Add one option per channel: name it (e.g., 'Sales', 'Ops', 'Errors') and paste the corresponding `uid` from the API response. In your Backend Workflow's 'Send Message' action, set the `to` body parameter to reference: `Current option's Channel ID` (using Bubble's Option Sets dropdown in the dynamic data selector). Now your Bubble app can pass a different Flock Channel option depending on what event triggered the workflow — same Bot API call, different destination channel. Note: if you later add the bot to new Flock channels, re-run the 'List Channels' call in Bubble (or check the Flock response in Logs tab) and manually add the new channel IDs to your Option Set.
1{2 "method": "GET",3 "url": "https://api.flock.com/v2/channels.list",4 "headers": {5 "Authorization": "Bearer <private-bot-token>"6 }7}Pro tip: Bubble's Option Sets are static data that loads at app-start without a database query — they are the most efficient place to store Flock channel IDs that rarely change. Avoid making a live API call to /channels.list on every message send; that adds unnecessary WU consumption and latency.
Expected result: A 'Flock Channels' Option Set exists in Bubble with at least one channel entry. The Channel ID field matches the `uid` returned by the Flock /channels.list API. Your 'Send Message' call can now reference different channels dynamically.
Send rich attachment messages with the Bot API
Flock's Bot API supports an `attachments` array in the message body that renders a visually structured card: a colored vertical sidebar, a title, description text, and optional action buttons. This is significantly more informative than plain text for operational alerts. The attachment format is similar to Slack's legacy attachment structure but simplified. Add a 'Send Rich Alert' call in your API Connector (or update the 'Send Message' call with the expanded body): ```json { "to": "[channel_id]", "text": "[header text]", "attachments": [ { "title": "[card title]", "description": "[card body text]", "color": "[hex color]" } ] } ``` The `color` field is a hex code like `#36a64f` (green for success) or `#e74c3c` (red for errors). Choose colors that match the severity or category of the notification — your team will learn to read color at a glance. For action buttons (links to external URLs from within the Flock card), add a `buttons` array inside the attachment object: ```json { "title": "New Payment Received", "description": "Customer: John Smith\nAmount: $299\nPlan: Pro", "color": "#36a64f", "buttons": [ { "name": "View in Bubble", "action_type": "open_url", "url": "https://yourapp.bubbleapps.io/admin/orders/[order_id]" } ] } ``` In Bubble, you build this body dynamically using the 'Body parameters' section of the API call — you cannot pass nested JSON objects directly as parameters in the standard API Connector UI. Instead, mark the entire body as 'Raw request body' (check the 'Send body as raw text / form data' option if available in your Bubble version) and construct the JSON string using Bubble's `:formatted as text` expression with dynamic values inserted. RapidDev's team regularly sets up Bot API integrations like this with dynamic channel routing and rich cards for Bubble clients — if you want a free scoping call, visit rapidevelopers.com/contact.
1{2 "to": "g:CHANNEL_ID_HERE",3 "text": "*New Payment Received*",4 "attachments": [5 {6 "title": "Payment Confirmed",7 "description": "Customer: [customer_name]\nAmount: $[amount]\nPlan: [plan_name]",8 "color": "#36a64f",9 "buttons": [10 {11 "name": "View Order",12 "action_type": "open_url",13 "url": "https://yourapp.bubbleapps.io/order/[order_id]"14 }15 ]16 }17 ]18}Pro tip: Use color coding consistently: green (#36a64f) for success events, orange (#e67e22) for warnings, red (#e74c3c) for errors. After a few days your team will process the alert category before reading the text.
Expected result: Flock displays a card-style message in the target channel with a colored sidebar, the title, description, and a clickable 'View Order' button. Plain text messages and rich attachment messages both work from the same Backend Workflow depending on which API call is invoked.
Build the Backend Workflow and trigger it from app events
With the API call configured, build the server-side workflow that wraps it. In Bubble's Workflow tab, click 'Backend Workflows'. If this section is missing, your app is on the Free plan and you need to upgrade to Starter ($32/month). Click 'New API Workflow'. Name it `notify_flock`. Inside the workflow, add an action: Plugins → Flock → Send Notification (webhook) or Send Message (Bot API). Fill in the dynamic parameters — for example, the `text` field might be composed from Bubble's dynamic data: `'New signup: ' + Triggering User's name + ' | ' + Triggering User's email + ' | Plan: ' + Triggering User's plan` For Bot API with dynamic channel selection, add a parameter to the Backend Workflow definition (e.g., 'target_channel' of type Flock Channels option). The calling workflow passes in the appropriate option, and the Backend Workflow forwards the Channel ID to the API call's `to` field. Now connect the Backend Workflow to your app events. In the client-side Workflow editor, at the end of the relevant workflow (button click, form submission, database change), add action 'Schedule API Workflow' → select `notify_flock` → set When to 'Current date/time' → fill in any parameters. For scheduled alerts (daily digest, hourly health check), go back to Backend Workflows and click 'Add a recurring event'. Set the frequency (e.g., every day at 8:00 AM) and select the `notify_flock` workflow as the action. Each 'Schedule API Workflow' action consumes Workload Units (WU). For high-frequency Bubble apps, avoid triggering `notify_flock` inside loops over large data sets. Instead, aggregate the information into a single message first, then call `notify_flock` once.
Pro tip: Add a Bubble App Data field called 'flock_notifications_enabled' (yes/no, default yes). Add an 'Only when' condition to every 'Schedule API Workflow → notify_flock' action: 'App Data's flock_notifications_enabled is yes'. Set it to 'no' in your development workspace to avoid sending test noise to your team's Flock channels.
Expected result: The `notify_flock` Backend Workflow exists and contains the Flock API call action. Client-side workflows trigger it via 'Schedule API Workflow'. Test by submitting a form or triggering an event in Bubble preview — within a few seconds the message appears in the target Flock channel.
(Optional) Receive inbound Flock events in Bubble via outgoing webhooks
If you want Flock user actions to trigger Bubble workflows — a message containing a keyword, a slash command, a bot mention — you need to configure Flock's outgoing webhooks to point to a Bubble Backend Workflow endpoint. In Bubble, go to the Workflow tab → Backend Workflows. Click 'New API Workflow'. Name it `receive_flock_event`. Check 'Expose as a public API endpoint' (this is the Backend Workflow / API Workflow option). In the 'Detect request data' section, send a test event from Flock (configure the outgoing webhook first, trigger it, then click 'Detect' to let Bubble parse the incoming JSON body). Flock sends fields like `token`, `teamDomain`, `channelId`, `userId`, `text`, `triggerWord`, and `timestamp`. After detecting the schema, build workflow actions inside `receive_flock_event`: create a Bubble record, send an email, update a user's status, or call another API — anything your app needs to do in response to a Flock message. To register the endpoint, copy the Backend Workflow's public URL from Bubble (it looks like `https://yourapp.bubbleapps.io/api/1.1/wf/receive_flock_event`). In your Flock App at dev.flock.com, go to 'Outgoing Webhooks' or 'Slash Commands' (depending on the trigger type) and paste the Bubble URL as the target endpoint. Save and test by typing the trigger word or slash command in a Flock channel. Note: Backend Workflow public endpoints require Bubble Starter plan ($32/month). Also note the endpoint URL Bubble generates for testing includes `/initialize` at the end — use the URL without `/initialize` for the Flock webhook registration.
1{2 "flock_outgoing_webhook_payload_example": {3 "token": "<webhook-verification-token>",4 "teamDomain": "yourteam",5 "channelId": "g:XXXXXXXXXX",6 "userId": "u:XXXXXXXXXX",7 "userName": "john.doe",8 "text": "/status customer@example.com",9 "triggerWord": "/status",10 "timestamp": 172000000011 }12}Pro tip: When registering the Bubble Backend Workflow URL in Flock's outgoing webhook settings, use the URL WITHOUT the '/initialize' suffix. The initialize URL is only for Bubble's schema detection step and will return an error if Flock sends real payloads to it.
Expected result: Typing a trigger word or slash command in a Flock channel causes Flock to POST to your Bubble Backend Workflow URL. The Logs tab in Bubble shows the incoming request, and the workflow actions execute successfully. If configured to respond, Flock displays the reply in the channel.
Common use cases
Sales notification to a dynamic channel
When a Stripe payment succeeds in Bubble, use the Bot API to look up the correct Flock channel ID from your Option Set (e.g., #sales-team or #enterprise-deals based on the plan tier), then send a rich attachment card with the customer name, amount, and plan. Different deal sizes can route to different channels automatically.
Copy this prompt to try it in Bubble
Scheduled daily digest to #ops
A recurring Bubble Backend Workflow fires every morning at 8 AM, queries your app's database for the previous day's key metrics (new signups, revenue, support tickets), composes a formatted Flock message, and posts it to #ops using the incoming webhook. Your team starts each day with an automated summary without any manual reporting.
Copy this prompt to try it in Bubble
Inbound Flock command triggering Bubble action
A Flock user types a slash command or sends a message containing a specific keyword. Flock forwards the event to a Bubble Backend Workflow via outgoing webhook. The workflow parses the message, looks up relevant data in the Bubble database, and responds to Flock with a formatted reply — for example, fetching a customer's account status and posting it back to the same channel.
Copy this prompt to try it in Bubble
Troubleshooting
'There was an issue setting up your call' error during the Initialize call step in API Connector
Cause: Bubble could not receive a valid HTTP 200 response from Flock during initialization, either because the webhook URL is incorrect, the bot token is missing or invalid, or the bot has not been invited to the target channel (Bot API only).
Solution: For webhooks: double-check that the full webhook URL is pasted directly in the URL field (not as a dynamic placeholder) during the Initialize step. For Bot API: confirm the bot token is correct in the shared Authorization header, and ensure the bot has been invited to the channel whose ID you are using in the `to` field. After resolving, click Initialize again. If Flock returns HTTP 200 but Bubble still reports an issue, try marking the call 'Use as Action' (not Data) — Actions do not require Bubble to parse a response schema.
Messages are not appearing in the Flock channel — no error in Bubble Logs
Cause: The Backend Workflow scheduled successfully but the API call to Flock returned a non-200 status that Bubble logged without surfacing it visibly, or the bot is not a member of the target channel.
Solution: Go to Bubble's Logs tab → Workflow logs → find the `notify_flock` run → expand the API call action to see the HTTP status and Flock's response body. A 403 response with 'bot not in channel' means the Flock bot user has not been invited to that channel. In Flock, open the channel → Members → add the bot by name. A 401 means the bot token has been revoked — generate a new one at dev.flock.com and update it in your Bubble API Connector.
The Flock webhook URL or bot token appears in browser network requests (DevTools → Network tab)
Cause: The Flock API call is being triggered from a client-side Bubble workflow action (e.g., directly from a button click event), not from a Backend Workflow.
Solution: Remove the Flock API call from the client-side workflow. Instead, add a 'Schedule API Workflow' action that calls your `notify_flock` Backend Workflow. The 'Schedule API Workflow' action only passes message text or other safe parameters to the server — the bot token stays in the Backend Workflow configuration and never leaves Bubble's servers.
The bot token stopped working after previously working fine
Cause: The Flock bot token was revoked and regenerated in dev.flock.com — possibly by another admin, or manually as a security rotation.
Solution: Go to dev.flock.com → your Flock App → Bots → view the current bot token. If it has changed, copy the new token. In Bubble's API Connector → Flock API group → shared Authorization header, update the value to `Bearer [new_token]`. Re-initialize the affected calls. Note: unlike GoToWebinar or Sinch, Flock bot tokens do not expire automatically — they only change if someone manually revokes them.
Backend Workflows section is not visible in the Workflow editor
Cause: The Bubble app is on the Free plan. Backend Workflows (API Workflows) are only available on Starter ($32/month) or higher plans.
Solution: Upgrade the Bubble app to the Starter plan. On the Free plan, the only option is to call the Flock webhook from a client-side workflow — which exposes the webhook URL in browser network requests. If upgrading is not immediately possible, consider routing the call through a free Cloudflare Worker as a thin proxy that accepts a safe message parameter from Bubble and forwards it to Flock with the real webhook URL stored as a Cloudflare secret.
Best practices
- Always route Flock webhook calls and Bot API calls through a Bubble Backend Workflow — never trigger them from client-side actions. Both the webhook URL and the bot token are authentication credentials that must not appear in browser network requests.
- Store the Flock webhook URL in a Bubble Option Set or App Data field. Store bot token channel IDs in an Option Set keyed by channel name. This decouples credentials from workflow logic and makes rotation straightforward.
- Use color-coded rich attachments for Bot API messages: green (#36a64f) for success, orange (#e67e22) for warnings, red (#e74c3c) for errors. Consistent color coding lets your team parse alert severity at a glance before reading the message.
- If your Bubble app generates high-volume events (many orders per minute, many user signups), batch notifications rather than sending one Flock message per event. Aggregate data in a scheduled Backend Workflow and post one summary message — this reduces WU consumption and keeps the Flock channel readable.
- Add a Bubble App Data toggle field ('flock_notifications_enabled') and include it as an 'Only when' condition on every 'Schedule API Workflow' action. Set it to false in your development environment to prevent test traffic from appearing in your team's live Flock channels.
- For the Bot API, re-run the /channels.list call and update your Option Set whenever you add the bot to new Flock channels. Stale Option Set data with missing channel IDs will cause silent failures when workflows try to send to a channel the bot cannot find.
- Monitor Flock's message cap on the Free plan (10,000 messages per month). If your Bubble app's notification volume approaches this limit, either upgrade to Flock Pro or reduce notification frequency. Flock silently drops messages after the cap — your workflows will report success but messages will not appear in channels.
- When registering Bubble Backend Workflow URLs as outgoing webhook endpoints in Flock, always use the URL without the '/initialize' suffix. The initialize URL is only for Bubble's schema detection and will fail when Flock sends real payloads to it.
Alternatives
Slack has a much larger API surface (200+ endpoints), a mature Bubble plugin ecosystem with multiple marketplace vendors, and Block Kit for richer interactive messages. Flock is simpler to set up and cheaper, but if your team is already on Slack or you need complex bot interactions (slash commands, modals, home tab), Slack is the better choice.
Chanty's incoming webhook setup is nearly identical to Flock's Tier 1, but Chanty has a less documented REST API and no equivalent of Flock's Bot API with OAuth. For outbound-only notifications, both platforms are equivalent. For bidirectional integration or rich message attachments, Flock is the more capable option.
Teams supports incoming webhooks via Office 365 Connectors and has the full Microsoft Graph API for enterprise-grade bot integration. If your users are in the Microsoft 365 ecosystem, Teams is the natural choice. The setup is significantly more complex than Flock (requiring Azure App Registration and OAuth), but the API surface and organizational management capabilities are far greater.
Frequently asked questions
Do I need a paid Flock plan to integrate with Bubble?
No. Flock's Free plan supports incoming webhooks and the Bot API, with a cap of 10,000 messages per month. The plan requirement is on the Bubble side: Backend Workflows need the Bubble Starter plan ($32/month). If you only need outbound notifications from Bubble to Flock, the Flock Free plan is sufficient for most early-stage Bubble apps.
What is the difference between the incoming webhook and the Bot API — which should I use?
Use the incoming webhook if you only need to send notifications to a fixed Flock channel (new user alerts, payment confirmations, error counts). It takes about 20 minutes to set up with no OAuth. Use the Bot API if you need to: (1) send to dynamically selected channels based on event data, (2) send rich attachment cards with colored sidebars and action buttons, or (3) receive and respond to messages from Flock users in Bubble. The Bot API requires a few extra setup steps but the bot token is permanent and does not expire.
Does the Flock bot token expire and do I need to set up a refresh workflow?
No. Flock bot tokens are permanent — they do not expire unless you manually revoke and regenerate them in the dev.flock.com portal. This is simpler than GoToWebinar (which expires every hour) or Sinch (which expires every hour via OAuth). You only need to update the token in Bubble's API Connector if a workspace admin rotates it intentionally.
Can I send messages to multiple Flock channels at the same time from one Bubble workflow?
Not in a single API call — each Flock message goes to one channel. To notify multiple channels, add multiple 'Schedule API Workflow' actions in your Bubble workflow (one per channel), each passing a different channel ID. Each call consumes WU in Bubble, so use this sparingly. For most use cases, a single #general or #alerts channel is sufficient, with team members using Flock's notification settings to route alerts to their preferred view.
How do I update the bot token if I need to revoke and regenerate it?
Go to dev.flock.com → your Flock App → Bots → regenerate the token. Copy the new token. In Bubble's API Connector, open the Flock API group, find the shared Authorization header, and update the value to the new token. Re-initialize any calls that were previously initialized — they should still work after the token update, but re-initializing confirms the connection. If you store channel IDs in an Option Set, those do not need to change.
Is there a Flock plugin available in the Bubble Plugin Marketplace?
There is no well-established official Flock plugin in the Bubble Plugin Marketplace. The integration is set up manually using the API Connector with a Backend Workflow, as described in this guide. This gives you full control over the API calls and is not significantly more complex than using a plugin for the webhook use case.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation