Bubble
Overview
Section titled “Overview”Bubble is a visual programming language and a Platform as a Service (PaaS) developed by Bubble Group. It enables the creation of complete web applications without writing code, with an integrated database, business logic, and visual interface. With the Bubble integration in SquadOS, your agents can directly interact with the data and workflows of any Bubble application via API.
- Official website: https://bubble.io/
- Composio documentation: docs.composio.dev/toolkits/bubble
Authentication
Section titled “Authentication”This tool uses an API key (API_KEY) to connect.
You will need the following fields:
| Field | Required | Description |
|---|---|---|
full | Yes | The root URL of your Bubble Data API. If using Bubble’s default domain: https://your-app-name.bubbleapps.io. If using a custom domain: https://yourdomain.com. |
bearer_token | Yes | API token generated in your Bubble app settings, used to authenticate requests to the Data API. |
How to get credentials
Section titled “How to get credentials”-
Open your Bubble app editor at bubble.io and select the desired app.
-
Click Settings in the left sidebar menu.
-
Navigate to the API tab.
-
Check the Enable Data API option to activate the Data API for your app.
-
In the list of data types shown below, select which data types should be exposed via the API (only select what you need).
-
Scroll to the API tokens section and click Generate a new API token to create a new token.
-
Copy the generated token — this is the value you will use in the
bearer_tokenfield when connecting in SquadOS. -
For the
fullfield (Base URL), use the formathttps://your-app-name.bubbleapps.io(replacingyour-app-namewith your app’s subdomain) or the custom domain configured for your app.
How to connect in SquadOS
Section titled “How to connect in SquadOS”- Go to Tools in the side menu (
/admin/tools). - Open the Available tab and search for
Bubble. - Click the card to open the details and hit Connect.
- You’re taken to the secure connection page hosted by Composio, where you enter the base URL and API token obtained above.
- Once you confirm, you’re sent back to SquadOS with the account already connected and the tool available to agents. (Connection-flow details in Organization Tools.)
Available actions
Section titled “Available actions”Bulk Create Things
Section titled “Bulk Create Things”BUBBLE_DATA_BULK_CREATE_THINGS
Tool to bulk create multiple Things in Bubble via newline-separated JSON. Use when you need to insert many records at once. Must have Create via API permission.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
items | array | Yes | List of objects to create. Must contain between 1 and 1000 items. |
typename | string | Yes | Bubble data type API name (lowercase, no spaces). |
subdomain | string | No | Bubble app subdomain to target *.bubbleapps.io (e.g., ‘my-bubble-app’). |
custom_domain | string | No | Custom domain host (e.g., ‘myapp.example.com’). |
full_url_override | string | No | Full URL override for the bulk endpoint. If provided, the request will be sent to this URL as-is, ignoring ‘typename’, ‘custom_domain’, and ‘subdomain’. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Create Thing
Section titled “Create Thing”BUBBLE_DATA_CREATE_THING
Tool to create a new Thing. Use when providing a complete JSON payload to add a new record.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
fields | object | Yes | JSON object mapping field names to values for the new Thing. Required fields must be provided (e.g., ‘email’ for the User type). |
typename | string | Yes | Name of the data type (Thing) to create (case-sensitive). |
subdomain | string | No | Bubble app subdomain to target *.bubbleapps.io (e.g., ‘my-bubble-app’). |
custom_domain | string | No | Custom domain host (e.g., ‘myapp.example.com’). |
full_url_override | string | No | Full URL override for the create endpoint. If provided, the request will be sent to this URL as-is, ignoring ‘typename’, ‘custom_domain’, and ‘subdomain’. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Delete Thing By ID
Section titled “Delete Thing By ID”BUBBLE_DATA_DELETE_THING_BY_ID
Tool to delete a Bubble Thing by its unique ID. Use when you need to remove a specific record via the Bubble Data API.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
uid | string | Yes | Unique identifier of the record to delete. |
typename | string | Yes | Bubble data type name (must be lowercase, no spaces). |
subdomain | string | No | Bubble app subdomain to target *.bubbleapps.io (e.g., ‘my-bubble-app’). |
custom_domain | string | No | Custom domain host (e.g., ‘myapp.example.com’). |
full_url_override | string | No | Full URL override for the delete endpoint. If provided, the request will be sent to this URL as-is, ignoring ‘typename’, ‘custom_domain’, and ‘subdomain’. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Get Thing By ID
Section titled “Get Thing By ID”BUBBLE_DATA_GET_THING_BY_ID
Retrieves a single Thing (record) from a Bubble Data Type by its unique ID. This is a read-only operation that fetches complete details of a specific record. The response includes all custom fields defined in the Data Type, plus standard Bubble fields (_id, created_by, created_date, modified_date). Use when you need to: fetch details of a specific record you know the ID of; verify a record exists; get the latest field values for a Thing. Requires the Data API to be enabled in your Bubble app settings and the specific Data Type to be exposed via the API.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
uid | string | Yes | The unique identifier of the Thing to retrieve. This is the value returned in the ‘_id’ or ‘id’ field when the Thing was created. Bubble typically uses format like ‘1234567890123x123456789012345678’. |
typename | string | Yes | The Bubble Data Type name (case-sensitive). This is the custom data type defined in your Bubble app (e.g., ‘user’, ‘order’, ‘product’). Check your Bubble app’s Data tab for available types. |
subdomain | string | No | Bubble app subdomain to target *.bubbleapps.io (e.g., ‘my-bubble-app’). |
custom_domain | string | No | Custom domain host (e.g., ‘myapp.example.com’). |
full_url_override | string | No | Full URL override for the GET endpoint. If provided, the request will be sent to this URL as-is, ignoring ‘typename’, ‘custom_domain’, and ‘subdomain’. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Patch Thing By ID
Section titled “Patch Thing By ID”BUBBLE_DATA_PATCH_THING_BY_ID
Tool to modify selected fields on a Thing by its unique ID. Use after confirming the Thing exists.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
uid | string | Yes | Unique ID of the record to modify. |
typename | string | Yes | Data type name in URL format (lowercase, no spaces). |
subdomain | string | No | Bubble app subdomain to target *.bubbleapps.io (e.g., ‘my-bubble-app’). |
custom_domain | string | No | Custom domain host (e.g., ‘myapp.example.com’). |
field_updates | object | Yes | JSON object of fields to update. Each key is an existing field name; each value must match the field’s type. |
full_url_override | string | No | Full URL override for the patch endpoint. If provided, the request will be sent to this URL as-is, ignoring ‘typename’, ‘custom_domain’, and ‘subdomain’. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Replace Thing by ID
Section titled “Replace Thing by ID”BUBBLE_DATA_PUT_REPLACE_THING_BY_ID
Tool to replace all editable fields on a Thing by its Unique ID. Use when you need a full overwrite of a Thing’s fields and reset omitted fields to default.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
uid | string | Yes | Unique ID of the Thing to overwrite. |
data | object | Yes | Mapping of each editable field name to its new value. Omitted editable fields will be reset to their default values. |
typename | string | Yes | Bubble data type name to target for replacement. |
subdomain | string | No | Bubble app subdomain to target *.bubbleapps.io (e.g., ‘my-bubble-app’). |
custom_domain | string | No | Custom domain host (e.g., ‘myapp.example.com’). |
full_url_override | string | No | Full URL override for the PUT endpoint. If provided, the request will be sent to this URL as-is, ignoring ‘typename’, ‘custom_domain’, and ‘subdomain’. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Download File
Section titled “Download File”BUBBLE_FILE_DOWNLOAD
Tool to download a file given its URL. Use when you need to retrieve file content and obtain an s3key for subsequent upload tests.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
url | string | Yes | HTTP or HTTPS URL of the file to download. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Create Temp File
Section titled “Create Temp File”BUBBLE_FILE_TEMP_CREATE
Tool to upload bytes as a temporary file to Cloudflare R2 and return an S3 key. Use when you need a short-lived file reference before persisting it in a Thing.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Name to assign to the temporary file (including extension). |
content | string | Yes | Base64-encoded file contents or plain text data. |
mimetype | string | Yes | MIME type of the file. |
subdomain | string | No | Bubble app subdomain to target *.bubbleapps.io (e.g., ‘my-bubble-app’). |
custom_domain | string | No | Custom domain host (e.g., ‘myapp.example.com’). |
full_url_override | string | No | Full URL override for the temp upload endpoint. If provided, the request will be sent to this URL as-is. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Upload File
Section titled “Upload File”BUBBLE_FILE_UPLOAD
Tool to upload a file to Bubble storage. Use when you need to store arbitrary files via Bubble’s /fileupload endpoint.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
file | object | Yes | File to upload. |
subdomain | string | No | Bubble subdomain (e.g., ‘my-app’) to target https://<subdomain>.bubbleapps.io/fileupload. |
custom_domain | string | No | Custom domain host (e.g., ‘app.example.com’) to target https://<host>/fileupload. |
additional_fields | object | No | Optional additional multipart form fields to include in the upload request. |
full_url_override | string | No | Full URL override for the upload endpoint (e.g., https://httpbin.org/post). |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Get Bubble API Swagger JSON
Section titled “Get Bubble API Swagger JSON”BUBBLE_META_GET_SWAGGER_JSON
Tool to retrieve the auto-generated Swagger JSON for enabled APIs. Use after enabling the Swagger file in your Bubble app’s API settings.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
subdomain | string | No | Bubble app subdomain (e.g., ‘my-bubble-app’) to target *.bubbleapps.io. |
swagger_url | string | No | Full URL to the Swagger 2.0 JSON to fetch. Takes precedence if provided. |
custom_domain | string | No | Custom domain host to target (e.g., ‘myapp.example.com’). |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Get OAuth Access Token
Section titled “Get OAuth Access Token”BUBBLE_O_AUTH_ACCESS_TOKEN
Tool to exchange an authorization code or refresh token for an OAuth2 access token. Use after obtaining an authorization code or when refreshing an expired token.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
code | string | No | Authorization code returned from /oauth/authorize; required for initial exchange. |
client_id | string | Yes | OAuth client identifier. |
subdomain | string | No | Bubble app subdomain (e.g., ‘my-bubble-app’). |
grant_type | string | No | Must be refresh_code when exchanging a refresh token for a new access token. Note: Bubble uses refresh_code instead of the standard OAuth 2.0 refresh_token value. |
redirect_uri | string | Yes | Redirect URI used during the authorization request. |
client_secret | string | Yes | OAuth client secret. |
custom_domain | string | No | Custom domain host (e.g., ‘myapp.example.com’). |
refresh_token | string | No | Previously issued refresh token; required when grant_type=refresh_code. |
use_version_test | boolean | No | Whether to target the /version-test environment when building the URL. |
token_url_override | string | No | Full URL to the token endpoint. If provided, takes precedence over domain/subdomain/metadata-derived URL. |
additional_body_fields | object | No | Additional fields to include in the POST JSON body. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
OAuth Authorize
Section titled “OAuth Authorize”BUBBLE_OAUTH_AUTHORIZE
Tool to initiate OAuth2 authorization flow for Bubble. Use when setting up third-party login integration. Returns the URL for user-agent redirection to obtain an authorization code.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
scope | string | No | Space-delimited list of scopes being requested. |
state | string | No | Opaque value to maintain state between the request and callback (CSRF token, etc). |
client_id | string | Yes | OAuth client identifier issued by Bubble when you register your application. |
subdomain | string | No | Bubble app subdomain (e.g., ‘my-bubble-app’) to target *.bubbleapps.io. |
extra_params | object | No | Additional query parameters to include in the authorize request. |
redirect_uri | string | Yes | Callback URL where Bubble will send the authorization code. |
custom_domain | string | No | Custom domain host to target (e.g., ‘myapp.example.com’). |
response_type | string | No | OAuth response type. For authorization code flow this should be code. |
use_version_test | boolean | No | If true, use /version-test in the root path for Bubble apps. |
authorize_url_override | string | No | Full URL to the authorization endpoint. If provided, takes precedence over subdomain/custom_domain/metadata-derived URL. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Bubble OAuth Register App
Section titled “Bubble OAuth Register App”BUBBLE_O_AUTH_REGISTER_APP
Tool to validate/initialize OAuth application credentials with Bubble. It performs a real call to Bubble’s /oauth/authorize endpoint (or provided override) using client_id and redirect_uri to confirm connectivity and returns supplied credentials.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
client_id | string | Yes | OAuth client identifier as configured in Bubble editor. |
subdomain | string | No | Bubble app subdomain (e.g., ‘my-bubble-app’). |
extra_params | object | No | Additional query parameters to append to the authorize request. |
redirect_uri | string | Yes | Redirect URI configured in the Bubble OAuth app. |
client_secret | string | No | OAuth client secret as configured in Bubble editor. |
custom_domain | string | No | Custom domain host (e.g., ‘myapp.example.com’). |
use_version_test | boolean | No | Whether to target the /version-test environment. |
authorize_url_override | string | No | Full URL to call instead of constructing from domain/subdomain. Useful for testing. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Trigger Bubble Workflow via GET
Section titled “Trigger Bubble Workflow via GET”BUBBLE_WORKFLOW_TRIGGER_GET
Trigger a Bubble API workflow using an HTTP GET request. API workflows are server-side workflows in Bubble that can be triggered externally. Use GET for simple workflows that don’t require a request body (parameters passed as query strings). For workflows requiring complex data or file uploads, use the POST version instead. Before using: the workflow must be created in Bubble’s workflow editor and marked as “Expose as a public API workflow”. The Bubble app must have API access enabled in its subscription.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
branch | string | No | Bubble deployment branch to target. Use live for production workflows or version-test for development/testing workflows. |
parameters | object | No | Query string parameters to pass to the workflow, matching the workflow’s defined inputs. Each key should match a parameter name configured in your Bubble workflow. |
workflow_name | string | Yes | Name of the API workflow to trigger (as defined in Bubble’s workflow editor). This is the exact name you gave the workflow, which becomes part of the endpoint URL. |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |
Trigger Bubble Workflow via POST
Section titled “Trigger Bubble Workflow via POST”BUBBLE_WORKFLOW_TRIGGER_POST
Triggers a Bubble API workflow by name using a POST request. Use this tool to execute backend workflows in your Bubble application. The workflow must be configured in your Bubble app’s API Workflows section with “Expose as public API workflow” enabled. Pass any required parameters as a JSON object in the parameters field.
Input parameters
Section titled “Input parameters”| Name | Type | Required | Description |
|---|---|---|---|
branch | string | No | Deployment branch to target. Use live for production environment or version-test for development/testing environment. |
parameters | object | No | JSON body parameters to pass to the workflow, matching the workflow’s configured input parameters. Use ISO 8601 format for dates (e.g., 2024-01-15T10:30:00Z), and unique IDs (strings) for Bubble data type references. |
workflow_name | string | Yes | URL-friendly name of the Bubble API workflow to trigger. This is the name you configured in your Bubble app’s API Workflows section, converted to lowercase with hyphens instead of spaces (e.g., send-email, process-payment). |
Output
Section titled “Output”| Name | Type | Required | Description |
|---|---|---|---|
data | string | Yes | Data from the action execution. |
error | string | No | Error message if execution failed. |
successful | boolean | Yes | Whether the action executed successfully. |