Docs Guides Using Input Partials Input partials let you save parameter configurations as reusable presets. They pre-fill values, enforce immutable fields, and simplify action execution for your team and AI agents.
Open the Playground Navigate to the Playground from the sidebar and select a workspace.
Configure an action Select an integration and action, then fill in the input fields you want to save as a preset.
Save as partial Click the Save button in the input panel. Enter a name for the partial and optionally mark fields as enforced.
curl TypeScript SDK Python SDK TypeScript Python
curl -X POST https://api.weavz.io/api/v1/partials \
-H "Authorization: Bearer wvz_your_key" \
-H "Content-Type: application/json" \
-d '{
"workspaceId": "proj_abc123",
"integrationName": "slack",
"actionName": "send_channel_message",
"name": "Alerts Channel",
"description": "Always post to #alerts with bot username",
"values": {
"channel": "C0ALERTS",
"username": "alert-bot"
},
"enforcedKeys": ["channel"]
}' import { WeavzClient } from '@weavz/sdk'
const client = new WeavzClient ({ apiKey: 'wvz_your_key' })
const { partial } = await client.partials. create ({
workspaceId: 'proj_abc123' ,
integrationName: 'slack' ,
actionName: 'send_channel_message' ,
name: 'Alerts Channel' ,
description: 'Always post to #alerts with bot username' ,
values: {
channel: 'C0ALERTS' ,
username: 'alert-bot' ,
},
enforcedKeys: [ 'channel' ],
}) from weavz_sdk import WeavzClient
client = WeavzClient( api_key = "wvz_your_key" )
result = client.partials.create(
workspace_id = "proj_abc123" ,
integration_name = "slack" ,
action_name = "send_channel_message" ,
name = "Alerts Channel" ,
description = "Always post to #alerts with bot username" ,
values = { "channel" : "C0ALERTS" , "username" : "alert-bot" },
enforced_keys = [ "channel" ],
) const res = await fetch ( 'https://api.weavz.io/api/v1/partials' , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer wvz_your_key' ,
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({
workspaceId: 'proj_abc123' ,
integrationName: 'slack' ,
actionName: 'send_channel_message' ,
name: 'Alerts Channel' ,
description: 'Always post to #alerts with bot username' ,
values: { channel: 'C0ALERTS' , username: 'alert-bot' },
enforcedKeys: [ 'channel' ],
}),
})
const { partial } = await res. json () import httpx
res = httpx.post(
"https://api.weavz.io/api/v1/partials" ,
headers = { "Authorization" : "Bearer wvz_your_key" },
json = {
"workspaceId" : "proj_abc123" ,
"integrationName" : "slack" ,
"actionName" : "send_channel_message" ,
"name" : "Alerts Channel" ,
"description" : "Always post to #alerts with bot username" ,
"values" : { "channel" : "C0ALERTS" , "username" : "alert-bot" },
"enforcedKeys" : [ "channel" ],
},
)
partial = res.json()[ "partial" ]
Open the Playground Navigate to the Playground and select your workspace.
Select the action Pick the integration and action that has saved partials.
Load partial Click the Load button in the input panel. Select a partial from the dropdown to populate the input fields.
Execute Modify any non-enforced fields as needed, then click Execute .
Partial values come in two flavors:
Type Behavior Use Case Non-enforced Pre-fills the field. Callers can override. Default model, default channel Enforced Locked. Callers cannot override, even at runtime. Security constraints, channel locks
Enforced keys are listed in the enforcedKeys array. Any key in this array has its value locked at execution time, regardless of what the caller passes.
Mark a partial as default and it auto-applies whenever no explicit partialIds are provided:
curl TypeScript SDK Python SDK TypeScript Python
# Set as default
curl -X POST https://api.weavz.io/api/v1/partials/{partialId}/set-default \
-H "Authorization: Bearer wvz_your_key" \
-H "Content-Type: application/json" \
-d '{"isDefault": true}' // Set as default
await client.partials. setDefault (partialId, true )
// Unset
await client.partials. setDefault (partialId, false ) # Set as default
client.partials.set_default(partial_id, True )
# Unset
client.partials.set_default(partial_id, False ) await fetch ( `https://api.weavz.io/api/v1/partials/${ partialId }/set-default` , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer wvz_your_key' ,
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({ isDefault: true }),
}) httpx.post(
f "https://api.weavz.io/api/v1/partials/ { partial_id } /set-default" ,
headers = { "Authorization" : "Bearer wvz_your_key" },
json = { "isDefault" : True },
)
Default resolution stacks up to 2 levels: action-specific default + integration-wide default.
Assign partials to MCP server tools to control what AI agents can do:
curl TypeScript SDK Python SDK TypeScript Python
curl -X POST https://api.weavz.io/api/v1/mcp/servers/{serverId}/tools \
-H "Authorization: Bearer wvz_your_key" \
-H "Content-Type: application/json" \
-d '{
"integrationName": "slack",
"actionName": "send_channel_message",
"connectionId": "conn_abc",
"partialIds": ["partial_id"]
}' await client.mcpServers. addTool (serverId, {
integrationName: 'slack' ,
actionName: 'send_channel_message' ,
connectionId: 'conn_abc' ,
partialIds: [ 'partial_id' ],
}) client.mcp_servers.add_tool(
server_id,
integration_name = "slack" ,
action_name = "send_channel_message" ,
connection_id = "conn_abc" ,
partial_ids = [ "partial_id" ],
) await fetch ( `https://api.weavz.io/api/v1/mcp/servers/${ serverId }/tools` , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer wvz_your_key' ,
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({
integrationName: 'slack' ,
actionName: 'send_channel_message' ,
connectionId: 'conn_abc' ,
partialIds: [ 'partial_id' ],
}),
}) httpx.post(
f "https://api.weavz.io/api/v1/mcp/servers/ { server_id } /tools" ,
headers = { "Authorization" : "Bearer wvz_your_key" },
json = {
"integrationName" : "slack" ,
"actionName" : "send_channel_message" ,
"connectionId" : "conn_abc" ,
"partialIds" : [ "partial_id" ],
},
)
Enforced keys are automatically removed from the MCP tool schema, so AI agents cannot see or override them.
curl TypeScript SDK Python SDK TypeScript Python
curl -X PATCH https://api.weavz.io/api/v1/partials/{partialId} \
-H "Authorization: Bearer wvz_your_key" \
-H "Content-Type: application/json" \
-d '{
"values": { "channel": "C0ALERTS", "username": "weavz-bot" },
"enforcedKeys": ["channel", "username"]
}' const { partial } = await client.partials. update (partialId, {
values: { channel: 'C0ALERTS' , username: 'weavz-bot' },
enforcedKeys: [ 'channel' , 'username' ],
}) result = client.partials.update(
partial_id,
values = { "channel" : "C0ALERTS" , "username" : "weavz-bot" },
enforced_keys = [ "channel" , "username" ],
) const res = await fetch ( `https://api.weavz.io/api/v1/partials/${ partialId }` , {
method: 'PATCH' ,
headers: {
'Authorization' : 'Bearer wvz_your_key' ,
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({
values: { channel: 'C0ALERTS' , username: 'weavz-bot' },
enforcedKeys: [ 'channel' , 'username' ],
}),
}) httpx.patch(
f "https://api.weavz.io/api/v1/partials/ { partial_id } " ,
headers = { "Authorization" : "Bearer wvz_your_key" },
json = {
"values" : { "channel" : "C0ALERTS" , "username" : "weavz-bot" },
"enforcedKeys" : [ "channel" , "username" ],
},
)
Deleting a partial automatically removes it from any MCP server tools that reference it.
curl TypeScript SDK Python SDK TypeScript Python
curl -X DELETE https://api.weavz.io/api/v1/partials/{partialId} \
-H "Authorization: Bearer wvz_your_key" await client.partials. delete (partialId) client.partials.delete(partial_id) await fetch ( `https://api.weavz.io/api/v1/partials/${ partialId }` , {
method: 'DELETE' ,
headers: { 'Authorization' : 'Bearer wvz_your_key' },
}) httpx.delete(
f "https://api.weavz.io/api/v1/partials/ { partial_id } " ,
headers = { "Authorization" : "Bearer wvz_your_key" },
) PreviousMCP Code Mode Next Integration Aliases