Custom Toolkits
Tags: ai, customization, tools
Custom AI toolkit creation and management
In the product: Custom Toolkits
Resources
Request and response models used by the endpoints on this page.
AbilityData
| Field | Type | Required | Description |
|---|---|---|---|
abilityType | String | ✓ | The ability type slug (e.g., 'oversight:supervisor') |
celCondition | String | CEL condition for activation | |
config | Dict[str, Any] | Ability configuration | |
enabled | Boolean | Whether the ability is enabled (default: True) | |
uuid | String | ✓ | UUID for matching/creating abilities |
Example:
{
"uuid": "string",
"abilityType": "string",
"enabled": true
}
AbilityResponse
| Field | Type | Required | Description |
|---|---|---|---|
abilityType | String | ✓ | |
celCondition | String | ||
config | Dict[str, Any] | ✓ | |
enabled | Boolean | ✓ | |
id | Integer | ✓ | |
uuid | String | ✓ |
Example:
{
"id": 0,
"uuid": "string",
"abilityType": "string",
"config": {},
"enabled": false
}
CustomToolResponse
| Field | Type | Required | Description |
|---|---|---|---|
abilities | Array<AbilityResponse> | ||
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, openai:chat:gpt-5.6-luna, openai:chat:gpt-5.6-terra, openai:chat:gpt-5.6-sol, openai:chat:gpt-6-luna, openai:chat:gpt-6-sol, openai:chat:gpt-6.1-sol, 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-8-opus, aws:bedrock:claude-5-opus, aws:bedrock:claude-5-5-opus, aws:bedrock:claude-5-5-sonnet, 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, xai:chat:grok-4.6, xai:chat:grok-4.7, fireworks:chat:glm-5.3-flash, fireworks:chat:deepseek-v4p1-flash, anthropic:chat:claude-4.6-sonnet] | ||
createdAt | DateTime | ✓ | |
customToolkitId | Integer | ✓ | |
dataTypes | Array<DataTypeResponse> | ||
description | String | ✓ | |
displayName | String | ||
files | Array<FileResponse> | ||
id | Integer | ✓ | |
inputSchema | Object | ||
name | String | ✓ | |
outputSchema | Object | ||
prompt | String | ✓ | |
updatedAt | DateTime | ✓ | |
uuid | String | ✓ |
Example:
{
"id": 0,
"uuid": "string",
"customToolkitId": 0,
"name": "string",
"description": "string",
"prompt": "string",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
}
CustomToolkitCreateRequest
| Field | Type | Required | Description |
|---|---|---|---|
abilities | Array<AbilityData> | null | Toolkit-scoped abilities to create with this toolkit | |
description | String | A description of the toolkit | |
name | String | ✓ | The name of the toolkit |
ownerId | Integer | The ID of the member who owns this toolkit | |
slug | String | The slug of the toolkit |
Example:
{
"name": "string"
}
CustomToolkitResponse
| Field | Type | Required | Description |
|---|---|---|---|
abilities | Array<AbilityResponse> | ||
createdAt | DateTime | ✓ | |
customTools | Array<CustomToolResponse> | ||
description | String | ✓ | |
id | Integer | ✓ | |
name | String | ✓ | |
ownerId | Integer | ✓ | |
permissions | Integer | Default: 0 | |
slug | String | ✓ | |
state | <enum ToolkitState | ✓ | |
updatedAt | DateTime | ✓ |
Example:
{
"id": 0,
"name": "string",
"slug": "string",
"description": "string",
"state": null,
"ownerId": 0,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z",
"permissions": 0
}
CustomToolkitUpdateRequest
| Field | Type | Required | Description |
|---|---|---|---|
abilities | Array<AbilityData> | null | Toolkit-scoped abilities (replaces all existing abilities when provided) | |
description | String | A description of the toolkit | |
name | String | The name of the toolkit | |
slug | String | The slug of the toolkit |
Example:
{}
DataTypeResponse
| Field | Type | Required | Description |
|---|---|---|---|
accessMode | Integer | ||
adminOnly | Boolean | Default: False | |
archived | Boolean | Default: False | |
categories | Array | ✓ | |
createdAt | DateTime | ✓ | |
description | String | ✓ | |
eventRules | Array<EventRuleResponse> | ✓ | |
fields | Array<SchemaField> | ✓ | |
id | Integer | ✓ | |
isCollection | Boolean | ✓ | |
name | String | ✓ | |
ownerId | Integer | ||
pinned | Boolean | ||
prompt | String | ✓ | |
recordCount | Integer | ||
recordScope | String | ✓ | |
sensitivity | String | ✓ | |
slug | String | ✓ | |
updatedAt | DateTime | ✓ | |
uuid | String | ✓ | |
webhookEventsEnabled | Boolean | Default: False |
Example:
{
"id": 0,
"name": "string",
"uuid": "string",
"slug": "string",
"description": "string",
"prompt": "string",
"isCollection": false,
"webhookEventsEnabled": false,
"archived": false,
"recordScope": "string",
"adminOnly": false,
"sensitivity": "string",
"categories": [],
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z",
"eventRules": [],
"fields": []
}
EnumOption
| Field | Type | Required | Description |
|---|---|---|---|
label | String | ✓ | Display label shown to users |
value | str | int | float |
visibleWhen | String | CEL expression that must return true for this option to be visible. Uses record.data.<field_slug> syntax to reference other field values. CONSTRAINT: Can only reference non-FUNCTION fields. |
Example:
{
"label": "string",
"value": "string"
}
EventRuleResponse
| Field | Type | Required | Description |
|---|---|---|---|
actionParams | Dict[str, Any] | ✓ | |
actionSetLocked | Boolean | Default: False | |
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,
"uuid": "string",
"objectType": null,
"name": "string",
"eventType": null,
"conditions": "string",
"actionType": null,
"actionParams": {},
"triggerParams": {},
"active": false,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z",
"taskId": 0,
"dataTypeId": 0,
"routineId": 0,
"workflowRevisionId": 0,
"calendarId": 0,
"calendarEventTypeId": 0,
"journeyStepId": 0,
"error": "string",
"errorMessage": "string",
"failedAt": "2024-01-01T00:00:00Z",
"delay": 0,
"order": 0,
"actionSetLocked": false
}
FileFolderResponse
| Field | Type | Required | Description |
|---|---|---|---|
access | String | Default: private | |
ancestors | Array<FolderPathSegment> | Default: [] | |
childCount | Integer | Default: 0 | |
createdAt | DateTime | ✓ | |
description | String | ||
fileCount | Integer | Default: 0 | |
id | Integer | ✓ | |
index | Boolean | Default: False | |
indexingCompletedAt | DateTime | ||
indexingStartedAt | DateTime | ||
name | String | ✓ | |
ownerId | Integer | ||
ownerName | String | ||
parentId | Integer | ||
path | String | ||
shareable | Boolean | Default: False | |
updatedAt | DateTime | ✓ | |
uuid | String | ✓ |
Example:
{
"id": 0,
"name": "string",
"uuid": "string",
"childCount": 0,
"fileCount": 0,
"access": "private",
"shareable": false,
"index": false,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z",
"ancestors": []
}
FileLabelResponse
| Field | Type | Required | Description |
|---|---|---|---|
color | String | ✓ | |
description | String | ✓ | |
id | Integer | ✓ | |
name | String | ✓ | |
uuid | String | ✓ |
Example:
{
"id": 0,
"uuid": "string",
"name": "string",
"color": "string",
"description": "string"
}
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 | null | ✓ | |
folderAncestorIds | Array | Default: [] | |
folderId | Integer | ✓ | |
id | Integer | ✓ | |
isS3Stored | Boolean | Default: False | |
labels | Array<FileLabelResponse> | null | ||
lastEditedByMemberId | Integer | ||
mimeType | String | ✓ | |
ownerId | Integer | ||
ownerName | String | ||
permissions | Integer | Default: 0 | |
shareCount | Integer | Default: 0 | |
siteId | Integer | ✓ | |
subjectMemberId | Integer | ||
title | String | ✓ | |
updatedAt | DateTime | ✓ | |
uuid | String | ✓ |
Example:
{
"id": 0,
"uuid": "string",
"title": "string",
"description": "string",
"filename": "string",
"mimeType": "string",
"folderId": 0,
"folderAncestorIds": [],
"siteId": 0,
"externalId": "string",
"access": "private",
"folder": null,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z",
"data": "string",
"cdnUrl": "string",
"fileSize": 0,
"isS3Stored": false,
"permissions": 0,
"shareCount": 0,
"currentVersionNumber": 0
}
FolderPathSegment
| Field | Type | Required | Description |
|---|---|---|---|
id | Integer | ✓ | |
name | String | ✓ |
Example:
{
"id": 0,
"name": "string"
}
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<EnumOption> | null | 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",
"name": "string",
"fieldType": "text",
"required": false,
"shouldIndex": false,
"adminOnly": false,
"sensitivity": "confidential"
}
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