← Files vox.aiARCHIVED FILE
references/tool-schemas/save_tool.json
13.6 KB · Nov 7, 2026 · 06:13 UTC
{
"name": "save_tool",
"inputSchema": {
"type": "object",
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"type": "string",
"const": "create"
},
"payload": {
"properties": {
"name": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"pattern": "^[a-zA-Z0-9_-]+$",
"title": "Name",
"description": "도구 이름. 영숫자, 하이픈, 언더스코어만 허용. 1~64자."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description",
"description": "도구에 대한 설명. null 허용."
},
"input_schema": {
"additionalProperties": true,
"type": "object",
"title": "Input Schema",
"description": "도구 입력 파라미터를 정의하는 JSON Schema 객체."
},
"api_configuration": {
"$ref": "#/$defs/ToolApiConfigurationWrite",
"description": "외부 API 호출 설정."
},
"speak_during_execution": {
"anyOf": [
{
"$ref": "#/$defs/SpeakDuringExecution"
},
{
"type": "null"
}
],
"description": "실행 중 사용자에게 재생할 TTS 메시지 설정."
},
"allow_interruption_during_execution": {
"type": "boolean",
"title": "Allow Interruption During Execution",
"description": "도구 실행 중 사용자 발화로 인터럽트 허용 여부. 기본값 false.",
"default": false
},
"tool_call_sound": {
"anyOf": [
{
"type": "string",
"enum": [
"none",
"typing",
"elevator_1",
"elevator_2",
"elevator_3",
"elevator_4"
]
},
{
"type": "null"
}
],
"title": "Tool Call Sound",
"description": "도구 실행 중 재생할 대기음. null 또는 `none`이면 재생하지 않는다."
},
"response_mode": {
"type": "string",
"enum": [
"wait",
"fire_and_forget"
],
"title": "Response Mode",
"description": "`wait`는 API 응답을 기다려 결과를 대화에 전달한다. `fire_and_forget`은 요청을 보낸 뒤 즉시 다음 대화로 진행한다.",
"default": "wait"
}
},
"type": "object",
"required": [
"name",
"input_schema",
"api_configuration"
],
"title": "CreateToolRequest",
"description": "도구 생성 요청 (`POST /v3/tools`).",
"additionalProperties": false
}
},
"required": [
"mode",
"payload"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"tool_id": {
"type": "string",
"format": "uuid",
"description": "도구 ID.",
"title": "Tool Id"
},
"mode": {
"type": "string",
"const": "update"
},
"payload": {
"properties": {
"name": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"pattern": "^[a-zA-Z0-9_-]+$",
"title": "Name",
"description": "도구 이름. 생략 시 변경 안함. null 전송 시 400."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description",
"description": "도구 설명. 생략 시 변경 안함. null 전송 시 값이 null 로 설정된다."
},
"input_schema": {
"additionalProperties": true,
"type": "object",
"title": "Input Schema",
"description": "도구 입력 파라미터를 정의하는 JSON Schema 객체. 생략 시 변경 안함. null 전송 시 400."
},
"api_configuration": {
"$ref": "#/$defs/ToolApiConfigurationPatch",
"description": "외부 API 호출 설정 부분 업데이트. 생략 시 변경 안함. null 전송 시 400."
},
"speak_during_execution": {
"$ref": "#/$defs/SpeakDuringExecution",
"description": "실행 중 TTS 메시지 설정. 생략 시 변경 안함. null 전송 시 400."
},
"allow_interruption_during_execution": {
"type": "boolean",
"title": "Allow Interruption During Execution",
"description": "실행 중 인터럽트 허용 여부. 생략 시 변경 안함. null 전송 시 400."
},
"tool_call_sound": {
"anyOf": [
{
"type": "string",
"enum": [
"none",
"typing",
"elevator_1",
"elevator_2",
"elevator_3",
"elevator_4"
]
},
{
"type": "null"
}
],
"title": "Tool Call Sound",
"description": "실행 중 재생할 대기음. 생략 시 변경 안함. null 전송 시 값이 null 로 설정된다."
},
"response_mode": {
"type": "string",
"enum": [
"wait",
"fire_and_forget"
],
"title": "Response Mode",
"description": "응답 대기 모드. 생략 시 변경 안함. null 전송 시 400."
}
},
"type": "object",
"minProperties": 1,
"title": "UpdateToolRequest",
"description": "도구 부분 업데이트 페이로드.\n\n`name`, `input_schema`, `api_configuration`, `speak_during_execution`,\n`allow_interruption_during_execution` 필드는 생략하면 기존 값을 유지하고\nnull 로 전송하면 400 을 반환한다. `description`, `tool_call_sound` 는\n생략하면 기존 값을 유지하고 null 전송 시 값이 null 로 설정된다.",
"additionalProperties": false
}
},
"required": [
"tool_id",
"mode",
"payload"
]
}
],
"$defs": {
"ToolApiConfigurationWrite": {
"properties": {
"url": {
"type": "string",
"title": "Url",
"description": "외부 API 엔드포인트 URL. path 동적 값은 영숫자, `_`, `-`만 허용하고 임의 문자열은 query value에서만 허용."
},
"method": {
"type": "string",
"enum": [
"GET",
"POST",
"PUT",
"PATCH",
"DELETE"
],
"title": "Method",
"description": "HTTP 메서드."
},
"headers": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Headers",
"description": "요청에 포함할 추가 헤더. key/value 모두 string."
},
"auth_type": {
"anyOf": [
{
"type": "string",
"enum": [
"Basic",
"Bearer"
]
},
{
"type": "null"
}
],
"title": "Auth Type",
"description": "인증 방식. null이면 미인증."
},
"auth_credentials": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Auth Credentials",
"description": "인증 자격증명. Basic은 `user:password`, Bearer는 토큰 문자열."
},
"timeout_seconds": {
"anyOf": [
{
"type": "integer",
"maximum": 300.0,
"minimum": 1.0
},
{
"type": "null"
}
],
"title": "Timeout Seconds",
"description": "요청 타임아웃(초). 생략하거나 null로 전송하면 서버가 기본값 10초를 적용한다."
}
},
"type": "object",
"required": [
"url",
"method"
],
"title": "ToolApiConfigurationWrite",
"description": "도구 생성/수정 시 클라이언트가 입력하는 외부 API 호출 설정.\n\n`url`·`method` 는 필수. `timeout_seconds` 는 생략하거나 null 로 보내면\n서버 기본값(10초) 이 적용된다.",
"additionalProperties": false
},
"SpeakDuringExecution": {
"properties": {
"enabled": {
"type": "boolean",
"title": "Enabled",
"description": "실행 중 TTS 메시지 재생 여부. 기본값 false.",
"default": false
},
"messages": {
"items": {
"type": "string"
},
"type": "array",
"title": "Messages",
"description": "재생할 TTS 메시지 목록. enabled=true일 때만 의미가 있다."
}
},
"type": "object",
"title": "SpeakDuringExecution",
"description": "실행 중 사용자에게 재생할 TTS 메시지 설정.",
"additionalProperties": false
},
"ToolApiConfigurationPatch": {
"properties": {
"url": {
"type": "string",
"title": "Url",
"description": "외부 API 엔드포인트 URL. path 동적 값은 영숫자, `_`, `-`만 허용하고 임의 문자열은 query value에서만 허용. 생략 시 변경 안함. null 전송 시 400."
},
"method": {
"type": "string",
"enum": [
"GET",
"POST",
"PUT",
"PATCH",
"DELETE"
],
"title": "Method",
"description": "HTTP 메서드. 생략 시 변경 안함. null 전송 시 400."
},
"headers": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Headers",
"description": "요청 헤더. 생략 시 변경 안함. null 전송 시 값이 null 로 설정된다."
},
"auth_type": {
"anyOf": [
{
"type": "string",
"enum": [
"Basic",
"Bearer"
]
},
{
"type": "null"
}
],
"title": "Auth Type",
"description": "인증 방식. 생략 시 변경 안함. null 전송 시 미인증으로 설정된다."
},
"auth_credentials": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Auth Credentials",
"description": "인증 자격증명. 생략 시 변경 안함. null 전송 시 값이 null 로 설정된다."
},
"timeout_seconds": {
"anyOf": [
{
"type": "integer",
"maximum": 300.0,
"minimum": 1.0
},
{
"type": "null"
}
],
"title": "Timeout Seconds",
"description": "요청 타임아웃(초). 생략 시 변경 안함. null 전송 시 서비스 계층에서 서버 기본값(10초)로 재설정된다."
}
},
"type": "object",
"title": "ToolApiConfigurationPatch",
"description": "api_configuration 부분 업데이트 페이로드.\n\n`url`, `method` 는 생략하면 기존 값을 유지하며 null 로 전송하면 400 을\n반환한다. 나머지 필드의 null 처리는 각 필드 설명을 참조한다.",
"additionalProperties": false
}
}
}
}
SHA-256: 80320b735aba445b758889d9fec3b9b20ce6d296f63a2d989684b818d5e3d7e4