Bubble Action API

Server-side and client-side action functions invoked by Bubble workflows.

Operations 2

POST /actions/serverSide/{actionName} Invoke Server-Side Action #
POST /actions/clientSide/{actionName} Invoke Client-Side Action #

Documentation

Specifications

Other Resources

🔗
Tutorials
https://manual.bubble.io/account-and-marketplace/building-plugins/building-actions.md
🔗
Tutorials
https://manual.bubble.io/account-and-marketplace/building-plugins/building-elements.md
🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/apis.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-bulk-create-then-search-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-create-and-get-thing-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-create-thing-then-trigger-workflow-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-discover-types-then-search-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-get-then-replace-thing-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-initialize-then-trigger-workflow-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-search-then-delete-thing-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-search-then-update-thing-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-trigger-workflow-then-log-thing-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/bubble/refs/heads/main/arazzo/bubble-upsert-thing-workflow.yml

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/bubble-action-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

bubble-action-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Bubble Plugin Action API
  description: 'The Bubble Plugin API is a JavaScript SDK surface (not an HTTP API) that plugin

    authors use to extend Bubble apps. It exposes server-side actions, client-side

    actions, and visual elements that read configured properties and interact with

    the runtime via a `context` object. Plugin API v4 replaces Fibers with

    Promises and adds first-class type checks (`isBubbleThing`, `isBubbleList`),

    by-id lookups (`getThingById`, `getThingsById`), and async iteration on

    `BubbleList`.


    This OpenAPI document describes the SDK surface as a virtual REST API for

    catalog and discovery purposes. Each "endpoint" represents a callable

    JavaScript function in the plugin runtime; `paths` carry the function name

    and `requestBody`/`responses` describe its parameters and return value.

    '
  version: '4.0'
  contact:
    name: Bubble Support
    url: https://bubble.io/contact
  license:
    name: Bubble Plugin Marketplace Terms
    url: https://bubble.io/legal/plugins
servers:
- url: virtual://plugin-runtime
  description: 'Virtual server. Plugin actions and elements execute inside the Bubble

    runtime; there is no public HTTP endpoint.

    '
tags:
- name: Action
  description: Server-side and client-side action functions invoked by Bubble workflows.
paths:
  /actions/serverSide/{actionName}:
    post:
      tags:
      - Action
      summary: Invoke Server-Side Action
      description: 'Server-side actions are written as `function(properties, context)`.

        They run in a Node.js sandbox, may `require` configured npm

        dependencies, and may return data consumed by subsequent workflow

        steps. Counts as 1 server-side plugin action call (0.2 WU base + per-ms).

        '
      operationId: invokeServerAction
      parameters:
      - name: actionName
        in: path
        required: true
        description: Name of the action as defined in the plugin editor.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                properties:
                  $ref: '#/components/schemas/ActionProperties'
                context:
                  $ref: '#/components/schemas/ServerContext'
      responses:
        '200':
          description: Action returned successfully. Return shape is defined by the plugin's `Returned values` configuration.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
  /actions/clientSide/{actionName}:
    post:
      tags:
      - Action
      summary: Invoke Client-Side Action
      description: 'Client-side actions are written as `function(properties, context)` and

        run in the browser. Useful for DOM manipulation, calling browser

        APIs, or working with already-loaded data. No workload is incurred

        because no server roundtrip occurs.

        '
      operationId: invokeClientAction
      parameters:
      - name: actionName
        in: path
        required: true
        description: Name of the action as defined in the plugin editor.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                properties:
                  $ref: '#/components/schemas/ActionProperties'
                context:
                  $ref: '#/components/schemas/ClientContext'
      responses:
        '200':
          description: Action returned successfully (or void).
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
components:
  schemas:
    BubbleThing:
      type: object
      description: Wrapper around a single database record.
      properties:
        id:
          type: string
          description: Read-only unique id (added in v4).
        listProperties:
          type: string
          description: Returns an array of field names defined on the record.
        get:
          type: string
          description: '`(propertyName) => Promise<any>` — returns a Promise resolving to the field value.'
        getAll:
          type: string
          description: '`() => Promise<object>` — returns all fields as an object (added in v4).'
    ServerContext:
      type: object
      description: Server-side context object passed to actions.
      properties:
        currentUser:
          $ref: '#/components/schemas/BubbleThing'
        userTimezone:
          type: string
        keys:
          type: object
          additionalProperties:
            type: string
          description: Plugin shared headers / API keys configured in the editor.
        isBubbleThing:
          type: string
          description: Type-checker function. Returns true if argument is a BubbleThing.
        isBubbleList:
          type: string
          description: Type-checker function. Returns true if argument is a BubbleList.
        getThingById:
          type: string
          description: '`(id) => BubbleThing` — fetch a single record by id.'
        getThingsById:
          type: string
          description: '`(ids) => BubbleList` — fetch multiple records by id.'
    ClientContext:
      type: object
      description: Client-side context passed to actions and element hooks.
      additionalProperties: true
    ActionProperties:
      type: object
      description: Map of property names to values, defined by the plugin author in the editor.
      additionalProperties: true