Provider Actions
Actions are named operations exposed by a provider adapter — create a HubSpot contact, send a Slack message, enqueue a Zapier run. They are the building blocks flows use in their action steps, and can also be invoked standalone via the API.
The action contract
Every action declares, via the ActionProvider interface:
name— unique key within the provider (e.g.create_contact)displayName— human-friendly label shown in the UIdescription— one-line summaryscopes— OAuth scopes the connection must haveinputs— typed parameters the action expectshandler— the async function that actually performs the work
Actions are backed by the same ProviderConnection rows used for webhook/proxy flows, so they automatically inherit tenant isolation and token encryption.
Browsing actions
/admin/actions lists every action available across your connected providers, grouped by category. Drill into a provider to see the full input schema for each action.
Invoking an action
From a flow step
Add an action step, pick the provider and action name, and map the inputs using the template syntax:
{
"kind": "action",
"providerType": "hubspot",
"actionName": "create_contact",
"inputMapping": {
"email": "{{trigger.email}}",
"firstName": "{{trigger.first_name}}",
"lifecycleStage": "lead"
}
}Standalone via the API
POST /providers/:providerType/actions/:actionName
Authorization: Bearer <jwt>
Content-Type: application/json
{ "email": "alice@example.com", "firstName": "Alice" }Permissions
actions.view— browse the actions libraryactions.execute— run an action standalone or from a flow step
Plan limits
Standalone action executions are counted monthly. Free: 100, Starter: 1,000, Professional: 10,000, Team and Enterprise: unlimited. Actions invoked as part of a flow count against your flow task allowance instead.