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
- Go to Plugins > Create Plugin
- 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 inputnumber- Numericboolean- True/falsearray- List of itemsobject- Nested objectselect- Dropdown options
Testing Plugins
Test Panel
- Open your plugin
- Click Test
- Select an action
- Enter test data
- View response
In Workflows
Test in a real workflow:
- Create test workflow
- Add your plugin action
- Run with test data
- Verify behavior
Publishing
Private (Default)
Only visible in your workspace.
Team
Share with organization:
- Go to plugin settings
- Enable Share with team
- Team can now use it
Public (Marketplace)
Share with everyone:
- Ensure quality standards
- Click Publish to Marketplace
- Complete submission form
- 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
- Clear naming - Descriptive action names
- Good descriptions - Help users understand
- Handle errors - Define error responses
- Test thoroughly - All actions and edge cases
- Version properly - Semantic versioning
Next Steps
- Importing APIs - Quick imports
- Publishing Plugins - Share publicly
- API Reference - Technical docs