Skip to main content

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​

FieldTypeRequiredDescription
abilityTypeString✓The ability type slug (e.g., 'oversight:supervisor')
celConditionStringCEL condition for activation
configDict[str, Any]Ability configuration
enabledBooleanWhether the ability is enabled (default: True)
uuidString✓UUID for matching/creating abilities

Example:

{
"uuid": "string",
"abilityType": "string",
"enabled": true
}

AbilityResponse​

FieldTypeRequiredDescription
abilityTypeString✓
celConditionString
configDict[str, Any]✓
enabledBoolean✓
idInteger✓
uuidString✓

Example:

{
"id": 0,
"uuid": "string",
"abilityType": "string",
"config": {},
"enabled": false
}

CustomToolResponse​

FieldTypeRequiredDescription
abilitiesArray<AbilityResponse>
chatModelLiteral[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]
createdAtDateTime✓
customToolkitIdInteger✓
dataTypesArray<DataTypeResponse>
descriptionString✓
displayNameString
filesArray<FileResponse>
idInteger✓
inputSchemaObject
nameString✓
outputSchemaObject
promptString✓
updatedAtDateTime✓
uuidString✓

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​

FieldTypeRequiredDescription
abilitiesArray<AbilityData> | nullToolkit-scoped abilities to create with this toolkit
descriptionStringA description of the toolkit
nameString✓The name of the toolkit
ownerIdIntegerThe ID of the member who owns this toolkit
slugStringThe slug of the toolkit

Example:

{
"name": "string"
}

CustomToolkitResponse​

FieldTypeRequiredDescription
abilitiesArray<AbilityResponse>
createdAtDateTime✓
customToolsArray<CustomToolResponse>
descriptionString✓
idInteger✓
nameString✓
ownerIdInteger✓
permissionsIntegerDefault: 0
slugString✓
state<enum ToolkitState✓
updatedAtDateTime✓

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​

FieldTypeRequiredDescription
abilitiesArray<AbilityData> | nullToolkit-scoped abilities (replaces all existing abilities when provided)
descriptionStringA description of the toolkit
nameStringThe name of the toolkit
slugStringThe slug of the toolkit

Example:

{}

DataTypeResponse​

FieldTypeRequiredDescription
accessModeInteger
adminOnlyBooleanDefault: False
archivedBooleanDefault: False
categoriesArray✓
createdAtDateTime✓
descriptionString✓
eventRulesArray<EventRuleResponse>✓
fieldsArray<SchemaField>✓
idInteger✓
isCollectionBoolean✓
nameString✓
ownerIdInteger
pinnedBoolean
promptString✓
recordCountInteger
recordScopeString✓
sensitivityString✓
slugString✓
updatedAtDateTime✓
uuidString✓
webhookEventsEnabledBooleanDefault: 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​

FieldTypeRequiredDescription
labelString✓Display label shown to users
valuestrintfloat
visibleWhenStringCEL 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​

FieldTypeRequiredDescription
actionParamsDict[str, Any]✓
actionSetLockedBooleanDefault: False
actionType<enum EventRuleActionType✓
activeBoolean✓
appConnectionIdInteger
calendarEventTypeIdInteger✓
calendarIdInteger✓
celBlockedAtDateTime
conditionsString✓
createdAtDateTime✓
dataTypeIdInteger✓
dataTypeNameString
delayInteger✓
errorString✓
errorMessageString✓
eventType<enum EventRuleEventType✓
failedAtDateTime✓
idInteger✓
journeyIdInteger
journeyStepIdInteger✓
nameString✓
objectType<enum EventRuleObjectType✓
orderInteger✓
routineIdInteger✓
taskIdInteger✓
taskNameString
taskWorkflowIdInteger
triggerParamsDict[str, Any]✓
updatedAtDateTime✓
uuidString✓
workflowRevisionIdInteger✓

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​

FieldTypeRequiredDescription
accessStringDefault: private
ancestorsArray<FolderPathSegment>Default: []
childCountIntegerDefault: 0
createdAtDateTime✓
descriptionString
fileCountIntegerDefault: 0
idInteger✓
indexBooleanDefault: False
indexingCompletedAtDateTime
indexingStartedAtDateTime
nameString✓
ownerIdInteger
ownerNameString
parentIdInteger
pathString
shareableBooleanDefault: False
updatedAtDateTime✓
uuidString✓

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​

FieldTypeRequiredDescription
colorString✓
descriptionString✓
idInteger✓
nameString✓
uuidString✓

Example:

{
"id": 0,
"uuid": "string",
"name": "string",
"color": "string",
"description": "string"
}

FileResponse​

FieldTypeRequiredDescription
accessStringDefault: private
accessModeInteger
cdnUrlString✓
choicePromptString
createdAtDateTime✓
currentVersionNumberIntegerDefault: 0
dataString✓
descriptionString✓
externalIdString✓
fileSizeInteger✓
filenameString✓
folderFileFolderResponse | null✓
folderAncestorIdsArrayDefault: []
folderIdInteger✓
idInteger✓
isS3StoredBooleanDefault: False
labelsArray<FileLabelResponse> | null
lastEditedByMemberIdInteger
mimeTypeString✓
ownerIdInteger
ownerNameString
permissionsIntegerDefault: 0
shareCountIntegerDefault: 0
siteIdInteger✓
subjectMemberIdInteger
titleString✓
updatedAtDateTime✓
uuidString✓

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​

FieldTypeRequiredDescription
idInteger✓
nameString✓

Example:

{
"id": 0,
"name": "string"
}

SchemaField​

FieldTypeRequiredDescription
adminOnlyBooleanWhether only admins can see this field (default: False)
categoriesArray<Literal[personal, identifier, phi, credential]>Regulatory or content categories for audit and policy
celFunctionStringCEL 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'
defaultValueAnyDefault value for the field
descriptionStringOptional field description
fieldTypeUnion[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)
nameString✓Display name for the field
optionsArray<EnumOption> | nullOptions for enum fields as {label, value} objects.
orderIntegerDeprecated: Display order is now determined by array position
referencedTypeIdIntegerReferenced DataType ID for reference fields
requiredBooleanWhether field is required (default: False)
sensitivityLiteral['public', 'internal', 'confidential', 'restricted', 'secret']Disclosure severity for audit and access policy (default: confidential)
shouldIndexBooleanWhether to index this field (default: False)
slugString✓Unique field identifier
validateCelStringCEL 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​

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:

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:

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