# How to trigger API workflows from external sources in Bubble.io: Step-by-Step Gu

- Tool: Bubble
- Difficulty: Intermediate
- Time required: 20-25 min
- Compatibility: All Bubble plans
- Last updated: March 2026

## TL;DR

Expose Bubble backend workflows as API endpoints that external services can call via HTTP requests. This tutorial covers enabling the Workflow API, creating backend workflows with parameters, constructing the endpoint URL, authenticating requests, and testing with Postman or webhook services.

## Overview: Triggering API Workflows from External Sources

Bubble backend workflows can be exposed as HTTP endpoints, letting external services like Zapier, Make, Stripe webhooks, or custom servers trigger actions in your app. This tutorial covers enabling the API, defining workflows with parameters, handling authentication, and testing the integration.

## Before you start

- A Bubble account with an app
- Backend workflows enabled in Settings
- Basic understanding of HTTP requests and JSON
- Postman or similar API testing tool

## Step-by-step guide

### 1. Enable the Workflow API

Go to Settings → API tab. Check 'Enable Workflow API.' This exposes your backend workflows as callable HTTP endpoints. Note the API token shown — you need this for authentication.

**Expected result:** The Workflow API is enabled and an API token is available.

### 2. Create a backend workflow with parameters

Go to the Workflow tab → Pages dropdown → Backend workflows. Click 'New API workflow' and name it (e.g., 'create-order'). Check 'Expose as a public API workflow.' Add parameters: customer_email (text), product_name (text), amount (number).

> Pro tip: Use descriptive parameter names — they appear in the API documentation.

**Expected result:** A backend workflow exists with defined parameters and is publicly exposed.

### 3. Add workflow actions using the parameters

Inside the backend workflow, add actions referencing the parameters. Example: Action 1 — Create a new Order with email = customer_email, product = product_name, total = amount. Action 2 — Send email to customer_email with confirmation. Parameters are available under 'This workflow's parameters' in the expression builder.

**Expected result:** The workflow creates records and sends emails using external data.

### 4. Construct the API endpoint URL

The endpoint pattern is: https://yourapp.bubbleapps.io/api/1.1/wf/workflow-name. Replace 'yourapp' and 'workflow-name' accordingly. For development: use version-test in the path. The workflow name is lowercase with hyphens.

**Expected result:** You have the complete URL for external services to call.

### 5. Test with Postman

Create a POST request in Postman. Set the URL to your workflow endpoint. Add headers: Authorization: Bearer YOUR_API_TOKEN and Content-Type: application/json. In the body, enter JSON with your parameter names and test values. Send and verify the workflow ran by checking your database.

```
POST https://yourapp.bubbleapps.io/api/1.1/wf/create-order
Headers:
  Authorization: Bearer YOUR_API_TOKEN
  Content-Type: application/json

Body:
{
  "customer_email": "test@example.com",
  "product_name": "Pro Plan",
  "amount": 2999
}
```

**Expected result:** The POST request succeeds and the workflow creates records in your database.

## Complete code example

File: `API Connector payload`

```json
{
  "endpoint": "https://yourapp.bubbleapps.io/api/1.1/wf/create-order",
  "method": "POST",
  "headers": {
    "Authorization": "Bearer YOUR_API_TOKEN",
    "Content-Type": "application/json"
  },
  "body": {
    "customer_email": "customer@example.com",
    "product_name": "Pro Plan",
    "amount": 2999
  },
  "development_url": "https://yourapp.bubbleapps.io/version-test/api/1.1/wf/create-order",
  "notes": [
    "Workflow must be marked as Expose as public API workflow",
    "Parameter names must match exactly (case-sensitive)",
    "Deploy to Live before using the production URL",
    "Use version-test URL for development testing"
  ]
}
```

## Common mistakes

- **Using the Live URL before deploying the workflow** — Backend workflows only exist in Live after deployment — calling before returns 404 Fix: Use version-test URL for testing, deploy before connecting production services
- **Mismatching parameter names** — Bubble matches by exact name — a typo means the parameter arrives empty Fix: Copy parameter names directly from the workflow editor into your JSON body
- **Forgetting to check Expose as public API workflow** — Without this the workflow returns 404 when called externally Fix: Open the backend workflow and check the Expose as public API workflow box

## Best practices

- Test with version-test URL before deploying to Live
- Use descriptive workflow names for readable URL slugs
- Add error handling that logs failures to a database
- Validate incoming parameters inside the workflow
- Use server logs to debug failed API calls
- Rate-limit external callers by tracking requests

## Frequently asked questions

### Can I trigger workflows from Zapier?

Yes. Use Zapier's Webhooks action to POST to your Bubble endpoint with Bearer token authentication.

### Is there a rate limit?

Bubble does not publish official limits, but excessive calls trigger throttling. Each call consumes workload units.

### Can I receive Stripe webhooks?

Yes. Create a backend workflow accepting Stripe's payload. Set the Stripe webhook URL to your Bubble endpoint.

### What happens if the workflow fails?

Bubble returns an error response. Check Server logs for details and add error-handling actions.

### Can I return data from the workflow?

Yes. Use the Return data from API action to send a custom JSON response.

### Can RapidDev set up API integrations?

Yes. RapidDev configures complex API integrations including webhooks, authentication, and multi-step workflows.

---

Source: https://www.rapidevelopers.com/bubble-tutorial/trigger-api-workflows-external-sources-bubble
© RapidDev — https://www.rapidevelopers.com/bubble-tutorial/trigger-api-workflows-external-sources-bubble
