diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index faf38fb95..919697fbb 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -4558,6 +4558,16 @@ } } } + }, + "409": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ToolWriteConflictResponseDTO" + } + } + } } }, "tags": [ @@ -4730,7 +4740,21 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ToolPinnedConflictResponseDTO" + "oneOf": [ + { + "$ref": "#/components/schemas/ToolPinnedConflictResponseDTO" + }, + { + "$ref": "#/components/schemas/ToolWriteConflictResponseDTO" + } + ], + "discriminator": { + "propertyName": "error", + "mapping": { + "tool_pinned": "#/components/schemas/ToolPinnedConflictResponseDTO", + "tool_write_conflict": "#/components/schemas/ToolWriteConflictResponseDTO" + } + } } } } @@ -21563,16 +21587,11 @@ "properties": { "instructions": { "type": "string", - "description": "Omit to use legacy system messages. An explicit empty string is preserved." + "description": "Omit to use model.systemPrompt, or system-role messages when systemPrompt is absent. An explicit empty string is preserved." }, "personalityPacks": { "type": "array", - "enum": [ - "eager-listener", - "idle-hummer", - "bouncy", - "unhurried" - ], + "description": "Personality packs append speaking-style guidance to the speaker prompt. Set to an array of pack IDs and test one pack at a time. These are prompt instructions, not fixed speed controls.", "items": { "type": "string", "enum": [ @@ -21783,7 +21802,7 @@ }, "model": { "type": "string", - "description": "This is the OpenAI model that will be used.\n\nWhen using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense.\nThis is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.\n\n@default undefined", + "description": "This is the OpenAI model that will be used.\nFor GPT-Live configuration and supported settings, see https://docs.vapi.ai/gpt-live/overview.\n\nWhen using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense.\nThis is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.\n\n@default undefined", "enum": [ "gpt-5.6-sol", "gpt-5.6-terra", @@ -21940,7 +21959,8 @@ "gpt-3.5-turbo-1106:westus", "gpt-4.1:australiaeast", "gpt-4o:australiaeast", - "gpt-5.4-mini:australiaeast" + "gpt-5.4-mini:australiaeast", + "gpt-live-1" ] }, "fallbackModels": { @@ -28327,8 +28347,8 @@ ] }, "voiceId": { - "description": "This is the provider-specific ID that will be used.\nPlease note that ash, ballad, coral, sage, and verse may only be used with realtime or GPT-Live models.\nquartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models.", - "oneOf": [ + "description": "This is the provider-specific ID that will be used.\nVoice availability depends on the selected model.\nquartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models.", + "anyOf": [ { "type": "string", "enum": [ @@ -31026,8 +31046,8 @@ ] }, "voiceId": { - "description": "This is the provider-specific ID that will be used.\nPlease note that ash, ballad, coral, sage, and verse may only be used with realtime or GPT-Live models.\nquartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models.", - "oneOf": [ + "description": "This is the provider-specific ID that will be used.\nVoice availability depends on the selected model.\nquartz, ripple, vesper, willow, stone, gleam, meridian, bossa, tempo, beacon, delta, cinder are only supported with GPT-Live models.", + "anyOf": [ { "type": "string", "enum": [ @@ -35951,6 +35971,49 @@ } } }, + "ModelDeprecationNotice": { + "type": "object", + "properties": { + "slot": { + "type": "string", + "description": "Path of the slot that carries the model, relative to the response root,\ne.g. `model`, `model.fallbackModels[1]`, `transcriber`, `voice`, or\n`members[2].assistantOverrides.model` on a squad.", + "example": "model.fallbackModels[1]" + }, + "provider": { + "type": "string", + "description": "Provider as stored on the slot.", + "example": "openai" + }, + "model": { + "type": "string", + "description": "Model name as stored on the slot.", + "example": "gpt-4-1106-preview" + }, + "deprecationDate": { + "type": "string", + "description": "Day the model became deprecated, `YYYY-MM-DD` in UTC.", + "example": "2025-09-26" + }, + "retirementDate": { + "type": "string", + "description": "Day the model is or was retired, `YYYY-MM-DD` in UTC. On and after this\nday Vapi no longer runs the model as configured.", + "example": "2026-03-26" + }, + "replacementModel": { + "type": "string", + "description": "The recommended migration target for the slot's model: the registry's\nreplacement, followed through any further retirements as of the response\ndate, so it names a model that is alive on that day. A `:`\npin on the slot's model is kept on the target.", + "example": "gpt-5" + } + }, + "required": [ + "slot", + "provider", + "model", + "deprecationDate", + "retirementDate", + "replacementModel" + ] + }, "Assistant": { "type": "object", "properties": { @@ -36750,6 +36813,13 @@ "nullable": true, "description": "This is the latest version label (e.g. `v3`) of the assistant in the\nversion history. `null` while the org is not yet\nonboarded to versioning, or for assistants that have not yet been\npublished under it." }, + "modelDeprecations": { + "description": "Read-only. Present only when a model this configuration uses is deprecated or retired in Vapi's model deprecation registry, judged on the day of the response. Each entry names the slot that carries the model (for example `model` or `model.fallbackModels[1]`), the deprecation and retirement dates as `YYYY-MM-DD` in UTC, and the recommended replacement model: the registry's replacement, followed through any further retirements as of the response date, so it names a model that is alive on that day. Ignored if sent back in a create or update request.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelDeprecationNotice" + } + }, "name": { "type": "string", "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.", @@ -37780,6 +37850,13 @@ ] } }, + "modelDeprecations": { + "description": "Read-only. Present only when a model this configuration uses is deprecated or retired in Vapi's model deprecation registry, judged on the day of the response. Each entry names the slot that carries the model (for example `model` or `model.fallbackModels[1]`), the deprecation and retirement dates as `YYYY-MM-DD` in UTC, and the recommended replacement model: the registry's replacement, followed through any further retirements as of the response date, so it names a model that is alive on that day. Ignored if sent back in a create or update request.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelDeprecationNotice" + } + }, "name": { "type": "string", "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.", @@ -38859,6 +38936,13 @@ "description": "This is the ISO 8601 date-time string of when the version was created.", "format": "date-time" }, + "modelDeprecations": { + "description": "Read-only. Present only when a model this configuration uses is deprecated or retired in Vapi's model deprecation registry, judged on the day of the response. Each entry names the slot that carries the model (for example `model` or `model.fallbackModels[1]`), the deprecation and retirement dates as `YYYY-MM-DD` in UTC, and the recommended replacement model: the registry's replacement, followed through any further retirements as of the response date, so it names a model that is alive on that day. Ignored if sent back in a create or update request.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelDeprecationNotice" + } + }, "name": { "type": "string", "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.", @@ -39029,6 +39113,7 @@ "enum": [ "assistant_version", "squad", + "squad_version", "tool_version" ], "description": "Kind of source row the pin originates from." @@ -41799,6 +41884,18 @@ "Squad": { "type": "object", "properties": { + "latestVersion": { + "type": "string", + "nullable": true, + "description": "This is the latest version label (e.g. `v3`) of the squad in the version\nhistory. `null` while the org is not yet onboarded to versioning, or for\nsquads that have not yet been published under it." + }, + "modelDeprecations": { + "description": "Read-only. Present only when a model this configuration uses is deprecated or retired in Vapi's model deprecation registry, judged on the day of the response. Each entry names the slot that carries the model (for example `model` or `model.fallbackModels[1]`), the deprecation and retirement dates as `YYYY-MM-DD` in UTC, and the recommended replacement model: the registry's replacement, followed through any further retirements as of the response date, so it names a model that is alive on that day. Ignored if sent back in a create or update request.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelDeprecationNotice" + } + }, "name": { "type": "string", "description": "This is the name of the squad." @@ -41845,6 +41942,138 @@ "updatedAt" ] }, + "SquadVersion": { + "type": "object", + "properties": { + "versionName": { + "type": "string", + "nullable": true, + "description": "Optional human-readable label for this version. Set when the version is published.", + "maxLength": 80 + }, + "versionDescription": { + "type": "string", + "nullable": true, + "description": "Optional description for this version. Set when the version is published.", + "maxLength": 500 + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the version row.", + "format": "uuid" + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that owns this version.", + "format": "uuid" + }, + "squadId": { + "type": "string", + "description": "This is the unique identifier for the squad this version was snapshotted from.", + "format": "uuid" + }, + "version": { + "type": "string", + "description": "This is the public monotonic version label, e.g. \"v1\".\nSystem-owned and incremented per squad; never user-supplied.", + "example": "v1" + }, + "configHash": { + "type": "string", + "description": "This is the SHA-256 hex of the snapshotted content used for no-op detection." + }, + "parentVersion": { + "type": "string", + "nullable": true, + "description": "This is the prior version label (vN-1). Null on v1 or for branch roots." + }, + "restoredFromVersion": { + "type": "string", + "nullable": true, + "description": "The version this version was restored from. Null when it was not restored." + }, + "createdBy": { + "type": "string", + "nullable": true, + "description": "This is the actor that wrote this version. Email when created via JWT; null\nwhen created via API key, and null for a baseline version authored by nobody." + }, + "deletedAt": { + "type": "string", + "nullable": true, + "description": "This is the soft-delete timestamp. Null when active.", + "format": "date-time" + }, + "createdAt": { + "type": "string", + "description": "This is the ISO 8601 date-time string of when the version was created.", + "format": "date-time" + }, + "name": { + "type": "string", + "description": "This is the name of the squad." + }, + "members": { + "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SquadMemberDTO" + } + }, + "membersOverrides": { + "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.", + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + } + }, + "required": [ + "id", + "orgId", + "squadId", + "version", + "configHash", + "createdAt", + "members" + ] + }, + "SquadVersionPaginatedMetadata": { + "type": "object", + "properties": { + "nextCursor": { + "type": "string", + "nullable": true + }, + "hasNextPage": { + "type": "boolean" + }, + "limit": { + "type": "number" + } + }, + "required": [ + "hasNextPage", + "limit" + ] + }, + "SquadVersionPaginatedResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SquadVersion" + } + }, + "metadata": { + "$ref": "#/components/schemas/SquadVersionPaginatedMetadata" + } + }, + "required": [ + "results", + "metadata" + ] + }, "UpdateSquadDTO": { "type": "object", "properties": { @@ -44563,7 +44792,7 @@ "maximum": 192000 }, "format": { - "type": "object", + "type": "string", "description": "This is the audio format of the call.\n\n@default 'pcm_s16le'", "enum": [ "pcm_s16le", @@ -44602,7 +44831,7 @@ ] }, "audioFormat": { - "description": "This is the audio format of the call. Defaults to 16KHz raw pcm_s16le", + "description": "This is the audio format of the call. Defaults to 16KHz raw pcm_s16le.\n\nFor GPT-Live calls using Vapi's custom WebSocket transport, explicitly set\n`{ format: pcm_s16le, sampleRate: 24000 }`. This requirement is specific\nto Vapi's WebSocket transport and does not apply to phone or web calls.", "allOf": [ { "$ref": "#/components/schemas/AudioFormat" @@ -45181,7 +45410,12 @@ "assistantVersion": { "type": "string", "nullable": true, - "description": "This is the version label (e.g. `v3`) of the assistant active when\nthe activation row was recorded. `null` for inline assistants,\norgs not on assistant versioning, and parent assistants that have\nnot yet been published under it." + "description": "This is the version label (e.g. `v3`) of the assistant active when\nthe activation row was recorded. Absent for inline assistants,\norgs not on assistant versioning, and parent assistants that have\nnot yet been published under it." + }, + "squadVersion": { + "type": "string", + "nullable": true, + "description": "This is the version label (e.g. `v3`) of the squad that was governing the\ncall when this activation was recorded. Absent for activations that no\nsquad version governs: standalone-assistant calls, flag-off orgs, squads\nwith no published version, and hops to an assistant outside the squad." }, "assistantName": { "type": "string", @@ -45997,6 +46231,7 @@ "call.start.error-subscription-concurrency-limit-reached", "call.start.error-enterprise-feature-not-available-recording-consent", "call.start.assistant-version-error-validation", + "call.start.squad-version-error-validation", "assistant-not-valid", "call.start.error-vapifault-database-error", "assistant-not-found", @@ -46625,6 +46860,11 @@ "nullable": true, "description": "This is the assistant version to use for this call. Supported only with\ndirect `assistantId`. Omit to follow the latest version." }, + "squadVersion": { + "type": "string", + "nullable": true, + "description": "This is the squad version to use for this call. Supported only with\ndirect `squadId`. Omit to follow the latest version." + }, "transport": { "description": "This is the transport of the call.", "oneOf": [ @@ -47003,6 +47243,11 @@ "nullable": true, "description": "This is the assistant version to use for this call. Supported only with\ndirect `assistantId`. Omit to follow the latest version." }, + "squadVersion": { + "type": "string", + "nullable": true, + "description": "This is the squad version to use for this call. Supported only with\ndirect `squadId`. Omit to follow the latest version." + }, "transport": { "description": "This is the transport of the call.", "oneOf": [ @@ -47201,6 +47446,11 @@ "nullable": true, "description": "This is the assistant version to use for this call. Supported only with\ndirect `assistantId`. Omit to follow the latest version." }, + "squadVersion": { + "type": "string", + "nullable": true, + "description": "This is the squad version to use for this call. Supported only with\ndirect `squadId`. Omit to follow the latest version." + }, "transport": { "description": "This is the transport of the call.", "oneOf": [ @@ -47344,6 +47594,11 @@ "nullable": true, "description": "This is the assistant version to use for this call. Supported only with\ndirect `assistantId`. Omit to follow the latest version." }, + "squadVersion": { + "type": "string", + "nullable": true, + "description": "This is the squad version to use for this call. Supported only with\ndirect `squadId`. Omit to follow the latest version." + }, "roomDeleteOnUserLeaveEnabled": { "type": "boolean", "default": true @@ -57758,35 +58013,37 @@ } } }, - "UpdateToolVersionMetadataDTO": { + "ToolPinnedConflictResponseDTO": { "type": "object", "properties": { - "versionName": { + "error": { "type": "string", - "nullable": true, - "description": "Optional human-readable label for this version. Pass `null` to clear.", - "maxLength": 80 + "enum": [ + "tool_pinned" + ] }, - "versionDescription": { + "message": { "type": "string", - "nullable": true, - "description": "Optional description for this version. Pass `null` to clear.", - "maxLength": 500 + "description": "Human-readable reason the parent-tool delete was rejected." } - } + }, + "required": [ + "error", + "message" + ] }, - "ToolPinnedConflictResponseDTO": { + "ToolWriteConflictResponseDTO": { "type": "object", "properties": { "error": { "type": "string", "enum": [ - "tool_pinned" + "tool_write_conflict" ] }, "message": { "type": "string", - "description": "Human-readable reason the parent-tool delete was rejected." + "description": "Human-readable reason the tool write was rejected." } }, "required": [ @@ -57794,6 +58051,23 @@ "message" ] }, + "UpdateToolVersionMetadataDTO": { + "type": "object", + "properties": { + "versionName": { + "type": "string", + "nullable": true, + "description": "Optional human-readable label for this version. Pass `null` to clear.", + "maxLength": 80 + }, + "versionDescription": { + "type": "string", + "nullable": true, + "description": "Optional description for this version. Pass `null` to clear.", + "maxLength": 500 + } + } + }, "CreateFileDTO": { "type": "object", "properties": { @@ -57913,6 +58187,24 @@ } } }, + "FilePaginatedResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/File" + } + }, + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + } + }, + "required": [ + "results", + "metadata" + ] + }, "CustomKnowledgeBase": { "type": "object", "properties": { @@ -75938,6 +76230,7 @@ "call.start.error-subscription-concurrency-limit-reached", "call.start.error-enterprise-feature-not-available-recording-consent", "call.start.assistant-version-error-validation", + "call.start.squad-version-error-validation", "assistant-not-valid", "call.start.error-vapifault-database-error", "assistant-not-found", @@ -77390,6 +77683,7 @@ "call.start.error-subscription-concurrency-limit-reached", "call.start.error-enterprise-feature-not-available-recording-consent", "call.start.assistant-version-error-validation", + "call.start.squad-version-error-validation", "assistant-not-valid", "call.start.error-vapifault-database-error", "assistant-not-found",