Advanced8 min

Custom Plugins

Build custom plugins to create reusable integrations. Package your APIs for easy use across workflows.

What is a Custom Plugin?

A plugin packages:

  • API connection details
  • Available actions
  • Authentication method
  • Input/output schemas

Once created, use like built-in plugins.

Creating a Plugin

Start New Plugin

  1. Go to Plugins > Create Plugin
  2. Enter plugin details:
    • Name
    • Description
    • Icon
    • Category

Configure Connection

Set up the base configuration:

baseUrl: https://api.example.com/v1
authentication:
  type: api_key
  header: X-API-Key

Add Actions

Define what the plugin can do:

Example: Create User

actions:
  - name: create_user
    displayName: Create User
    description: Creates a new user
    method: POST
    path: /users
    inputs:
      - name: email
        type: string
        required: true
      - name: name
        type: string
        required: true
    output:
      type: object
      properties:
        id: string
        email: string

Add Triggers (Optional)

For webhook-based triggers:

triggers:
  - name: user_created
    displayName: User Created
    description: Fires when a new user is created
    webhookPath: /webhooks/user-created

Plugin Structure

Manifest

The plugin.yaml defines everything:

name: my-service
displayName: My Service
description: Connect to My Service API
version: 1.0.0
icon: custom-icon.svg
category: productivity

connection:
  baseUrl: https://api.myservice.com
  authentication:
    type: oauth2
    authorizationUrl: https://myservice.com/oauth/authorize
    tokenUrl: https://myservice.com/oauth/token
    scopes:
      - read
      - write

actions:
  - name: get_item
    # ... action definition

triggers:
  - name: item_created
    # ... trigger definition

Actions

Each action needs:

| Field | Description | |-------|-------------| | name | Internal identifier | | displayName | Shown in UI | | description | Help text | | method | HTTP method | | path | Endpoint path | | inputs | Parameters | | output | Response schema |

Input Types

Supported input types:

  • string - Text input
  • number - Numeric
  • boolean - True/false
  • array - List of items
  • object - Nested object
  • select - Dropdown options

Testing Plugins

Test Panel

  1. Open your plugin
  2. Click Test
  3. Select an action
  4. Enter test data
  5. View response

In Workflows

Test in a real workflow:

  1. Create test workflow
  2. Add your plugin action
  3. Run with test data
  4. Verify behavior

Publishing

Private (Default)

Only visible in your workspace.

Team

Share with organization:

  1. Go to plugin settings
  2. Enable Share with team
  3. Team can now use it

Public (Marketplace)

Share with everyone:

  1. Ensure quality standards
  2. Click Publish to Marketplace
  3. Complete submission form
  4. Wait for review

See Publishing Plugins.

Advanced Features

Dynamic Inputs

Inputs that depend on other values:

inputs:
  - name: workspace
    type: select
    dynamicOptions:
      action: list_workspaces
  - name: channel
    type: select
    dependsOn: workspace
    dynamicOptions:
      action: list_channels
      params:
        workspace: "{{workspace}}"

Pagination

Handle paginated APIs:

pagination:
  type: cursor
  cursorParam: next_cursor
  cursorPath: response.next_cursor

Rate Limiting

Respect API limits:

rateLimit:
  requests: 100
  period: 60 # seconds

Best Practices

  1. Clear naming - Descriptive action names
  2. Good descriptions - Help users understand
  3. Handle errors - Define error responses
  4. Test thoroughly - All actions and edge cases
  5. Version properly - Semantic versioning

Next Steps

Tags

integrationspluginsdevelopment