Skip to content
Get started

Tool Sets

Manage tool sets and the tools they contain. Tool sets group related tools, and tools define specific capabilities available to agents.

When a tool set is managed, only API key actors can modify its tools; human (profile) actors cannot.

List tool sets
client.toolSets.list(stringworkspaceID, ToolSetListParams { bundleKey, cursor, includeInfo, 4 more } query?, RequestOptionsoptions?): CursorPagination<ToolSet { metadata, spec, info } >
GET/v1/workspaces/{workspaceId}/tool_sets
Create a new tool set
client.toolSets.create(stringworkspaceID, ToolSetCreateParams { metadata, spec } body, RequestOptionsoptions?): ToolSet { metadata, spec, info }
POST/v1/workspaces/{workspaceId}/tool_sets
Get a tool set by ID
client.toolSets.retrieve(stringid, ToolSetRetrieveParams { workspaceId } params, RequestOptionsoptions?): ToolSet { metadata, spec, info }
GET/v1/workspaces/{workspaceId}/tool_sets/{id}
Update a tool set
client.toolSets.update(stringid, ToolSetUpdateParams { workspaceId, metadata, spec, updateMask } params, RequestOptionsoptions?): ToolSet { metadata, spec, info }
PUT/v1/workspaces/{workspaceId}/tool_sets/{id}
Delete a tool set
client.toolSets.delete(stringid, ToolSetDeleteParams { workspaceId } params, RequestOptionsoptions?): void
DELETE/v1/workspaces/{workspaceId}/tool_sets/{id}
Get consumed OpenAPI spec
client.toolSets.getOpenAPISpec(stringtoolSetID, ToolSetGetOpenAPISpecParams { workspaceId } params, RequestOptionsoptions?): ToolSetGetOpenAPISpecResponse { spec }
GET/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/openapi_spec
List tool set events
client.toolSets.listEvents(stringtoolSetID, ToolSetListEventsParams { workspaceId, cursor, includeInfo, 2 more } params, RequestOptionsoptions?): CursorPagination<ToolSetEvent { metadata, event, info, toolSetId } >
GET/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/events
ModelsExpand Collapse
ApprovalRequirementFilter { always, only }

Approval filters that will automatically set the approval requirement on tools synced from an external source

always?: boolean
only?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
AttributeFilter { attribute, matcher }

Single attribute filter

attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
SyncCompleted { message, toolsSynced }

Emitted when a tool set sync operation completes successfully.

message?: string

Optional message with additional details.

toolsSynced?: number

Number of tools synced.

formatint32
SyncFailed { error, errorType, message }

Emitted when a tool set sync operation fails.

error?: boolean

Indicates this is an error event.

errorType?: string

Optional error type/code for programmatic handling.

message?: string

Error message describing what went wrong.

SyncStarted { message }

Emitted when a tool set sync operation begins.

message?: string

Human-readable message describing the start of the sync.

ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
ToolSet { metadata, spec, info }
metadata: ResourceMetadata { id, accountId, createdAt, 6 more }

Standard metadata for persistent, named resources (e.g., agents, tools, prompts)

id: string

Unique identifier for the resource (prefixed ULID, e.g., “agent_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

createdAt: string

Timestamp when this resource was created

formatdate-time
name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string

ID of the actor (user or service account) that created this resource

workspaceId: string

Workspace this resource belongs to for organizational grouping (prefixed ULID)

bundleKey?: string

Optional bundle ownership key. When set, indicates the resource is managed by a configuration bundle identified by this key. Used by BulkWorkspaceResources.Apply to track which resources belong to which bundle for reconciliation / soft-delete on re-apply.

externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ToolSetSpec { adapter, description }
adapter?: ToolSetAdapter { http, mcp, openapi }
http?: ToolSetAdapterHTTP { baseUrl, headers }
baseUrl?: string
headers?: Record<string, string>
mcp?: ToolSetAdapterMcp { excludeTools, headers, includeTools, 2 more }
excludeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
headers?: Record<string, string>
includeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
toolApprovals?: ApprovalRequirementFilter { always, only }

Approval filters that will automatically set the approval requirement on tools synced from an external source

always?: boolean
only?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
url?: string
openapi?: ToolSetAdapterOpenAPI { baseUrl, excludeTools, headers, 5 more }
baseUrl?: string

Base URL for dispatching tool calls. If set, overrides the server resolved from the spec’s servers array.

excludeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
headers?: Record<string, string>

Headers sent when fetching the spec from a URL and when dispatching tool calls.

includeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
serverName?: string

Name of the server entry in the spec’s servers array (OpenAPI 3.2 server.name field). Used to select which server URL to dispatch to when base_url is not set. If unset, the first server is used. Ignored when base_url is set.

toolApprovals?: ApprovalRequirementFilter { always, only }

Approval filters that will automatically set the approval requirement on tools synced from an external source

always?: boolean
only?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
uploadId?: string

ID of a COMPLETE Upload containing the OpenAPI spec document.

url?: string

URL to fetch the OpenAPI spec from. Synced automatically every hour.

description?: string
info?: ToolSetInfo { agentCount, createdBy, lastSync, toolCount }

Tool set information

agentCount?: number
createdBy?: Profile { metadata, spec }

A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.

metadata: AccountResourceMetadata { id, accountId, name, 3 more }

AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.

id: string

Unique identifier for the resource (prefixed ULID, e.g., “apikey_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string
externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ProfileSpec { type, email, name }

Configuration for a profile.

type: "PROFILE_TYPE_UNSPECIFIED" | "PROFILE_TYPE_USER" | "PROFILE_TYPE_API_KEY" | "PROFILE_TYPE_SYSTEM"

Whether this profile represents a human user, an API key, or a system principal.

formatenum
One of the following:
"PROFILE_TYPE_UNSPECIFIED"
"PROFILE_TYPE_USER"
"PROFILE_TYPE_API_KEY"
"PROFILE_TYPE_SYSTEM"
email?: string

Email address of the profile. Required and unique within an account for user profiles.

name?: string

Display name (e.g., “Bobby Tables”).

lastSync?: string
toolCount?: number
ToolSetAdapter { http, mcp, openapi }
http?: ToolSetAdapterHTTP { baseUrl, headers }
baseUrl?: string
headers?: Record<string, string>
mcp?: ToolSetAdapterMcp { excludeTools, headers, includeTools, 2 more }
excludeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
headers?: Record<string, string>
includeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
toolApprovals?: ApprovalRequirementFilter { always, only }

Approval filters that will automatically set the approval requirement on tools synced from an external source

always?: boolean
only?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
url?: string
openapi?: ToolSetAdapterOpenAPI { baseUrl, excludeTools, headers, 5 more }
baseUrl?: string

Base URL for dispatching tool calls. If set, overrides the server resolved from the spec’s servers array.

excludeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
headers?: Record<string, string>

Headers sent when fetching the spec from a URL and when dispatching tool calls.

includeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
serverName?: string

Name of the server entry in the spec’s servers array (OpenAPI 3.2 server.name field). Used to select which server URL to dispatch to when base_url is not set. If unset, the first server is used. Ignored when base_url is set.

toolApprovals?: ApprovalRequirementFilter { always, only }

Approval filters that will automatically set the approval requirement on tools synced from an external source

always?: boolean
only?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
uploadId?: string

ID of a COMPLETE Upload containing the OpenAPI spec document.

url?: string

URL to fetch the OpenAPI spec from. Synced automatically every hour.

ToolSetAdapterHTTP { baseUrl, headers }
baseUrl?: string
headers?: Record<string, string>
ToolSetAdapterMcp { excludeTools, headers, includeTools, 2 more }
excludeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
headers?: Record<string, string>
includeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
toolApprovals?: ApprovalRequirementFilter { always, only }

Approval filters that will automatically set the approval requirement on tools synced from an external source

always?: boolean
only?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
url?: string
ToolSetAdapterOpenAPI { baseUrl, excludeTools, headers, 5 more }
baseUrl?: string

Base URL for dispatching tool calls. If set, overrides the server resolved from the spec’s servers array.

excludeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
headers?: Record<string, string>

Headers sent when fetching the spec from a URL and when dispatching tool calls.

includeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
serverName?: string

Name of the server entry in the spec’s servers array (OpenAPI 3.2 server.name field). Used to select which server URL to dispatch to when base_url is not set. If unset, the first server is used. Ignored when base_url is set.

toolApprovals?: ApprovalRequirementFilter { always, only }

Approval filters that will automatically set the approval requirement on tools synced from an external source

always?: boolean
only?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
uploadId?: string

ID of a COMPLETE Upload containing the OpenAPI spec document.

url?: string

URL to fetch the OpenAPI spec from. Synced automatically every hour.

ToolSetEvent { metadata, event, info, toolSetId }

A single event in the tool set’s operation timeline.

metadata: OperationMetadata { id, accountId, createdAt, 4 more }

Metadata for ephemeral operations and activities (e.g., objectives, executions, runs)

id: string

Unique identifier for the operation (prefixed ULID, e.g., “obj_01HXK…”)

accountId: string

Account this operation belongs to for multi-tenant isolation (prefixed ULID)

createdAt: string

Timestamp when this operation was created ULID includes timestamp information, but this explicit field enables easier querying

formatdate-time
profileId: string

ID of the actor (user or service account) that created this operation

workspaceId: string

Workspace this operation belongs to for organizational grouping (prefixed ULID)

externalId?: string

External ID for the operation (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“priority”: “high”, “source”: “api”, “workflow”: “onboarding”}

event?: ToolSetEventData { syncCompleted, syncFailed, syncStarted, type }

Event payload for a tool set operation.

syncCompleted?: SyncCompleted { message, toolsSynced }

Emitted when a tool set sync operation completes successfully.

message?: string

Optional message with additional details.

toolsSynced?: number

Number of tools synced.

formatint32
syncFailed?: SyncFailed { error, errorType, message }

Emitted when a tool set sync operation fails.

error?: boolean

Indicates this is an error event.

errorType?: string

Optional error type/code for programmatic handling.

message?: string

Error message describing what went wrong.

syncStarted?: SyncStarted { message }

Emitted when a tool set sync operation begins.

message?: string

Human-readable message describing the start of the sync.

type?: string

Type of the event (e.g., “sync_started”, “sync_completed”, “sync_failed”).

info?: Info { createdBy, toolSet }
createdBy?: Profile { metadata, spec }

A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.

metadata: AccountResourceMetadata { id, accountId, name, 3 more }

AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.

id: string

Unique identifier for the resource (prefixed ULID, e.g., “apikey_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string
externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ProfileSpec { type, email, name }

Configuration for a profile.

type: "PROFILE_TYPE_UNSPECIFIED" | "PROFILE_TYPE_USER" | "PROFILE_TYPE_API_KEY" | "PROFILE_TYPE_SYSTEM"

Whether this profile represents a human user, an API key, or a system principal.

formatenum
One of the following:
"PROFILE_TYPE_UNSPECIFIED"
"PROFILE_TYPE_USER"
"PROFILE_TYPE_API_KEY"
"PROFILE_TYPE_SYSTEM"
email?: string

Email address of the profile. Required and unique within an account for user profiles.

name?: string

Display name (e.g., “Bobby Tables”).

toolSet?: ResourceMetadata { id, accountId, createdAt, 6 more }

Standard metadata for persistent, named resources (e.g., agents, tools, prompts)

id: string

Unique identifier for the resource (prefixed ULID, e.g., “agent_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

createdAt: string

Timestamp when this resource was created

formatdate-time
name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string

ID of the actor (user or service account) that created this resource

workspaceId: string

Workspace this resource belongs to for organizational grouping (prefixed ULID)

bundleKey?: string

Optional bundle ownership key. When set, indicates the resource is managed by a configuration bundle identified by this key. Used by BulkWorkspaceResources.Apply to track which resources belong to which bundle for reconciliation / soft-delete on re-apply.

externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

toolSetId?: string

The tool set this event is associated with.

ToolSetEventData { syncCompleted, syncFailed, syncStarted, type }

Event payload for a tool set operation.

syncCompleted?: SyncCompleted { message, toolsSynced }

Emitted when a tool set sync operation completes successfully.

message?: string

Optional message with additional details.

toolsSynced?: number

Number of tools synced.

formatint32
syncFailed?: SyncFailed { error, errorType, message }

Emitted when a tool set sync operation fails.

error?: boolean

Indicates this is an error event.

errorType?: string

Optional error type/code for programmatic handling.

message?: string

Error message describing what went wrong.

syncStarted?: SyncStarted { message }

Emitted when a tool set sync operation begins.

message?: string

Human-readable message describing the start of the sync.

type?: string

Type of the event (e.g., “sync_started”, “sync_completed”, “sync_failed”).

ToolSetInfo { agentCount, createdBy, lastSync, toolCount }
agentCount?: number
createdBy?: Profile { metadata, spec }

A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.

metadata: AccountResourceMetadata { id, accountId, name, 3 more }

AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.

id: string

Unique identifier for the resource (prefixed ULID, e.g., “apikey_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string
externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ProfileSpec { type, email, name }

Configuration for a profile.

type: "PROFILE_TYPE_UNSPECIFIED" | "PROFILE_TYPE_USER" | "PROFILE_TYPE_API_KEY" | "PROFILE_TYPE_SYSTEM"

Whether this profile represents a human user, an API key, or a system principal.

formatenum
One of the following:
"PROFILE_TYPE_UNSPECIFIED"
"PROFILE_TYPE_USER"
"PROFILE_TYPE_API_KEY"
"PROFILE_TYPE_SYSTEM"
email?: string

Email address of the profile. Required and unique within an account for user profiles.

name?: string

Display name (e.g., “Bobby Tables”).

lastSync?: string
toolCount?: number
ToolSetSpec { adapter, description }
adapter?: ToolSetAdapter { http, mcp, openapi }
http?: ToolSetAdapterHTTP { baseUrl, headers }
baseUrl?: string
headers?: Record<string, string>
mcp?: ToolSetAdapterMcp { excludeTools, headers, includeTools, 2 more }
excludeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
headers?: Record<string, string>
includeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
toolApprovals?: ApprovalRequirementFilter { always, only }

Approval filters that will automatically set the approval requirement on tools synced from an external source

always?: boolean
only?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
url?: string
openapi?: ToolSetAdapterOpenAPI { baseUrl, excludeTools, headers, 5 more }
baseUrl?: string

Base URL for dispatching tool calls. If set, overrides the server resolved from the spec’s servers array.

excludeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
headers?: Record<string, string>

Headers sent when fetching the spec from a URL and when dispatching tool calls.

includeTools?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
serverName?: string

Name of the server entry in the spec’s servers array (OpenAPI 3.2 server.name field). Used to select which server URL to dispatch to when base_url is not set. If unset, the first server is used. Ignored when base_url is set.

toolApprovals?: ApprovalRequirementFilter { always, only }

Approval filters that will automatically set the approval requirement on tools synced from an external source

always?: boolean
only?: ToolFilter { operator, filters }

Top-level filter with simple boolean logic (no nesting)

operator: "OPERATOR_UNSPECIFIED" | "OPERATOR_AND" | "OPERATOR_OR"
formatenum
One of the following:
"OPERATOR_UNSPECIFIED"
"OPERATOR_AND"
"OPERATOR_OR"
filters?: Array<AttributeFilter { attribute, matcher } >
attribute: "ATTRIBUTE_UNSPECIFIED" | "ATTRIBUTE_NAME" | "ATTRIBUTE_TITLE" | "ATTRIBUTE_DESCRIPTION"
formatenum
One of the following:
"ATTRIBUTE_UNSPECIFIED"
"ATTRIBUTE_NAME"
"ATTRIBUTE_TITLE"
"ATTRIBUTE_DESCRIPTION"
matcher?: StringMatcher { caseSensitive, contains, endsWith, 3 more }

String matching operations

caseSensitive?: boolean
contains?: string
endsWith?: string
exact?: string
regex?: string
startsWith?: string
uploadId?: string

ID of a COMPLETE Upload containing the OpenAPI spec document.

url?: string

URL to fetch the OpenAPI spec from. Synced automatically every hour.

description?: string
ToolSetGetOpenAPISpecResponse { spec }
spec?: string

The consumed OpenAPI specification as a JSON string.

Tool SetsTools

Manage tool sets and the tools they contain. Tool sets group related tools, and tools define specific capabilities available to agents.

When a tool set is managed, only API key actors can modify its tools; human (profile) actors cannot.

List tools
client.toolSets.tools.list(stringtoolSetID, ToolListParams { workspaceId, bundleKey, cursor, 8 more } params, RequestOptionsoptions?): CursorPagination<Tool { metadata, spec, info } >
GET/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools
Create a new tool
client.toolSets.tools.create(stringtoolSetID, ToolCreateParams { workspaceId, metadata, spec } params, RequestOptionsoptions?): Tool { metadata, spec, info }
POST/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools
Get a tool by ID
client.toolSets.tools.retrieve(stringid, ToolRetrieveParams { workspaceId, toolSetId } params, RequestOptionsoptions?): Tool { metadata, spec, info }
GET/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools/{id}
Update a tool
client.toolSets.tools.update(stringid, ToolUpdateParams { workspaceId, toolSetId, metadata, 2 more } params, RequestOptionsoptions?): Tool { metadata, spec, info }
PUT/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools/{id}
Delete a tool
client.toolSets.tools.delete(stringid, ToolDeleteParams { workspaceId, toolSetId } params, RequestOptionsoptions?): void
DELETE/v1/workspaces/{workspaceId}/tool_sets/{toolSetId}/tools/{id}
ModelsExpand Collapse
ConfigHTTP { requestMethod, headers, path, 4 more }
requestMethod: "HTTP_METHOD_UNSPECIFIED" | "GET" | "POST" | 3 more
formatenum
One of the following:
"HTTP_METHOD_UNSPECIFIED"
"GET"
"POST"
"PUT"
"PATCH"
"DELETE"
headers?: Record<string, string>
path?: string
query?: string
requestBodyContentType?: string
requestBodyTemplate?: string

These are only used when the request method is a POST, PUT, or PATCH

toolName?: string

The tool name (commonly an “operation id” in OpenAPI specs) to call on the HTTP adapter. This is used to match the tool spec to the correct endpoint on the HTTP adapter. it will be derived from the name of the tool if not provided.

ConfigMcp { toolDescription, toolName, toolTitle }
toolDescription?: string
toolName?: string
toolTitle?: string
ConfigOpenAPI { method, operationId, path }
method?: string
operationId?: string
path?: string
Tool { metadata, spec, info }
metadata: ResourceMetadata { id, accountId, createdAt, 6 more }

Standard metadata for persistent, named resources (e.g., agents, tools, prompts)

id: string

Unique identifier for the resource (prefixed ULID, e.g., “agent_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

createdAt: string

Timestamp when this resource was created

formatdate-time
name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string

ID of the actor (user or service account) that created this resource

workspaceId: string

Workspace this resource belongs to for organizational grouping (prefixed ULID)

bundleKey?: string

Optional bundle ownership key. When set, indicates the resource is managed by a configuration bundle identified by this key. Used by BulkWorkspaceResources.Apply to track which resources belong to which bundle for reconciliation / soft-delete on re-apply.

externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ToolSpec { config, description, parameters, 2 more }
config: ToolSpecConfig { http, mcp, openapi }

Config defines the adapter to use for the tool. This is used to determine how the tool is called. For example, if the tool is an HTTP tool, the adapter will be Http. If the tool is an inline tool, the adapter will be Inline.

http?: ConfigHTTP { requestMethod, headers, path, 4 more }
requestMethod: "HTTP_METHOD_UNSPECIFIED" | "GET" | "POST" | 3 more
formatenum
One of the following:
"HTTP_METHOD_UNSPECIFIED"
"GET"
"POST"
"PUT"
"PATCH"
"DELETE"
headers?: Record<string, string>
path?: string
query?: string
requestBodyContentType?: string
requestBodyTemplate?: string

These are only used when the request method is a POST, PUT, or PATCH

toolName?: string

The tool name (commonly an “operation id” in OpenAPI specs) to call on the HTTP adapter. This is used to match the tool spec to the correct endpoint on the HTTP adapter. it will be derived from the name of the tool if not provided.

mcp?: ConfigMcp { toolDescription, toolName, toolTitle }
toolDescription?: string
toolName?: string
toolTitle?: string
openapi?: ConfigOpenAPI { method, operationId, path }
method?: string
operationId?: string
path?: string
description: string
parameters: Record<string, unknown>
status: "TOOL_STATUS_UNSPECIFIED" | "TOOL_STATUS_AVAILABLE" | "TOOL_STATUS_OMITTED" | "TOOL_STATUS_ARCHIVED"
formatenum
One of the following:
"TOOL_STATUS_UNSPECIFIED"
"TOOL_STATUS_AVAILABLE"
"TOOL_STATUS_OMITTED"
"TOOL_STATUS_ARCHIVED"
requiresApproval?: boolean
info?: ToolInfo { createdBy, toolSet }
createdBy?: Profile { metadata, spec }

A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.

metadata: AccountResourceMetadata { id, accountId, name, 3 more }

AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.

id: string

Unique identifier for the resource (prefixed ULID, e.g., “apikey_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string
externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ProfileSpec { type, email, name }

Configuration for a profile.

type: "PROFILE_TYPE_UNSPECIFIED" | "PROFILE_TYPE_USER" | "PROFILE_TYPE_API_KEY" | "PROFILE_TYPE_SYSTEM"

Whether this profile represents a human user, an API key, or a system principal.

formatenum
One of the following:
"PROFILE_TYPE_UNSPECIFIED"
"PROFILE_TYPE_USER"
"PROFILE_TYPE_API_KEY"
"PROFILE_TYPE_SYSTEM"
email?: string

Email address of the profile. Required and unique within an account for user profiles.

name?: string

Display name (e.g., “Bobby Tables”).

toolSet?: ResourceMetadata { id, accountId, createdAt, 6 more }

Standard metadata for persistent, named resources (e.g., agents, tools, prompts)

id: string

Unique identifier for the resource (prefixed ULID, e.g., “agent_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

createdAt: string

Timestamp when this resource was created

formatdate-time
name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string

ID of the actor (user or service account) that created this resource

workspaceId: string

Workspace this resource belongs to for organizational grouping (prefixed ULID)

bundleKey?: string

Optional bundle ownership key. When set, indicates the resource is managed by a configuration bundle identified by this key. Used by BulkWorkspaceResources.Apply to track which resources belong to which bundle for reconciliation / soft-delete on re-apply.

externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

ToolInfo { createdBy, toolSet }
createdBy?: Profile { metadata, spec }

A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.

metadata: AccountResourceMetadata { id, accountId, name, 3 more }

AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.

id: string

Unique identifier for the resource (prefixed ULID, e.g., “apikey_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string
externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

spec: ProfileSpec { type, email, name }

Configuration for a profile.

type: "PROFILE_TYPE_UNSPECIFIED" | "PROFILE_TYPE_USER" | "PROFILE_TYPE_API_KEY" | "PROFILE_TYPE_SYSTEM"

Whether this profile represents a human user, an API key, or a system principal.

formatenum
One of the following:
"PROFILE_TYPE_UNSPECIFIED"
"PROFILE_TYPE_USER"
"PROFILE_TYPE_API_KEY"
"PROFILE_TYPE_SYSTEM"
email?: string

Email address of the profile. Required and unique within an account for user profiles.

name?: string

Display name (e.g., “Bobby Tables”).

toolSet?: ResourceMetadata { id, accountId, createdAt, 6 more }

Standard metadata for persistent, named resources (e.g., agents, tools, prompts)

id: string

Unique identifier for the resource (prefixed ULID, e.g., “agent_01HXK…”)

accountId: string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

createdAt: string

Timestamp when this resource was created

formatdate-time
name: string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

profileId: string

ID of the actor (user or service account) that created this resource

workspaceId: string

Workspace this resource belongs to for organizational grouping (prefixed ULID)

bundleKey?: string

Optional bundle ownership key. When set, indicates the resource is managed by a configuration bundle identified by this key. Used by BulkWorkspaceResources.Apply to track which resources belong to which bundle for reconciliation / soft-delete on re-apply.

externalId?: string

External ID for the resource (e.g., a workflow ID from an external system)

labels?: Record<string, string>

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

ToolSpec { config, description, parameters, 2 more }
config: ToolSpecConfig { http, mcp, openapi }

Config defines the adapter to use for the tool. This is used to determine how the tool is called. For example, if the tool is an HTTP tool, the adapter will be Http. If the tool is an inline tool, the adapter will be Inline.

http?: ConfigHTTP { requestMethod, headers, path, 4 more }
requestMethod: "HTTP_METHOD_UNSPECIFIED" | "GET" | "POST" | 3 more
formatenum
One of the following:
"HTTP_METHOD_UNSPECIFIED"
"GET"
"POST"
"PUT"
"PATCH"
"DELETE"
headers?: Record<string, string>
path?: string
query?: string
requestBodyContentType?: string
requestBodyTemplate?: string

These are only used when the request method is a POST, PUT, or PATCH

toolName?: string

The tool name (commonly an “operation id” in OpenAPI specs) to call on the HTTP adapter. This is used to match the tool spec to the correct endpoint on the HTTP adapter. it will be derived from the name of the tool if not provided.

mcp?: ConfigMcp { toolDescription, toolName, toolTitle }
toolDescription?: string
toolName?: string
toolTitle?: string
openapi?: ConfigOpenAPI { method, operationId, path }
method?: string
operationId?: string
path?: string
description: string
parameters: Record<string, unknown>
status: "TOOL_STATUS_UNSPECIFIED" | "TOOL_STATUS_AVAILABLE" | "TOOL_STATUS_OMITTED" | "TOOL_STATUS_ARCHIVED"
formatenum
One of the following:
"TOOL_STATUS_UNSPECIFIED"
"TOOL_STATUS_AVAILABLE"
"TOOL_STATUS_OMITTED"
"TOOL_STATUS_ARCHIVED"
requiresApproval?: boolean
ToolSpecConfig { http, mcp, openapi }

Config defines the adapter to use for the tool. This is used to determine how the tool is called. For example, if the tool is an HTTP tool, the adapter will be Http. If the tool is an inline tool, the adapter will be Inline.

http?: ConfigHTTP { requestMethod, headers, path, 4 more }
requestMethod: "HTTP_METHOD_UNSPECIFIED" | "GET" | "POST" | 3 more
formatenum
One of the following:
"HTTP_METHOD_UNSPECIFIED"
"GET"
"POST"
"PUT"
"PATCH"
"DELETE"
headers?: Record<string, string>
path?: string
query?: string
requestBodyContentType?: string
requestBodyTemplate?: string

These are only used when the request method is a POST, PUT, or PATCH

toolName?: string

The tool name (commonly an “operation id” in OpenAPI specs) to call on the HTTP adapter. This is used to match the tool spec to the correct endpoint on the HTTP adapter. it will be derived from the name of the tool if not provided.

mcp?: ConfigMcp { toolDescription, toolName, toolTitle }
toolDescription?: string
toolName?: string
toolTitle?: string
openapi?: ConfigOpenAPI { method, operationId, path }
method?: string
operationId?: string
path?: string