Execute integration actions to interact with third-party services through a unified API.
Actions are the core way to interact with third-party services through Weavz. Each integration exposes a set of actions — like sending a Slack message, creating a GitHub issue, or reading a Google Sheet.
Workspace scope for connection resolution and partials
connectionExternalId
No
A connection's externalId selector. Use this when you want to bypass workspace integration connection resolution.
workspaceIntegrationId
No
Exact configured workspace integration to target. Prefer this when the same integration is configured multiple times.
integrationAlias
No
Alias of the workspace integration to resolve when workspaceIntegrationId is not provided.
endUserId
No
The end user's externalId for per-user connection resolution
Workspace integration settings are applied automatically when you target a configured integration. For example, Advanced Code settings and storage mount, plus Storage/KV/agent-tool persistence scope, are configured on the workspace integration, not passed in input.
Most production calls should target a configured workspace integration with workspaceIntegrationId or integrationAlias. Use connectionExternalId when you intentionally want to select one connection directly:
Even when you pass connectionExternalId, include workspaceId. The workspace scopes API-key access, partials, approvals, built-in persistence, and workspace integration settings.
# Target a specific alias when the same integration has multiple configurationscurl -X POST https://api.weavz.io/api/v1/actions/execute \ -H "Authorization: Bearer wvz_your_key" \ -H "Content-Type: application/json" \ -d '{ "integrationName": "slack", "actionName": "send_channel_message", "input": { "channel": "#alerts", "text": "Alert!" }, "workspaceId": "550e8400-e29b-41d4-a716-446655440000", "integrationAlias": "slack_bot" }'
typescript
// Let workspace integration configuration resolve the connectionawait client.actions.execute('slack', 'send_channel_message', { input: { channel: 'C01ABCDEF', text: 'Hello!' }, workspaceId: '550e8400-e29b-41d4-a716-446655440000',})// Target a specific alias when the same integration has multiple configurationsawait client.actions.execute('slack', 'send_channel_message', { input: { channel: '#alerts', text: 'Alert!' }, workspaceId: '550e8400-e29b-41d4-a716-446655440000', integrationAlias: 'slack_bot',})
python
# Let workspace integration configuration resolve the connectionclient.actions.execute( "slack", "send_channel_message", input={"channel": "C01ABCDEF", "text": "Hello!"}, workspace_id="550e8400-e29b-41d4-a716-446655440000",)# Target a specific alias when the same integration has multiple configurationsclient.actions.execute( "slack", "send_channel_message", input={"channel": "#alerts", "text": "Alert!"}, workspace_id="550e8400-e29b-41d4-a716-446655440000", integration_alias="slack_bot",)
typescript
// Let workspace integration configuration resolve the connectionawait fetch('https://api.weavz.io/api/v1/actions/execute', { method: 'POST', headers: { 'Authorization': 'Bearer wvz_your_key', 'Content-Type': 'application/json', }, body: JSON.stringify({ integrationName: 'slack', actionName: 'send_channel_message', input: { channel: 'C01ABCDEF', text: 'Hello!' }, workspaceId: '550e8400-e29b-41d4-a716-446655440000', }),})// Target a specific alias when the same integration has multiple configurationsawait fetch('https://api.weavz.io/api/v1/actions/execute', { method: 'POST', headers: { 'Authorization': 'Bearer wvz_your_key', 'Content-Type': 'application/json', }, body: JSON.stringify({ integrationName: 'slack', actionName: 'send_channel_message', input: { channel: '#alerts', text: 'Alert!' }, workspaceId: '550e8400-e29b-41d4-a716-446655440000', integrationAlias: 'slack_bot', }),})
python
import httpxheaders = {"Authorization": "Bearer wvz_your_key"}# Let workspace integration configuration resolve the connectionhttpx.post( "https://api.weavz.io/api/v1/actions/execute", headers=headers, json={ "integrationName": "slack", "actionName": "send_channel_message", "input": {"channel": "C01ABCDEF", "text": "Hello!"}, "workspaceId": "550e8400-e29b-41d4-a716-446655440000", },)# Target a specific alias when the same integration has multiple configurationshttpx.post( "https://api.weavz.io/api/v1/actions/execute", headers=headers, json={ "integrationName": "slack", "actionName": "send_channel_message", "input": {"channel": "#alerts", "text": "Alert!"}, "workspaceId": "550e8400-e29b-41d4-a716-446655440000", "integrationAlias": "slack_bot", },)
When you execute an action, Weavz resolves which connection to use based on the parameters you provide and the workspace's configured integrations:
Explicit connection — connectionExternalId directly specifies the connection
Workspace integration — if workspaceId is set, the workspace's integration configuration determines the connection based on its strategy (fixed, per_user, or per_user_with_fallback)
Fallback — if no workspace integration or explicit connection is found, returns a CONNECTION_REQUIRED error
List all available integrations and their actions:
bash
# List all integrationscurl https://api.weavz.io/api/v1/integrations \ -H "Authorization: Bearer wvz_your_key"# Get details for a specific integrationcurl "https://api.weavz.io/api/v1/integrations?name=slack" \ -H "Authorization: Bearer wvz_your_key"
typescript
// List all integrationsconst { integrations } = await client.integrations.list()// Get a specific integrationconst { integration: slack } = await client.integrations.get('slack')console.log(slack.actions) // Available actions with input schemas
python
# List all integrationsresult = client.integrations.list()# Get a specific integrationresult = client.integrations.get("slack")slack = result["integration"]print(slack["actions"]) # Available actions with input schemas
typescript
// List all integrationsconst res = await fetch('https://api.weavz.io/api/v1/integrations', { headers: { 'Authorization': 'Bearer wvz_your_key' },})const { integrations } = await res.json()// Get details for a specific integrationconst slackRes = await fetch('https://api.weavz.io/api/v1/integrations?name=slack', { headers: { 'Authorization': 'Bearer wvz_your_key' },})const { integrations: [slack] } = await slackRes.json()console.log(slack.actions)
python
import httpxheaders = {"Authorization": "Bearer wvz_your_key"}# List all integrationsres = httpx.get("https://api.weavz.io/api/v1/integrations", headers=headers)integrations = res.json()["integrations"]# Get details for a specific integrationres = httpx.get( "https://api.weavz.io/api/v1/integrations", headers=headers, params={"name": "slack"},)slack = res.json()["integrations"][0]print(slack["actions"])
The integration details include all available actions with their input schemas, making it easy to discover what's possible.
Input partials are saved parameter presets that pre-fill action inputs. They are scoped to a configured workspace integration alias and can apply integration-wide or to a specific action. Trigger-specific partials use the same model for trigger inputs. When a partial is active, its values are merged into the operation input automatically — and enforced keys cannot be overridden at runtime.
This is useful for setting default channels, repositories, or other parameters that should remain consistent across executions. See the Playground guide for how to create and manage partials from the dashboard.