Custom Toolkits
Tags: ai, customization, tools
Custom AI toolkit creation and management
In the product: Custom Toolkits · Toolkits
Resources
Request and response models used by the endpoints on this page.
AbilityResponse
| Field | Type | Required | Description |
|---|---|---|---|
abilityType | String | ✓ | |
celCondition | String | ||
config | Dict[str, Any] | ✓ | |
enabled | Boolean | ✓ | |
id | Integer | ✓ | |
uuid | String | ✓ |
Example:
{
"id": 0 // Integer,
"uuid": "string" // String,
"abilityType": "string" // String,
"config": {} // Dict[str, Any],
"enabled": false // Boolean,
"celCondition": "string" // String, optional
}
CustomToolResponse
| Field | Type | Required | Description |
|---|---|---|---|
abilities | Array | ||
chatModel | Literal[openai:chat:gpt-4.1, openai:chat:gpt-4.1-mini, openai:chat:gpt-4o, openai:chat:gpt-4o-mini, openai:chat:gpt-5, openai:chat:gpt-5.1, openai:chat:gpt-5-mini, openai:chat:gpt-5-nano, openai:chat:gpt-5.4, openai:chat:gpt-5.4-mini, openai:chat:gpt-5.4-nano, google:vertex:gemini-2.0-flash, google:vertex:gemini-flash-exp-2.0, google:vertex:gemini-2.5-flash, google:vertex:gemini-3-flash, google:vertex:gemini-3.5-flash, google:vertex:gemini-3-pro-preview, google:vertex:gemini-3.1-pro, google:aistudio:gemini-2.5-flash, google:aistudio:gemini-3-flash, google:aistudio:gemini-3.5-flash, google:aistudio:gemini-3-pro-preview, google:aistudio:gemini-3.1-pro, google:aistudio:gemini-3.1-flash-lite, google:aistudio:gemini-2.5-pro, google:vertex:claude-3.5-opus, google:vertex:claude-3.5-sonnet, google:vertex:claude-3.7, google:vertex:claude-4-opus, google:vertex:claude-4-sonnet, google:vertex:claude-4-5-haiku, aws:bedrock:claude-3.5-opus, aws:bedrock:claude-3.5-sonnet, aws:bedrock:claude-3.7, aws:bedrock:claude-4-opus, aws:bedrock:claude-4-1-opus, aws:bedrock:claude-4-sonnet, aws:bedrock:claude-4-5-opus, aws:bedrock:claude-4-6-opus, aws:bedrock:claude-4-5-sonnet, aws:bedrock:claude-4-6-sonnet, aws:bedrock:claude-4-5-haiku, aws:bedrock:gpt-oss-20b, aws:bedrock:gpt-oss-120b, aws:bedrock:nova-pro-1, aws:bedrock:nova-2-lite, aws:bedrock:kimi-k2.5, xai:chat:grok-4.20-0309-reasoning, xai:chat:grok-4.20-0309-non-reasoning, xai:chat:grok-4-1-fast-reasoning, xai:chat:grok-4-1-fast-non-reasoning, xai:chat:grok-4.3, xai:chat:grok-4.5] | ||
createdAt | DateTime | ✓ | |
customToolkitId | Integer | ✓ | |
dataTypes | Array | ||
description | String | ✓ | |
displayName | String | ||
files | Array | ||
id | Integer | ✓ | |
inputSchema | Object | ||
name | String | ✓ | |
outputSchema | Object | ||
prompt | String | ✓ | |
updatedAt | DateTime | ✓ | |
uuid | String | ✓ |
Example:
{
"id": 0 // Integer,
"uuid": "string" // String,
"customToolkitId": 0 // Integer,
"name": "string" // String,
"displayName": "string" // String, optional,
"description": "string" // String,
"prompt": "string" // String,
"chatModel": null // Literal[openai:chat:gpt-4.1, openai:chat:gpt-4.1-mini, openai:chat:gpt-4o, openai:chat:gpt-4o-mini, openai:chat:gpt-5, openai:chat:gpt-5.1, openai:chat:gpt-5-mini, openai:chat:gpt-5-nano, openai:chat:gpt-5.4, openai:chat:gpt-5.4-mini, openai:chat:gpt-5.4-nano, google:vertex:gemini-2.0-flash, google:vertex:gemini-flash-exp-2.0, google:vertex:gemini-2.5-flash, google:vertex:gemini-3-flash, google:vertex:gemini-3.5-flash, google:vertex:gemini-3-pro-preview, google:vertex:gemini-3.1-pro, google:aistudio:gemini-2.5-flash, google:aistudio:gemini-3-flash, google:aistudio:gemini-3.5-flash, google:aistudio:gemini-3-pro-preview, google:aistudio:gemini-3.1-pro, google:aistudio:gemini-3.1-flash-lite, google:aistudio:gemini-2.5-pro, google:vertex:claude-3.5-opus, google:vertex:claude-3.5-sonnet, google:vertex:claude-3.7, google:vertex:claude-4-opus, google:vertex:claude-4-sonnet, google:vertex:claude-4-5-haiku, aws:bedrock:claude-3.5-opus, aws:bedrock:claude-3.5-sonnet, aws:bedrock:claude-3.7, aws:bedrock:claude-4-opus, aws:bedrock:claude-4-1-opus, aws:bedrock:claude-4-sonnet, aws:bedrock:claude-4-5-opus, aws:bedrock:claude-4-6-opus, aws:bedrock:claude-4-5-sonnet, aws:bedrock:claude-4-6-sonnet, aws:bedrock:claude-4-5-haiku, aws:bedrock:gpt-oss-20b, aws:bedrock:gpt-oss-120b, aws:bedrock:nova-pro-1, aws:bedrock:nova-2-lite, aws:bedrock:kimi-k2.5, xai:chat:grok-4.20-0309-reasoning, xai:chat:grok-4.20-0309-non-reasoning, xai:chat:grok-4-1-fast-reasoning, xai:chat:grok-4-1-fast-non-reasoning, xai:chat:grok-4.3, xai:chat:grok-4.5], optional,
"inputSchema": {} // Object, optional,
"outputSchema": {} // Object, optional,
"files": [] // Array<FileResponse>, optional, default: PydanticUndefined,
"dataTypes": [] // Array<DataTypeResponse>, optional, default: PydanticUndefined,
"abilities": [] // Array<AbilityResponse>, optional, default: PydanticUndefined,
"createdAt": "2024-01-01T00:00:00Z" // DateTime,
"updatedAt": "2024-01-01T00:00:00Z" // DateTime
}
CustomToolkitResponse
| Field | Type | Required | Description |
|---|---|---|---|
abilities | Array | ||
createdAt | DateTime | ✓ | |
customTools | Array | ||
description | String | ✓ | |
id | Integer | ✓ | |
name | String | ✓ | |
ownerId | Integer | ✓ | |
permissions | Integer | Default: 0 | |
slug | String | ✓ | |
state | <enum ToolkitState | ✓ | |
updatedAt | DateTime | ✓ |
Example:
{
"id": 0 // Integer,
"name": "string" // String,
"slug": "string" // String,
"description": "string" // String,
"state": null // <enum ToolkitState,
"customTools": [] // Array<CustomToolResponse>, optional, default: PydanticUndefined,
"abilities": [] // Array<AbilityResponse>, optional, default: PydanticUndefined,
"ownerId": 0 // Integer,
"createdAt": "2024-01-01T00:00:00Z" // DateTime,
"updatedAt": "2024-01-01T00:00:00Z" // DateTime,
"permissions": 0 // Integer, optional, default: 0
}
DataTypeMemberRoleAccessResponse
| Field | Type | Required | Description |
|---|---|---|---|
accessMode | Integer | ✓ | |
memberRoleId | Integer | ✓ | |
memberRoleName | String | ✓ |
Example:
{
"memberRoleId": 0 // Integer,
"memberRoleName": "string" // String,
"accessMode": 0 // Integer
}
DataTypeResponse
| Field | Type | Required | Description |
|---|---|---|---|
accessMode | Integer | ||
archived | Boolean | Default: False | |
categories | Array | ✓ | |
createRules | Array | ✓ | |
createdAt | DateTime | ✓ | |
description | String | ✓ | |
fields | Array | ✓ | |
id | Integer | ✓ | |
isCollection | Boolean | ✓ | |
memberRoleAccess | Array | ||
name | String | ✓ | |
ownerId | Integer | ||
pinned | Boolean | ||
prompt | String | ✓ | |
recordCount | Integer | ||
recordScope | String | ✓ | |
sensitivity | String | ✓ | |
slug | String | ✓ | |
updateRules | Array | ✓ | |
updatedAt | DateTime | ✓ | |
uuid | String | ✓ |
Example:
{
"id": 0 // Integer,
"name": "string" // String,
"uuid": "string" // String,
"slug": "string" // String,
"accessMode": 0 // Integer, optional,
"description": "string" // String,
"prompt": "string" // String,
"isCollection": false // Boolean,
"pinned": false // Boolean, optional,
"archived": false // Boolean, optional, default: False,
"ownerId": 0 // Integer, optional,
"recordScope": "string" // String,
"sensitivity": "string" // String,
"categories": "string" // Array<String>,
"createdAt": "2024-01-01T00:00:00Z" // DateTime,
"updatedAt": "2024-01-01T00:00:00Z" // DateTime,
"createRules": [] // Array<EventRuleResponse>,
"updateRules": [] // Array<EventRuleResponse>,
"fields": [] // Array<SchemaField>,
"memberRoleAccess": [] // Array<DataTypeMemberRoleAccessResponse>, optional, default: PydanticUndefined,
"recordCount": 0 // Integer, optional
}
EventRuleResponse
| Field | Type | Required | Description |
|---|---|---|---|
actionParams | Dict[str, Any] | ✓ | |
actionType | <enum EventRuleActionType | ✓ | |
active | Boolean | ✓ | |
appConnectionId | Integer | ||
calendarEventTypeId | Integer | ✓ | |
calendarId | Integer | ✓ | |
celBlockedAt | DateTime | ||
conditions | String | ✓ | |
createdAt | DateTime | ✓ | |
dataTypeId | Integer | ✓ | |
dataTypeName | String | ||
delay | Integer | ✓ | |
error | String | ✓ | |
errorMessage | String | ✓ | |
eventType | <enum EventRuleEventType | ✓ | |
failedAt | DateTime | ✓ | |
id | Integer | ✓ | |
journeyId | Integer | ||
journeyStepId | Integer | ✓ | |
name | String | ✓ | |
objectType | <enum EventRuleObjectType | ✓ | |
order | Integer | ✓ | |
routineId | Integer | ✓ | |
taskId | Integer | ✓ | |
taskName | String | ||
taskWorkflowId | Integer | ||
triggerParams | Dict[str, Any] | ✓ | |
updatedAt | DateTime | ✓ | |
uuid | String | ✓ | |
workflowRevisionId | Integer | ✓ |
Example:
{
"id": 0 // Integer,
"uuid": "string" // String,
"objectType": null // <enum EventRuleObjectType,
"name": "string" // String,
"eventType": null // <enum EventRuleEventType,
"conditions": "string" // String,
"actionType": null // <enum EventRuleActionType,
"actionParams": {} // Dict[str, Any],
"triggerParams": {} // Dict[str, Any],
"active": false // Boolean,
"createdAt": "2024-01-01T00:00:00Z" // DateTime,
"updatedAt": "2024-01-01T00:00:00Z" // DateTime,
"taskId": 0 // Integer,
"taskName": "string" // String, optional,
"taskWorkflowId": 0 // Integer, optional,
"dataTypeId": 0 // Integer,
"dataTypeName": "string" // String, optional,
"routineId": 0 // Integer,
"workflowRevisionId": 0 // Integer,
"calendarId": 0 // Integer,
"calendarEventTypeId": 0 // Integer,
"journeyStepId": 0 // Integer,
"journeyId": 0 // Integer, optional,
"appConnectionId": 0 // Integer, optional,
"error": "string" // String,
"errorMessage": "string" // String,
"failedAt": "2024-01-01T00:00:00Z" // DateTime,
"celBlockedAt": "2024-01-01T00:00:00Z" // DateTime, optional,
"delay": 0 // Integer,
"order": 0 // Integer
}
FileResponse
| Field | Type | Required | Description |
|---|---|---|---|
access | String | Default: private | |
accessMode | Integer | ||
cdnUrl | String | ✓ | |
choicePrompt | String | ||
createdAt | DateTime | ✓ | |
currentVersionNumber | Integer | Default: 0 | |
data | String | ✓ | |
description | String | ✓ | |
externalId | String | ✓ | |
fileSize | Integer | ✓ | |
filename | String | ✓ | |
folder | FileFolderResponse | ✓ | |
folderId | Integer | ✓ | |
id | Integer | ✓ | |
isS3Stored | Boolean | Default: False | |
labels | Array | ||
lastEditedByMemberId | Integer | ||
mimeType | String | ✓ | |
ownerId | Integer | ||
permissions | Integer | Default: 0 | |
shareCount | Integer | Default: 0 | |
siteId | Integer | ✓ | |
title | String | ✓ | |
updatedAt | DateTime | ✓ | |
uuid | String | ✓ |
Example:
{
"id": 0 // Integer,
"uuid": "string" // String,
"title": "string" // String,
"description": "string" // String,
"accessMode": 0 // Integer, optional,
"choicePrompt": "string" // String, optional,
"filename": "string" // String,
"mimeType": "string" // String,
"folderId": 0 // Integer,
"siteId": 0 // Integer,
"externalId": "string" // String,
"ownerId": 0 // Integer, optional,
"access": "string" // String, optional, default: private,
"folder": null // FileFolderResponse,
"createdAt": "2024-01-01T00:00:00Z" // DateTime,
"updatedAt": "2024-01-01T00:00:00Z" // DateTime,
"data": "string" // String,
"cdnUrl": "string" // String,
"fileSize": 0 // Integer,
"isS3Stored": false // Boolean, optional, default: False,
"permissions": 0 // Integer, optional, default: 0,
"labels": [] // Array<FileLabelResponse>, optional,
"shareCount": 0 // Integer, optional, default: 0,
"currentVersionNumber": 0 // Integer, optional, default: 0,
"lastEditedByMemberId": 0 // Integer, optional
}
SchemaField
| Field | Type | Required | Description |
|---|---|---|---|
adminOnly | Boolean | Whether only admins can see this field (default: False) | |
categories | Array<Literal[personal, identifier, phi, credential]> | Regulatory or content categories for audit and policy | |
celFunction | String | CEL expression that computes this field's value. CONSTRAINT: Can ONLY reference regular fields (TEXT, NUMBER, DATE, etc.). Cannot reference other FUNCTION fields. Syntax: record.data.<field_slug>. Example: 'record.data.score1 + record.data.score2' | |
defaultValue | Any | Default value for the field | |
description | String | Optional field description | |
fieldType | Union[Literal[enum, email, phone, text, longtext, number, integer, boolean, date, datetime, time_of_day, us_zip_code, array, object, function], DataFieldType] | Field type (text, email, enum, etc.) (default: text) | |
name | String | ✓ | Display name for the field |
options | Array | Options for enum fields as {label, value} objects. | |
order | Integer | Deprecated: Display order is now determined by array position | |
referencedTypeId | Integer | Referenced DataType ID for reference fields | |
required | Boolean | Whether field is required (default: False) | |
sensitivity | Literal[public, internal, confidential, restricted, secret] | Disclosure severity for audit and access policy (default: confidential) | |
shouldIndex | Boolean | Whether to index this field (default: False) | |
slug | String | ✓ | Unique field identifier |
validateCel | String | CEL expression for cross-field validation. Context: 'value' (current field value), 'record.data.<field_slug>' (other fields). Returns: true if valid, or a string error message if invalid. CONSTRAINT: Can only reference non-FUNCTION fields. Example: 'value >= record.data.min_score' or 'value < record.data.min_score ? "Must be >= " + string(record.data.min_score) : true' |
Example:
{
"slug": "string" // String, Unique field identifier,
"name": "string" // String, Display name for the field,
"description": "string" // String, optional, Optional field description,
"fieldType": 0 // Union[Literal[enum, email, phone, text, longtext, number, integer, boolean, date, datetime, time_of_day, us_zip_code, array, object, function], DataFieldType], optional, default: text, Field type (text, email, enum, etc.),
"required": false // Boolean, optional, default: False, Whether field is required,
"order": 0 // Integer, optional, Deprecated: Display order is now determined by array position,
"options": [] // Array<EnumOption>, optional, Options for enum fields as {label, value} objects.,
"referencedTypeId": 0 // Integer, optional, Referenced DataType ID for reference fields,
"shouldIndex": false // Boolean, optional, default: False, Whether to index this field,
"adminOnly": false // Boolean, optional, default: False, Whether only admins can see this field,
"defaultValue": null // Any, optional, Default value for the field,
"celFunction": "string" // String, optional, CEL expression that computes this field's value. CONSTRAINT: Can ONLY reference regular fields (TEXT, NUMBER, DATE, etc.). Cannot reference other FUNCTION fields. Syntax: record.data.<field_slug>. Example: 'record.data.score1 + record.data.score2',
"validateCel": "string" // String, optional, CEL expression for cross-field validation. Context: 'value' (current field value), 'record.data.<field_slug>' (other fields). Returns: true if valid, or a string error message if invalid. CONSTRAINT: Can only reference non-FUNCTION fields. Example: 'value >= record.data.min_score' or 'value < record.data.min_score ? "Must be >= " + string(record.data.min_score) : true',
"sensitivity": null // Literal[public, internal, confidential, restricted, secret], optional, default: confidential, Disclosure severity for audit and access policy,
"categories": [] // Array<Literal[personal, identifier, phi, credential]>, optional, default: PydanticUndefined, Regulatory or content categories for audit and policy
}
Endpoints
GET /api/v2/w/{workspace_uuid}/custom-toolkits- ListPOST /api/v2/w/{workspace_uuid}/custom-toolkits- CreateDELETE /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}- Delete Toolkit IdGET /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}- Get Toolkit IdPUT /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}- Update Toolkit IdPOST /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}/disable- DisablePOST /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}/enable- Enable
List
GET /api/v2/w/{workspace_uuid}/custom-toolkits
Description:
List all custom toolkits the current member has access to.
Authorization: Requires apps:read scope
Response: List of CustomToolkitResponse
Create
POST /api/v2/w/{workspace_uuid}/custom-toolkits
Description:
Create a new custom toolkit.
Authorization: Requires apps:write scope
Parameters:
data- See CustomToolkitCreateRequest
Response: See CustomToolkitResponse
Delete Toolkit Id
DELETE /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}
Description:
Delete a custom toolkit.
Authorization: Requires apps:admin scope
Parameters:
toolkit_id(Integer)
Get Toolkit Id
GET /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}
Description:
Get a specific custom toolkit by ID.
Authorization: Requires apps:read scope
Parameters:
toolkit_id(Integer)
Response: See CustomToolkitResponse
Update Toolkit Id
PUT /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}
Description:
Update a custom toolkit.
Authorization: Requires apps:write scope
Parameters:
toolkit_id(Integer)data- See CustomToolkitUpdateRequest
Response: See CustomToolkitResponse
Disable
POST /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}/disable
Description:
Disable a custom toolkit.
Authorization: Requires apps:write scope
Parameters:
toolkit_id(Integer)
Response: See CustomToolkitResponse
Enable
POST /api/v2/w/{workspace_uuid}/custom-toolkits/{toolkit_id}/enable
Description:
Enable a custom toolkit.
Authorization: Requires apps:write scope
Parameters:
toolkit_id(Integer)
Response: See CustomToolkitResponse