From df2b91f263161a1d72bfe84c19ccd077af2a0551 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 30 Oct 2026 00:29:22 +0000 Subject: [PATCH 01/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 285 ++----------------------------------- 1 file changed, 12 insertions(+), 273 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 32b2f5cc6..b2f40b284 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -12130,6 +12130,12 @@ "maximum": 1, "example": 0.4 }, + "feedbackFilterEnabled": { + "type": "boolean", + "description": "Controls whether Vapi filters user transcripts that repeat text from the\nassistant's recent transcript. Disable this only when legitimate caller\nresponses are being mistaken for assistant audio feedback.\n\n@default true", + "example": true, + "default": true + }, "eotThreshold": { "type": "number", "description": "End-of-turn confidence required to finish a turn. Only used with Flux models.\n\n@default 0.7", @@ -15291,6 +15297,12 @@ "maximum": 1, "example": 0.4 }, + "feedbackFilterEnabled": { + "type": "boolean", + "description": "Controls whether Vapi filters user transcripts that repeat text from the\nassistant's recent transcript. Disable this only when legitimate caller\nresponses are being mistaken for assistant audio feedback.\n\n@default true", + "example": true, + "default": true + }, "eotThreshold": { "type": "number", "description": "End-of-turn confidence required to finish a turn. Only used with Flux models.\n\n@default 0.7", @@ -18740,10 +18752,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -19484,10 +19492,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -19613,10 +19617,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -20753,10 +20753,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -21647,10 +21643,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -27488,10 +27480,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -28810,10 +28798,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -29983,10 +29967,6 @@ "$ref": "#/components/schemas/FallbackSmallestAIVoice", "title": "Smallest AI" }, - { - "$ref": "#/components/schemas/FallbackTavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/FallbackNeuphonicVoice", "title": "Neuphonic" @@ -31979,133 +31959,6 @@ "voiceId" ] }, - "TavusConversationProperties": { - "type": "object", - "properties": { - "maxCallDuration": { - "type": "number", - "description": "The maximum duration of the call in seconds. The default `maxCallDuration` is 3600 seconds (1 hour).\nOnce the time limit specified by this parameter has been reached, the conversation will automatically shut down." - }, - "participantLeftTimeout": { - "type": "number", - "description": "The duration in seconds after which the call will be automatically shut down once the last participant leaves." - }, - "participantAbsentTimeout": { - "type": "number", - "description": "Starting from conversation creation, the duration in seconds after which the call will be automatically shut down if no participant joins the call.\nDefault is 300 seconds (5 minutes)." - }, - "enableRecording": { - "type": "boolean", - "description": "If true, the user will be able to record the conversation." - }, - "enableTranscription": { - "type": "boolean", - "description": "If true, the user will be able to transcribe the conversation.\nYou can find more instructions on displaying transcriptions if you are using your custom DailyJS components here.\nYou need to have an event listener on Daily that listens for `app-messages`." - }, - "applyGreenscreen": { - "type": "boolean", - "description": "If true, the background will be replaced with a greenscreen (RGB values: `[0, 255, 155]`).\nYou can use WebGL on the frontend to make the greenscreen transparent or change its color." - }, - "language": { - "type": "string", - "description": "The language of the conversation. Please provide the **full language name**, not the two-letter code.\nIf you are using your own TTS voice, please ensure it supports the language you provide.\nIf you are using a stock replica or default persona, please note that only ElevenLabs and Cartesia supported languages are available.\nYou can find a full list of supported languages for Cartesia here, for ElevenLabs here, and for PlayHT here." - }, - "recordingS3BucketName": { - "type": "string", - "description": "The name of the S3 bucket where the recording will be stored." - }, - "recordingS3BucketRegion": { - "type": "string", - "description": "The region of the S3 bucket where the recording will be stored." - }, - "awsAssumeRoleArn": { - "type": "string", - "description": "The ARN of the role that will be assumed to access the S3 bucket." - } - } - }, - "TavusVoice": { - "type": "object", - "properties": { - "cachingEnabled": { - "type": "boolean", - "description": "This is the flag to toggle voice caching for the assistant.", - "example": true, - "default": true - }, - "provider": { - "type": "string", - "description": "This is the voice provider that will be used.", - "enum": [ - "tavus" - ] - }, - "voiceId": { - "description": "This is the provider-specific ID that will be used.", - "oneOf": [ - { - "type": "string", - "enum": [ - "r52da2535a" - ], - "title": "Preset Voice Options" - }, - { - "type": "string", - "title": "Tavus Voice ID" - } - ] - }, - "chunkPlan": { - "description": "This is the plan for chunking the model output before it is sent to the voice provider.", - "allOf": [ - { - "$ref": "#/components/schemas/ChunkPlan" - } - ] - }, - "personaId": { - "type": "string", - "description": "This is the unique identifier for the persona that the replica will use in the conversation." - }, - "callbackUrl": { - "type": "string", - "description": "This is the url that will receive webhooks with updates regarding the conversation state." - }, - "conversationName": { - "type": "string", - "description": "This is the name for the conversation." - }, - "conversationalContext": { - "type": "string", - "description": "This is the context that will be appended to any context provided in the persona, if one is provided." - }, - "customGreeting": { - "type": "string", - "description": "This is the custom greeting that the replica will give once a participant joines the conversation." - }, - "properties": { - "description": "These are optional properties used to customize the conversation.", - "allOf": [ - { - "$ref": "#/components/schemas/TavusConversationProperties" - } - ] - }, - "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", - "allOf": [ - { - "$ref": "#/components/schemas/FallbackPlan" - } - ] - } - }, - "required": [ - "provider", - "voiceId" - ] - }, "VapiPronunciationDictionaryLocator": { "type": "object", "properties": { @@ -34706,80 +34559,6 @@ "voiceId" ] }, - "FallbackTavusVoice": { - "type": "object", - "properties": { - "cachingEnabled": { - "type": "boolean", - "description": "This is the flag to toggle voice caching for the assistant.", - "example": true, - "default": true - }, - "provider": { - "type": "string", - "description": "This is the voice provider that will be used.", - "enum": [ - "tavus" - ] - }, - "voiceId": { - "description": "This is the provider-specific ID that will be used.", - "oneOf": [ - { - "type": "string", - "enum": [ - "r52da2535a" - ], - "title": "Preset Voice Options" - }, - { - "type": "string", - "title": "Tavus Voice ID" - } - ] - }, - "personaId": { - "type": "string", - "description": "This is the unique identifier for the persona that the replica will use in the conversation." - }, - "callbackUrl": { - "type": "string", - "description": "This is the url that will receive webhooks with updates regarding the conversation state." - }, - "conversationName": { - "type": "string", - "description": "This is the name for the conversation." - }, - "conversationalContext": { - "type": "string", - "description": "This is the context that will be appended to any context provided in the persona, if one is provided." - }, - "customGreeting": { - "type": "string", - "description": "This is the custom greeting that the replica will give once a participant joines the conversation." - }, - "properties": { - "description": "These are optional properties used to customize the conversation.", - "allOf": [ - { - "$ref": "#/components/schemas/TavusConversationProperties" - } - ] - }, - "chunkPlan": { - "description": "This is the plan for chunking the model output before it is sent to the voice provider.", - "allOf": [ - { - "$ref": "#/components/schemas/ChunkPlan" - } - ] - } - }, - "required": [ - "provider", - "voiceId" - ] - }, "FallbackVapiVoice": { "type": "object", "properties": { @@ -37411,10 +37190,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -38357,10 +38132,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -39399,10 +39170,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -40423,10 +40190,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -41448,10 +41211,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -42366,10 +42125,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -43260,10 +43015,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -44341,10 +44092,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -45045,10 +44792,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" @@ -45731,10 +45474,6 @@ "$ref": "#/components/schemas/SmallestAIVoice", "title": "SmallestAIVoice" }, - { - "$ref": "#/components/schemas/TavusVoice", - "title": "TavusVoice" - }, { "$ref": "#/components/schemas/VapiVoice", "title": "VapiVoice" From c3b2fe8b7f0e41de0d11ac3827c2c61f9fc466bb Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 31 Oct 2026 00:23:52 +0000 Subject: [PATCH 02/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 39 +++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index b2f40b284..336643639 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -46817,7 +46817,7 @@ }, "callToken": { "type": "string", - "description": "This is the meeting token the web client should join the call with.\nWhen video recording is enabled, joining with this token starts the cloud\nrecording automatically server-side, which is more reliable than the\nclient starting it after joining. Set by the server; only present when\nvideo recording is enabled." + "description": "This is the meeting token the web client should join the call with.\nWhen video recording is enabled, joining with this token starts the cloud\nrecording automatically server-side, which is more reliable than the\nclient starting it after joining. Set by the server; only present when\nvideo recording is enabled.\n\nWith `videoRecordingStartMode: 'server'`, joining with the token doesn't\nstart the recording: Vapi starts it once the user joins, and the client\nmust not start it either." }, "callUrl": { "type": "string", @@ -47928,6 +47928,11 @@ "type": "string", "description": "This is the explanation for how the call ended.", "enum": [ + "call.in-progress.error-vapifault-guardrail-evaluation-failed", + "call.in-progress.error-vapifault-guardrail-playback-timeout", + "call.in-progress.guardrail-blocked", + "call.in-progress.error-vapifault-call-start-failed", + "call.in-progress.error-vapifault-assistant-handoff-start-failed", "call-start-error-neither-assistant-nor-server-set", "assistant-request-failed", "assistant-request-returned-error", @@ -47955,6 +47960,10 @@ "call.start.assistant-version-error-validation", "call.start.squad-version-error-validation", "assistant-not-valid", + "call.in-progress.error-vapifault-guardrail-evaluation-failed", + "call.in-progress.error-vapifault-guardrail-playback-timeout", + "call.in-progress.error-vapifault-call-start-failed", + "call.in-progress.error-vapifault-assistant-handoff-start-failed", "call.start.error-vapifault-database-error", "assistant-not-found", "pipeline-error-openai-voice-failed", @@ -49636,6 +49645,16 @@ "type": "boolean", "default": true }, + "videoRecordingStartMode": { + "type": "string", + "description": "This determines who starts the video recording. Only applies when video\nrecording is enabled (`artifactPlan.videoRecordingEnabled`).\n\n- `client`: the web client starts the recording when it joins.\n- `server`: Vapi starts the recording once when the user first joins, so a\n weak client connection can't stop it from starting. The returned\n `transport.callToken` doesn't start the recording, and the client should\n not start it either. If Vapi can't set up the server-side start, no token\n is returned. If the start itself fails, the client is told during the\n call.\n\nDefaults to `client`.", + "example": "server", + "enum": [ + "client", + "server" + ], + "default": "client" + }, "assistantId": { "type": "string", "description": "This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead.\n\nTo start a call with:\n- Assistant, use `assistantId` or `assistant`\n- Squad, use `squadId` or `squad`\n- Workflow, use `workflowId` or `workflow`" @@ -79955,6 +79974,11 @@ "type": "string", "description": "This is the reason the call ended. This can also be found at `call.endedReason` on GET /call/:id.", "enum": [ + "call.in-progress.error-vapifault-guardrail-evaluation-failed", + "call.in-progress.error-vapifault-guardrail-playback-timeout", + "call.in-progress.guardrail-blocked", + "call.in-progress.error-vapifault-call-start-failed", + "call.in-progress.error-vapifault-assistant-handoff-start-failed", "call-start-error-neither-assistant-nor-server-set", "assistant-request-failed", "assistant-request-returned-error", @@ -79982,6 +80006,10 @@ "call.start.assistant-version-error-validation", "call.start.squad-version-error-validation", "assistant-not-valid", + "call.in-progress.error-vapifault-guardrail-evaluation-failed", + "call.in-progress.error-vapifault-guardrail-playback-timeout", + "call.in-progress.error-vapifault-call-start-failed", + "call.in-progress.error-vapifault-assistant-handoff-start-failed", "call.start.error-vapifault-database-error", "assistant-not-found", "pipeline-error-openai-voice-failed", @@ -81416,6 +81444,11 @@ "type": "string", "description": "This is the reason the call ended. This is only sent if the status is \"ended\".", "enum": [ + "call.in-progress.error-vapifault-guardrail-evaluation-failed", + "call.in-progress.error-vapifault-guardrail-playback-timeout", + "call.in-progress.guardrail-blocked", + "call.in-progress.error-vapifault-call-start-failed", + "call.in-progress.error-vapifault-assistant-handoff-start-failed", "call-start-error-neither-assistant-nor-server-set", "assistant-request-failed", "assistant-request-returned-error", @@ -81443,6 +81476,10 @@ "call.start.assistant-version-error-validation", "call.start.squad-version-error-validation", "assistant-not-valid", + "call.in-progress.error-vapifault-guardrail-evaluation-failed", + "call.in-progress.error-vapifault-guardrail-playback-timeout", + "call.in-progress.error-vapifault-call-start-failed", + "call.in-progress.error-vapifault-assistant-handoff-start-failed", "call.start.error-vapifault-database-error", "assistant-not-found", "pipeline-error-openai-voice-failed", From e89f28696c199601e2a7694a587dfe722750594e Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 3 Nov 2026 00:24:01 +0000 Subject: [PATCH 03/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 589 ++++++++++++++++++++++++++++++++++++- 1 file changed, 587 insertions(+), 2 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 336643639..693502012 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -61280,6 +61280,579 @@ "toolId" ] }, + "CallHealthDashboardApiErrorDTO": { + "type": "object", + "properties": { + "code": { + "type": "string", + "minLength": 1 + }, + "message": { + "type": "string", + "minLength": 1 + }, + "requestId": { + "type": "string", + "minLength": 1 + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message", + "requestId", + "retryable" + ] + }, + "CallHealthDashboardAssistantReferenceDTO": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "latestVersion": { + "type": "string", + "description": "Current assistant.latest_version label; omitted when unavailable, never a goal revision.", + "minLength": 1 + } + }, + "required": [ + "id" + ] + }, + "CallHealthDashboardIssueDailyDTO": { + "type": "object", + "properties": { + "date": { + "type": "string", + "description": "UTC calendar date, with boundary buckets clipped to the requested window.", + "format": "date" + }, + "affectedCallCount": { + "type": "integer", + "description": "Distinct visible calls matching this issue in the bucket.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "analyzedCallCount": { + "type": "integer", + "description": "All accepted current-goal outcomes for the issue's assistant in the bucket.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "affectedCallRate": { + "type": "number", + "description": "affectedCallCount / analyzedCallCount; omitted for a zero denominator.", + "minimum": 0, + "maximum": 1 + } + }, + "required": [ + "date", + "affectedCallCount", + "analyzedCallCount" + ] + }, + "CallHealthDashboardIssueCoverageDTO": { + "type": "object", + "properties": { + "state": { + "type": "string", + "enum": [ + "complete", + "partial", + "sweeping", + "blocked" + ] + }, + "asOf": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" + } + }, + "required": [ + "state", + "asOf" + ] + }, + "CallHealthDashboardIssueSummaryDTO": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "status": { + "type": "string", + "enum": [ + "active", + "resolved", + "dismissed" + ] + }, + "rowVersion": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "goalId": { + "type": "string", + "description": "Owning goal identity; issue-ID routes derive this selection from the issue.", + "format": "uuid" + }, + "summary": { + "type": "string", + "minLength": 1 + }, + "assistant": { + "$ref": "#/components/schemas/CallHealthDashboardAssistantReferenceDTO" + }, + "affectedCallCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "analyzedCallCount": { + "type": "integer", + "description": "Same assistant/current-goal/window denominator used by the goal reads.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "affectedCallRate": { + "type": "number", + "description": "Distinct calls matching this issue / analyzedCallCount; absent at zero.", + "minimum": 0, + "maximum": 1 + }, + "dailySeries": { + "description": "One ascending contiguous page of UTC buckets; memberships across issues are not unique calls.", + "minItems": 1, + "maxItems": 100, + "type": "array", + "items": { + "$ref": "#/components/schemas/CallHealthDashboardIssueDailyDTO" + } + }, + "lastSeenAt": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" + }, + "coverage": { + "$ref": "#/components/schemas/CallHealthDashboardIssueCoverageDTO" + } + }, + "required": [ + "id", + "name", + "status", + "rowVersion", + "goalId", + "summary", + "assistant", + "affectedCallCount", + "analyzedCallCount", + "dailySeries", + "coverage" + ] + }, + "CallHealthDashboardWindowDTO": { + "type": "object", + "properties": { + "callTimeGte": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" + }, + "callTimeLt": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" + } + }, + "required": [ + "callTimeGte", + "callTimeLt" + ] + }, + "CallHealthDashboardSeriesPageDTO": { + "type": "object", + "properties": { + "window": { + "description": "Full resolved completion window used by every total, rate and coverage count.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardWindowDTO" + } + ] + }, + "pageWindow": { + "description": "Clipped completion window represented by this page's daily buckets.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardWindowDTO" + } + ] + }, + "nextCursor": { + "type": "string", + "description": "Continue chart dates only; independent of the issue-row nextCursor.", + "minLength": 1, + "maxLength": 2048, + "pattern": "^[A-Za-z0-9_-]+$" + } + }, + "required": [ + "window", + "pageWindow" + ] + }, + "CallHealthDashboardFacetsDTO": { + "type": "object", + "properties": { + "statuses": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "active", + "resolved", + "dismissed" + ] + } + } + }, + "required": [ + "statuses" + ] + }, + "CallHealthDashboardIntakeCoverageDTO": { + "type": "object", + "properties": { + "deliveryMode": { + "type": "string", + "enum": [ + "bestEffort" + ] + }, + "endToEndCoverage": { + "type": "string", + "enum": [ + "unknown" + ] + } + }, + "required": [ + "deliveryMode", + "endToEndCoverage" + ] + }, + "CallHealthDashboardGoalGapsDTO": { + "type": "object", + "properties": { + "pending": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unavailable": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "skipped": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "error": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "excluded": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "pending", + "unavailable", + "skipped", + "error", + "excluded" + ] + }, + "CallHealthDashboardClassificationCoverageDTO": { + "type": "object", + "properties": { + "pending": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unavailable": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "skipped": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "error": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "excluded": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "complete": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "partial": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "pending", + "unavailable", + "skipped", + "error", + "excluded", + "complete", + "partial" + ] + }, + "CallHealthDashboardAssignmentCoverageDTO": { + "type": "object", + "properties": { + "pending": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unmatched": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "skipped": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unavailable": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "error": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "coverageGapCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "pending", + "unmatched", + "skipped", + "unavailable", + "error", + "coverageGapCount" + ] + }, + "CallHealthDashboardDiscoveryCoverageDTO": { + "type": "object", + "properties": { + "pendingIssueCategoryCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "blockedIssueCategoryCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "pendingIssueCategoryCount", + "blockedIssueCategoryCount" + ] + }, + "CallHealthDashboardSweepCoverageDTO": { + "type": "object", + "properties": { + "state": { + "type": "string", + "enum": [ + "idle", + "enumerating", + "processing", + "deduplicating", + "blocked" + ] + } + }, + "required": [ + "state" + ] + }, + "CallHealthDashboardCoverageDTO": { + "type": "object", + "properties": { + "asOf": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" + }, + "intake": { + "$ref": "#/components/schemas/CallHealthDashboardIntakeCoverageDTO" + }, + "goal": { + "$ref": "#/components/schemas/CallHealthDashboardGoalGapsDTO" + }, + "classification": { + "$ref": "#/components/schemas/CallHealthDashboardClassificationCoverageDTO" + }, + "assignment": { + "$ref": "#/components/schemas/CallHealthDashboardAssignmentCoverageDTO" + }, + "discovery": { + "$ref": "#/components/schemas/CallHealthDashboardDiscoveryCoverageDTO" + }, + "sweep": { + "$ref": "#/components/schemas/CallHealthDashboardSweepCoverageDTO" + }, + "countsComplete": { + "type": "boolean", + "description": "Completeness of received authorized work only; never source delivery coverage." + } + }, + "required": [ + "asOf", + "intake", + "goal", + "classification", + "assignment", + "discovery", + "sweep", + "countsComplete" + ] + }, + "CallHealthDashboardIssueListResponseDTO": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CallHealthDashboardIssueSummaryDTO" + } + }, + "seriesPage": { + "description": "Every row's dailySeries represents this same date page.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardSeriesPageDTO" + } + ] + }, + "facets": { + "$ref": "#/components/schemas/CallHealthDashboardFacetsDTO" + }, + "nextCursor": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "^[A-Za-z0-9_-]+$" + }, + "coverage": { + "$ref": "#/components/schemas/CallHealthDashboardCoverageDTO" + } + }, + "required": [ + "results", + "seriesPage", + "facets", + "coverage" + ] + }, + "CallHealthDashboardIssueDefinitionDTO": { + "type": "object", + "properties": { + "applicability": { + "type": "string", + "nullable": true, + "minLength": 1 + }, + "problem": { + "type": "string", + "nullable": true, + "minLength": 1 + }, + "createdTaxonomyVersion": { + "type": "integer", + "nullable": true, + "minimum": 1, + "maximum": 9007199254740991 + } + }, + "required": [ + "applicability", + "problem", + "createdTaxonomyVersion" + ] + }, + "CallHealthDashboardIssueDetailResponseDTO": { + "type": "object", + "properties": { + "issue": { + "$ref": "#/components/schemas/CallHealthDashboardIssueSummaryDTO" + }, + "seriesPage": { + "$ref": "#/components/schemas/CallHealthDashboardSeriesPageDTO" + }, + "definition": { + "$ref": "#/components/schemas/CallHealthDashboardIssueDefinitionDTO" + }, + "coverage": { + "$ref": "#/components/schemas/CallHealthDashboardCoverageDTO" + } + }, + "required": [ + "issue", + "seriesPage", + "definition", + "coverage" + ] + }, "StructuredOutputRunResult": { "type": "object", "properties": { @@ -68479,8 +69052,20 @@ "claude-haiku-5-5" ] }, + "reasoningEffort": { + "type": "string", + "description": "Reasoning effort for the judge on claude-haiku-5-5. `none` turns thinking\noff. `low` to `max` let the judge think before it submits its verdict.\nUnset means `none`. Rejected for every other model.", + "enum": [ + "none", + "low", + "medium", + "high", + "xhigh", + "max" + ] + }, "thinking": { - "description": "This is the optional configuration for Anthropic's thinking feature.\n\n- If provided, `maxTokens` must be greater than `thinking.budgetTokens`.", + "description": "This is the optional configuration for Anthropic's thinking feature.\nclaude-haiku-5-5 uses `reasoningEffort` instead.\n\n- If provided, `maxTokens` must be greater than `thinking.budgetTokens`.", "allOf": [ { "$ref": "#/components/schemas/AnthropicThinkingConfig" @@ -69539,7 +70124,7 @@ "enum": [ "goal_met", "goal_not_met", - "ineligible" + "not_applicable" ], "description": "Absent until a semantic result is accepted. Processing failures are never goal_not_met." } From 5ddfa827ee8a11546bd08da403aa92fc8890dd91 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 4 Nov 2026 00:24:14 +0000 Subject: [PATCH 04/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 1488 ++++++++++++++++++++++++++++-------- 1 file changed, 1161 insertions(+), 327 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 693502012..2d8be97e6 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -11209,6 +11209,10 @@ { "$ref": "#/components/schemas/FallbackXaiTranscriber", "title": "xAI" + }, + { + "$ref": "#/components/schemas/FallbackReson8Transcriber", + "title": "Reson8" } ] } @@ -13896,6 +13900,73 @@ "provider" ] }, + "Reson8Transcriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "reson8" + ] + }, + "model": { + "type": "string", + "description": "The Reson8 speech-to-text endpoint to use. `turns` is Reson8's turn-detection endpoint.", + "enum": [ + "turns" + ] + }, + "language": { + "type": "string", + "description": "Language for transcription (e.g. `nl`), or a comma-separated candidate list such as `nl,en` which constrains auto-detection. When omitted, Reson8 auto-detects the language per utterance. Supported: de, en, es, fr, fy, it, nl, pl, pt, sv.", + "pattern": "^(de|en|es|fr|fy|it|nl|pl|pt|sv)(,(de|en|es|fr|fy|it|nl|pl|pt|sv))*$" + }, + "keyterms": { + "description": "Domain-specific terms to boost recognition (brand names, product codes, jargon). Sent to Reson8 as the `phrases` parameter. Max 250 phrases.", + "type": "array", + "items": { + "type": "string", + "maxLength": 255 + } + }, + "customModelId": { + "type": "string", + "description": "A stored Reson8 phrase collection (custom model) id, managed via the Reson8 API or console." + }, + "eagerTurnProbability": { + "type": "number", + "description": "Threshold (0-1) at which Reson8 emits an eager turn-end candidate. Provider default 0.5.", + "minimum": 0, + "maximum": 1 + }, + "finalTurnProbability": { + "type": "number", + "description": "Threshold (0-1) at which Reson8 confirms the end of a turn. Provider default 0.92.", + "minimum": 0, + "maximum": 1 + }, + "fillerMode": { + "type": "string", + "description": "How Reson8 renders filler words in transcripts. Provider default `natural`.", + "enum": [ + "clean", + "natural", + "verbatim" + ] + }, + "fallbackPlan": { + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider" + ] + }, "VapiTranscriber": { "type": "object", "properties": { @@ -16946,6 +17017,65 @@ "provider" ] }, + "FallbackReson8Transcriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "reson8" + ] + }, + "model": { + "type": "string", + "description": "The Reson8 speech-to-text endpoint to use. `turns` is Reson8's turn-detection endpoint.", + "enum": [ + "turns" + ] + }, + "language": { + "type": "string", + "description": "Language for transcription (e.g. `nl`), or a comma-separated candidate list such as `nl,en` which constrains auto-detection. When omitted, Reson8 auto-detects the language per utterance. Supported: de, en, es, fr, fy, it, nl, pl, pt, sv.", + "pattern": "^(de|en|es|fr|fy|it|nl|pl|pt|sv)(,(de|en|es|fr|fy|it|nl|pl|pt|sv))*$" + }, + "keyterms": { + "description": "Domain-specific terms to boost recognition (brand names, product codes, jargon). Sent to Reson8 as the `phrases` parameter. Max 250 phrases.", + "type": "array", + "items": { + "type": "string", + "maxLength": 255 + } + }, + "customModelId": { + "type": "string", + "description": "A stored Reson8 phrase collection (custom model) id, managed via the Reson8 API or console." + }, + "eagerTurnProbability": { + "type": "number", + "description": "Threshold (0-1) at which Reson8 emits an eager turn-end candidate. Provider default 0.5.", + "minimum": 0, + "maximum": 1 + }, + "finalTurnProbability": { + "type": "number", + "description": "Threshold (0-1) at which Reson8 confirms the end of a turn. Provider default 0.92.", + "minimum": 0, + "maximum": 1 + }, + "fillerMode": { + "type": "string", + "description": "How Reson8 renders filler words in transcripts. Provider default `natural`.", + "enum": [ + "clean", + "natural", + "verbatim" + ] + } + }, + "required": [ + "provider" + ] + }, "LangfuseObservabilityPlan": { "type": "object", "properties": { @@ -18833,6 +18963,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -20619,6 +20753,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -21182,6 +21320,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -21309,6 +21451,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -21509,6 +21652,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -22072,6 +22219,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -22199,6 +22350,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -27419,6 +27571,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -28737,6 +28893,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -29041,6 +29201,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -29168,6 +29332,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -37056,6 +37221,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -37619,6 +37788,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -37746,6 +37919,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -37998,6 +38172,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -38561,6 +38739,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -38688,6 +38870,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -39036,6 +39219,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -39599,6 +39786,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -39726,6 +39917,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -40056,6 +40248,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -40619,6 +40815,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -40746,6 +40946,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -41077,6 +41278,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -41640,6 +41845,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -41767,6 +41976,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -41991,6 +42201,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -42554,6 +42768,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -42681,6 +42899,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -42881,6 +43100,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -43444,6 +43667,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -43571,6 +43798,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -44031,6 +44259,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -44335,6 +44567,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -44462,6 +44698,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -44731,6 +44968,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -45035,6 +45276,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -45162,6 +45407,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -45413,6 +45659,10 @@ "$ref": "#/components/schemas/XaiTranscriber", "title": "XaiTranscriber" }, + { + "$ref": "#/components/schemas/Reson8Transcriber", + "title": "Reson8Transcriber" + }, { "$ref": "#/components/schemas/VapiTranscriber", "title": "VapiTranscriber" @@ -45717,6 +45967,10 @@ "$ref": "#/components/schemas/CreateSonioxCredentialDTO", "title": "SonioxCredential" }, + { + "$ref": "#/components/schemas/CreateReson8CredentialDTO", + "title": "Reson8Credential" + }, { "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", "title": "SupabaseCredential" @@ -45844,6 +46098,7 @@ "mistral": "#/components/schemas/CreateMistralCredentialDTO", "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO", "soniox": "#/components/schemas/CreateSonioxCredentialDTO", + "reson8": "#/components/schemas/CreateReson8CredentialDTO", "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", @@ -48073,6 +48328,16 @@ "call.in-progress.error-vapifault-xai-transcriber-invalid-config", "call.in-progress.error-vapifault-xai-transcriber-server-error", "call.in-progress.error-vapifault-xai-transcriber-failed", + "pipeline-error-reson8-transcriber-auth-failed", + "pipeline-error-reson8-transcriber-rate-limited", + "pipeline-error-reson8-transcriber-invalid-config", + "pipeline-error-reson8-transcriber-closed", + "pipeline-error-reson8-transcriber-failed", + "call.in-progress.error-vapifault-reson8-transcriber-auth-failed", + "call.in-progress.error-vapifault-reson8-transcriber-rate-limited", + "call.in-progress.error-vapifault-reson8-transcriber-invalid-config", + "call.in-progress.error-vapifault-reson8-transcriber-closed", + "call.in-progress.error-vapifault-reson8-transcriber-failed", "pipeline-error-cartesia-transcriber-failed", "call.in-progress.error-vapifault-cartesia-transcriber-failed", "call.in-progress.error-pipeline-no-available-llm-model", @@ -48408,6 +48673,7 @@ "call.in-progress.error-vapifault-cartesia-socket-hang-up", "call.in-progress.error-vapifault-cartesia-requested-payment", "call.in-progress.error-providerfault-cartesia-500-server-error", + "call.in-progress.error-providerfault-cartesia-502-server-error", "call.in-progress.error-providerfault-cartesia-503-server-error", "call.in-progress.error-providerfault-cartesia-522-server-error", "pipeline-error-eleven-labs-voice-not-found", @@ -48528,6 +48794,16 @@ "call.in-progress.error-vapifault-xai-transcriber-invalid-config", "call.in-progress.error-vapifault-xai-transcriber-server-error", "call.in-progress.error-vapifault-xai-transcriber-failed", + "pipeline-error-reson8-transcriber-auth-failed", + "pipeline-error-reson8-transcriber-rate-limited", + "pipeline-error-reson8-transcriber-invalid-config", + "pipeline-error-reson8-transcriber-closed", + "pipeline-error-reson8-transcriber-failed", + "call.in-progress.error-vapifault-reson8-transcriber-auth-failed", + "call.in-progress.error-vapifault-reson8-transcriber-rate-limited", + "call.in-progress.error-vapifault-reson8-transcriber-invalid-config", + "call.in-progress.error-vapifault-reson8-transcriber-closed", + "call.in-progress.error-vapifault-reson8-transcriber-failed", "pipeline-error-cartesia-transcriber-failed", "call.in-progress.error-vapifault-cartesia-transcriber-failed", "call.in-progress.error-warm-transfer-max-duration", @@ -49739,6 +50015,697 @@ } } }, + "CallHealthDashboardApiErrorDTO": { + "type": "object", + "properties": { + "code": { + "type": "string", + "minLength": 1 + }, + "message": { + "type": "string", + "minLength": 1 + }, + "requestId": { + "type": "string", + "minLength": 1 + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message", + "requestId", + "retryable" + ] + }, + "CallHealthDashboardAssistantReferenceDTO": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "latestVersion": { + "type": "string", + "description": "Current assistant.latest_version label; omitted when unavailable, never a goal revision.", + "minLength": 1 + } + }, + "required": [ + "id" + ] + }, + "CallHealthDashboardGoalDefinitionDTO": { + "type": "object", + "properties": { + "goalId": { + "type": "string", + "description": "Explicit selected goal identity, stable across its revisions.", + "format": "uuid" + }, + "succeedsWhen": { + "type": "string", + "description": "Current visible revision of the selected goal.", + "minLength": 1, + "maxLength": 600 + }, + "leaveOut": { + "type": "string", + "description": "Current optional semantic exclusions.", + "minLength": 1, + "maxLength": 300 + } + }, + "required": [ + "goalId", + "succeedsWhen" + ] + }, + "CallHealthDashboardGoalSummaryDTO": { + "type": "object", + "properties": { + "registeredCallCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "eligibleCallCount": { + "type": "integer", + "description": "Calls with an accepted semantic eligibility decision and binary goal outcome.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "ineligibleCallCount": { + "type": "integer", + "description": "Accepted semantic exclusions; absent from the goal denominator.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unassessedCallCount": { + "type": "integer", + "description": "No accepted eligibility decision, including technical or privacy exclusions.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "goalMetCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "goalNotMetCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "evaluatedCallCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "analyzedCallCount": { + "type": "integer", + "description": "Accepted current-goal results, including ineligible; independent of issue processing.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "goalMetRate": { + "type": "number", + "description": "Goal-met / evaluatedCallCount; omitted when there are no binary outcomes.", + "minimum": 0, + "maximum": 1 + }, + "goalNotMetRate": { + "type": "number", + "minimum": 0, + "maximum": 1 + } + }, + "required": [ + "registeredCallCount", + "eligibleCallCount", + "ineligibleCallCount", + "unassessedCallCount", + "goalMetCount", + "goalNotMetCount", + "evaluatedCallCount", + "analyzedCallCount" + ] + }, + "CallHealthDashboardAssistantOverviewDTO": { + "type": "object", + "properties": { + "assistant": { + "description": "Current permitted assistant metadata, fetched in a batch.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardAssistantReferenceDTO" + } + ] + }, + "goalDefinition": { + "description": "Every row represents an explicitly selected, tenant-owned assistant goal.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardGoalDefinitionDTO" + } + ] + }, + "goal": { + "description": "Window totals for the selected goal, including zero-result assistants.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardGoalSummaryDTO" + } + ] + } + }, + "required": [ + "assistant", + "goalDefinition", + "goal" + ] + }, + "CallHealthDashboardIntakeCoverageDTO": { + "type": "object", + "properties": { + "deliveryMode": { + "type": "string", + "enum": [ + "bestEffort" + ] + }, + "endToEndCoverage": { + "type": "string", + "enum": [ + "unknown" + ] + } + }, + "required": [ + "deliveryMode", + "endToEndCoverage" + ] + }, + "CallHealthDashboardGoalGapsDTO": { + "type": "object", + "properties": { + "pending": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unavailable": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "skipped": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "error": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "excluded": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "pending", + "unavailable", + "skipped", + "error", + "excluded" + ] + }, + "CallHealthDashboardClassificationCoverageDTO": { + "type": "object", + "properties": { + "pending": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unavailable": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "skipped": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "error": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "excluded": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "complete": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "partial": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "pending", + "unavailable", + "skipped", + "error", + "excluded", + "complete", + "partial" + ] + }, + "CallHealthDashboardAssignmentCoverageDTO": { + "type": "object", + "properties": { + "pending": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unmatched": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "skipped": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unavailable": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "error": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "coverageGapCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "pending", + "unmatched", + "skipped", + "unavailable", + "error", + "coverageGapCount" + ] + }, + "CallHealthDashboardDiscoveryCoverageDTO": { + "type": "object", + "properties": { + "pendingIssueCategoryCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "blockedIssueCategoryCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "pendingIssueCategoryCount", + "blockedIssueCategoryCount" + ] + }, + "CallHealthDashboardSweepCoverageDTO": { + "type": "object", + "properties": { + "state": { + "type": "string", + "enum": [ + "idle", + "enumerating", + "processing", + "deduplicating", + "blocked" + ] + } + }, + "required": [ + "state" + ] + }, + "CallHealthDashboardCoverageDTO": { + "type": "object", + "properties": { + "asOf": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" + }, + "intake": { + "$ref": "#/components/schemas/CallHealthDashboardIntakeCoverageDTO" + }, + "goal": { + "$ref": "#/components/schemas/CallHealthDashboardGoalGapsDTO" + }, + "classification": { + "$ref": "#/components/schemas/CallHealthDashboardClassificationCoverageDTO" + }, + "assignment": { + "$ref": "#/components/schemas/CallHealthDashboardAssignmentCoverageDTO" + }, + "discovery": { + "$ref": "#/components/schemas/CallHealthDashboardDiscoveryCoverageDTO" + }, + "sweep": { + "$ref": "#/components/schemas/CallHealthDashboardSweepCoverageDTO" + }, + "countsComplete": { + "type": "boolean", + "description": "Completeness of received authorized work only; never source delivery coverage." + } + }, + "required": [ + "asOf", + "intake", + "goal", + "classification", + "assignment", + "discovery", + "sweep", + "countsComplete" + ] + }, + "CallHealthDashboardAssistantListResponseDTO": { + "type": "object", + "properties": { + "results": { + "description": "Visible nondeleted assistants in ascending ID transport order; sort the exhausted result in the frontend.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CallHealthDashboardAssistantOverviewDTO" + } + }, + "nextCursor": { + "type": "string", + "description": "Opaque ID continuation bound to tenant, completion window and filters.", + "minLength": 1, + "maxLength": 2048, + "pattern": "^[A-Za-z0-9_-]+$" + }, + "coverage": { + "description": "Received-work processing coverage, separate from analyzed goal results.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardCoverageDTO" + } + ] + } + }, + "required": [ + "results", + "coverage" + ] + }, + "CallHealthDashboardGoalOptionDTO": { + "type": "object", + "properties": { + "goalId": { + "type": "string", + "description": "Explicit selected goal identity, stable across its revisions.", + "format": "uuid" + }, + "succeedsWhen": { + "type": "string", + "description": "Current visible revision of the selected goal.", + "minLength": 1, + "maxLength": 600 + }, + "leaveOut": { + "type": "string", + "description": "Current optional semantic exclusions.", + "minLength": 1, + "maxLength": 300 + }, + "goalVersion": { + "type": "string", + "description": "Current revision for display; clients select by stable goalId, never by this version.", + "pattern": "^[1-9]\\d{0,18}$", + "minLength": 1, + "maxLength": 19 + } + }, + "required": [ + "goalId", + "succeedsWhen", + "goalVersion" + ] + }, + "CallHealthDashboardAssistantGoalsDTO": { + "type": "object", + "properties": { + "assistantId": { + "type": "string", + "description": "Requested assistant identity whose current published row remains visible.", + "format": "uuid" + }, + "goals": { + "description": "Empty when this visible assistant has no goals; no goal is automatically selected.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CallHealthDashboardGoalOptionDTO" + } + } + }, + "required": [ + "assistantId", + "goals" + ] + }, + "CallHealthDashboardAssistantGoalsResponseDTO": { + "type": "object", + "properties": { + "results": { + "description": "Complete requested visible assistant cohort, including assistants with no goal options.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CallHealthDashboardAssistantGoalsDTO" + } + } + }, + "required": [ + "results" + ] + }, + "CallHealthDashboardGoalDailyDTO": { + "type": "object", + "properties": { + "registeredCallCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "eligibleCallCount": { + "type": "integer", + "description": "Calls with an accepted semantic eligibility decision and binary goal outcome.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "ineligibleCallCount": { + "type": "integer", + "description": "Accepted semantic exclusions; absent from the goal denominator.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "unassessedCallCount": { + "type": "integer", + "description": "No accepted eligibility decision, including technical or privacy exclusions.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "goalMetCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "goalNotMetCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "evaluatedCallCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "analyzedCallCount": { + "type": "integer", + "description": "Accepted current-goal results, including ineligible; independent of issue processing.", + "minimum": 0, + "maximum": 9007199254740991 + }, + "goalMetRate": { + "type": "number", + "description": "Goal-met / evaluatedCallCount; omitted when there are no binary outcomes.", + "minimum": 0, + "maximum": 1 + }, + "goalNotMetRate": { + "type": "number", + "minimum": 0, + "maximum": 1 + }, + "date": { + "type": "string", + "description": "UTC calendar date; the first and last buckets are clipped to the requested window.", + "format": "date" + } + }, + "required": [ + "registeredCallCount", + "eligibleCallCount", + "ineligibleCallCount", + "unassessedCallCount", + "goalMetCount", + "goalNotMetCount", + "evaluatedCallCount", + "analyzedCallCount", + "date" + ] + }, + "CallHealthDashboardWindowDTO": { + "type": "object", + "properties": { + "callTimeGte": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" + }, + "callTimeLt": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" + } + }, + "required": [ + "callTimeGte", + "callTimeLt" + ] + }, + "CallHealthDashboardSeriesPageDTO": { + "type": "object", + "properties": { + "window": { + "description": "Full resolved completion window used by every total, rate and coverage count.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardWindowDTO" + } + ] + }, + "pageWindow": { + "description": "Clipped completion window represented by this page's daily buckets.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardWindowDTO" + } + ] + }, + "nextCursor": { + "type": "string", + "description": "Continue chart dates only; independent of the issue-row nextCursor.", + "minLength": 1, + "maxLength": 2048, + "pattern": "^[A-Za-z0-9_-]+$" + } + }, + "required": [ + "window", + "pageWindow" + ] + }, + "CallHealthDashboardAssistantSummaryResponseDTO": { + "type": "object", + "properties": { + "assistant": { + "description": "Current permitted assistant metadata, fetched in a batch.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardAssistantReferenceDTO" + } + ] + }, + "goalDefinition": { + "description": "Every row represents an explicitly selected, tenant-owned assistant goal.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardGoalDefinitionDTO" + } + ] + }, + "goal": { + "description": "Window totals for the selected goal, including zero-result assistants.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardGoalSummaryDTO" + } + ] + }, + "results": { + "description": "One ascending contiguous page of UTC dates, including empty buckets.", + "minItems": 1, + "maxItems": 100, + "type": "array", + "items": { + "$ref": "#/components/schemas/CallHealthDashboardGoalDailyDTO" + } + }, + "seriesPage": { + "$ref": "#/components/schemas/CallHealthDashboardSeriesPageDTO" + }, + "coverage": { + "description": "Received-work processing coverage, separate from success rates.", + "allOf": [ + { + "$ref": "#/components/schemas/CallHealthDashboardCoverageDTO" + } + ] + } + }, + "required": [ + "assistant", + "goalDefinition", + "goal", + "results", + "seriesPage", + "coverage" + ] + }, "DeveloperMessage": { "type": "object", "properties": { @@ -61280,53 +62247,6 @@ "toolId" ] }, - "CallHealthDashboardApiErrorDTO": { - "type": "object", - "properties": { - "code": { - "type": "string", - "minLength": 1 - }, - "message": { - "type": "string", - "minLength": 1 - }, - "requestId": { - "type": "string", - "minLength": 1 - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "code", - "message", - "requestId", - "retryable" - ] - }, - "CallHealthDashboardAssistantReferenceDTO": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "latestVersion": { - "type": "string", - "description": "Current assistant.latest_version label; omitted when unavailable, never a goal revision.", - "minLength": 1 - } - }, - "required": [ - "id" - ] - }, "CallHealthDashboardIssueDailyDTO": { "type": "object", "properties": { @@ -61468,57 +62388,6 @@ "coverage" ] }, - "CallHealthDashboardWindowDTO": { - "type": "object", - "properties": { - "callTimeGte": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" - }, - "callTimeLt": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" - } - }, - "required": [ - "callTimeGte", - "callTimeLt" - ] - }, - "CallHealthDashboardSeriesPageDTO": { - "type": "object", - "properties": { - "window": { - "description": "Full resolved completion window used by every total, rate and coverage count.", - "allOf": [ - { - "$ref": "#/components/schemas/CallHealthDashboardWindowDTO" - } - ] - }, - "pageWindow": { - "description": "Clipped completion window represented by this page's daily buckets.", - "allOf": [ - { - "$ref": "#/components/schemas/CallHealthDashboardWindowDTO" - } - ] - }, - "nextCursor": { - "type": "string", - "description": "Continue chart dates only; independent of the issue-row nextCursor.", - "minLength": 1, - "maxLength": 2048, - "pattern": "^[A-Za-z0-9_-]+$" - } - }, - "required": [ - "window", - "pageWindow" - ] - }, "CallHealthDashboardFacetsDTO": { "type": "object", "properties": { @@ -61538,235 +62407,6 @@ "statuses" ] }, - "CallHealthDashboardIntakeCoverageDTO": { - "type": "object", - "properties": { - "deliveryMode": { - "type": "string", - "enum": [ - "bestEffort" - ] - }, - "endToEndCoverage": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "deliveryMode", - "endToEndCoverage" - ] - }, - "CallHealthDashboardGoalGapsDTO": { - "type": "object", - "properties": { - "pending": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "unavailable": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "skipped": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "error": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "excluded": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - } - }, - "required": [ - "pending", - "unavailable", - "skipped", - "error", - "excluded" - ] - }, - "CallHealthDashboardClassificationCoverageDTO": { - "type": "object", - "properties": { - "pending": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "unavailable": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "skipped": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "error": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "excluded": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "complete": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "partial": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - } - }, - "required": [ - "pending", - "unavailable", - "skipped", - "error", - "excluded", - "complete", - "partial" - ] - }, - "CallHealthDashboardAssignmentCoverageDTO": { - "type": "object", - "properties": { - "pending": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "unmatched": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "skipped": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "unavailable": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "error": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "coverageGapCount": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - } - }, - "required": [ - "pending", - "unmatched", - "skipped", - "unavailable", - "error", - "coverageGapCount" - ] - }, - "CallHealthDashboardDiscoveryCoverageDTO": { - "type": "object", - "properties": { - "pendingIssueCategoryCount": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - }, - "blockedIssueCategoryCount": { - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - } - }, - "required": [ - "pendingIssueCategoryCount", - "blockedIssueCategoryCount" - ] - }, - "CallHealthDashboardSweepCoverageDTO": { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "idle", - "enumerating", - "processing", - "deduplicating", - "blocked" - ] - } - }, - "required": [ - "state" - ] - }, - "CallHealthDashboardCoverageDTO": { - "type": "object", - "properties": { - "asOf": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" - }, - "intake": { - "$ref": "#/components/schemas/CallHealthDashboardIntakeCoverageDTO" - }, - "goal": { - "$ref": "#/components/schemas/CallHealthDashboardGoalGapsDTO" - }, - "classification": { - "$ref": "#/components/schemas/CallHealthDashboardClassificationCoverageDTO" - }, - "assignment": { - "$ref": "#/components/schemas/CallHealthDashboardAssignmentCoverageDTO" - }, - "discovery": { - "$ref": "#/components/schemas/CallHealthDashboardDiscoveryCoverageDTO" - }, - "sweep": { - "$ref": "#/components/schemas/CallHealthDashboardSweepCoverageDTO" - }, - "countsComplete": { - "type": "boolean", - "description": "Completeness of received authorized work only; never source delivery coverage." - } - }, - "required": [ - "asOf", - "intake", - "goal", - "classification", - "assignment", - "discovery", - "sweep", - "countsComplete" - ] - }, "CallHealthDashboardIssueListResponseDTO": { "type": "object", "properties": { @@ -70213,6 +70853,62 @@ "results" ] }, + "CallHealthDashboardAffectedCallDTO": { + "type": "object", + "properties": { + "callId": { + "type": "string", + "format": "uuid" + }, + "assistantId": { + "type": "string", + "format": "uuid" + }, + "callTime": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$", + "description": "Call completion time (endedAt), never startedAt." + }, + "callAvailability": { + "type": "string", + "enum": [ + "available", + "unavailable" + ] + } + }, + "required": [ + "callId", + "assistantId", + "callTime", + "callAvailability" + ] + }, + "CallHealthDashboardAffectedCallsResponseDTO": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CallHealthDashboardAffectedCallDTO" + } + }, + "nextCursor": { + "type": "string", + "minLength": 1, + "maxLength": 2048, + "pattern": "^[A-Za-z0-9_-]+$" + }, + "coverage": { + "$ref": "#/components/schemas/CallHealthDashboardCoverageDTO" + } + }, + "required": [ + "results", + "coverage" + ] + }, "CreateOrgDTO": { "type": "object", "properties": { @@ -73387,6 +74083,54 @@ "updatedAt" ] }, + "Reson8Credential": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "reson8" + ] + }, + "apiKey": { + "type": "string", + "pattern": "\\S", + "description": "This is not returned in the API." + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, "SonioxCredential": { "type": "object", "properties": { @@ -74656,6 +75400,32 @@ "bucketPlan" ] }, + "CreateReson8CredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "reson8" + ] + }, + "apiKey": { + "type": "string", + "pattern": "\\S", + "description": "This is not returned in the API." + }, + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + }, + "required": [ + "provider", + "apiKey" + ] + }, "CreateSonioxCredentialDTO": { "type": "object", "properties": { @@ -76391,6 +77161,28 @@ } } }, + "UpdateReson8CredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "reson8" + ] + }, + "apiKey": { + "type": "string", + "pattern": "\\S", + "description": "This is not returned in the API." + }, + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, "UpdateSonioxCredentialDTO": { "type": "object", "properties": { @@ -80704,6 +81496,16 @@ "call.in-progress.error-vapifault-xai-transcriber-invalid-config", "call.in-progress.error-vapifault-xai-transcriber-server-error", "call.in-progress.error-vapifault-xai-transcriber-failed", + "pipeline-error-reson8-transcriber-auth-failed", + "pipeline-error-reson8-transcriber-rate-limited", + "pipeline-error-reson8-transcriber-invalid-config", + "pipeline-error-reson8-transcriber-closed", + "pipeline-error-reson8-transcriber-failed", + "call.in-progress.error-vapifault-reson8-transcriber-auth-failed", + "call.in-progress.error-vapifault-reson8-transcriber-rate-limited", + "call.in-progress.error-vapifault-reson8-transcriber-invalid-config", + "call.in-progress.error-vapifault-reson8-transcriber-closed", + "call.in-progress.error-vapifault-reson8-transcriber-failed", "pipeline-error-cartesia-transcriber-failed", "call.in-progress.error-vapifault-cartesia-transcriber-failed", "call.in-progress.error-pipeline-no-available-llm-model", @@ -81039,6 +81841,7 @@ "call.in-progress.error-vapifault-cartesia-socket-hang-up", "call.in-progress.error-vapifault-cartesia-requested-payment", "call.in-progress.error-providerfault-cartesia-500-server-error", + "call.in-progress.error-providerfault-cartesia-502-server-error", "call.in-progress.error-providerfault-cartesia-503-server-error", "call.in-progress.error-providerfault-cartesia-522-server-error", "pipeline-error-eleven-labs-voice-not-found", @@ -81159,6 +81962,16 @@ "call.in-progress.error-vapifault-xai-transcriber-invalid-config", "call.in-progress.error-vapifault-xai-transcriber-server-error", "call.in-progress.error-vapifault-xai-transcriber-failed", + "pipeline-error-reson8-transcriber-auth-failed", + "pipeline-error-reson8-transcriber-rate-limited", + "pipeline-error-reson8-transcriber-invalid-config", + "pipeline-error-reson8-transcriber-closed", + "pipeline-error-reson8-transcriber-failed", + "call.in-progress.error-vapifault-reson8-transcriber-auth-failed", + "call.in-progress.error-vapifault-reson8-transcriber-rate-limited", + "call.in-progress.error-vapifault-reson8-transcriber-invalid-config", + "call.in-progress.error-vapifault-reson8-transcriber-closed", + "call.in-progress.error-vapifault-reson8-transcriber-failed", "pipeline-error-cartesia-transcriber-failed", "call.in-progress.error-vapifault-cartesia-transcriber-failed", "call.in-progress.error-warm-transfer-max-duration", @@ -82174,6 +82987,16 @@ "call.in-progress.error-vapifault-xai-transcriber-invalid-config", "call.in-progress.error-vapifault-xai-transcriber-server-error", "call.in-progress.error-vapifault-xai-transcriber-failed", + "pipeline-error-reson8-transcriber-auth-failed", + "pipeline-error-reson8-transcriber-rate-limited", + "pipeline-error-reson8-transcriber-invalid-config", + "pipeline-error-reson8-transcriber-closed", + "pipeline-error-reson8-transcriber-failed", + "call.in-progress.error-vapifault-reson8-transcriber-auth-failed", + "call.in-progress.error-vapifault-reson8-transcriber-rate-limited", + "call.in-progress.error-vapifault-reson8-transcriber-invalid-config", + "call.in-progress.error-vapifault-reson8-transcriber-closed", + "call.in-progress.error-vapifault-reson8-transcriber-failed", "pipeline-error-cartesia-transcriber-failed", "call.in-progress.error-vapifault-cartesia-transcriber-failed", "call.in-progress.error-pipeline-no-available-llm-model", @@ -82509,6 +83332,7 @@ "call.in-progress.error-vapifault-cartesia-socket-hang-up", "call.in-progress.error-vapifault-cartesia-requested-payment", "call.in-progress.error-providerfault-cartesia-500-server-error", + "call.in-progress.error-providerfault-cartesia-502-server-error", "call.in-progress.error-providerfault-cartesia-503-server-error", "call.in-progress.error-providerfault-cartesia-522-server-error", "pipeline-error-eleven-labs-voice-not-found", @@ -82629,6 +83453,16 @@ "call.in-progress.error-vapifault-xai-transcriber-invalid-config", "call.in-progress.error-vapifault-xai-transcriber-server-error", "call.in-progress.error-vapifault-xai-transcriber-failed", + "pipeline-error-reson8-transcriber-auth-failed", + "pipeline-error-reson8-transcriber-rate-limited", + "pipeline-error-reson8-transcriber-invalid-config", + "pipeline-error-reson8-transcriber-closed", + "pipeline-error-reson8-transcriber-failed", + "call.in-progress.error-vapifault-reson8-transcriber-auth-failed", + "call.in-progress.error-vapifault-reson8-transcriber-rate-limited", + "call.in-progress.error-vapifault-reson8-transcriber-invalid-config", + "call.in-progress.error-vapifault-reson8-transcriber-closed", + "call.in-progress.error-vapifault-reson8-transcriber-failed", "pipeline-error-cartesia-transcriber-failed", "call.in-progress.error-vapifault-cartesia-transcriber-failed", "call.in-progress.error-warm-transfer-max-duration", From d86d26797a1debe26f2b03d999bcb407e6a4c24d Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Nov 2026 00:24:44 +0000 Subject: [PATCH 05/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 2d8be97e6..d34cda010 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -47715,23 +47715,23 @@ "properties": { "modelLatency": { "type": "number", - "description": "This is the model latency for the first token." + "description": "This is the time in milliseconds from the start of the turn's model stage to the model's first output token.\nIt includes knowledge-base retrieval and request routing before the provider request. 0 when it was not measured on this turn." }, "voiceLatency": { "type": "number", - "description": "This is the voice latency from the model output." + "description": "This is the time in milliseconds from the model's first output token to the first reply audio reaching Vapi's turn-taking buffer.\nIt includes the wait to collect enough text for the first voice request (set by `voice.chunkPlan`), the voice provider's time to first audio, and any sample-rate conversion. 0 when it was not measured on this turn." }, "transcriberLatency": { "type": "number", - "description": "This is the transcriber latency from the user speech." + "description": "This is the time in milliseconds from the user's last voice activity signal, normally the end of speech, to the transcriber returning the words of that speech.\n0 when it was not measured, including when the words arrived before that signal." }, "endpointingLatency": { "type": "number", - "description": "This is the endpointing latency." + "description": "This is the time in milliseconds from the transcriber returning the words to Vapi deciding the turn is over and sending it to the model.\n0 when the reply was not triggered by sending a user transcript to the model." }, "turnLatency": { "type": "number", - "description": "This is the latency for the whole turn." + "description": "This is the time in milliseconds from the user's last voice activity signal to Vapi starting to send the assistant's reply audio.\nIt is computed as `transcriberLatency` + `endpointingLatency` + the time from that decision to the reply starting, so when `transcriberLatency` is 0 because it was not measured, this total leaves that interval out. `modelLatency` and `voiceLatency` fall inside the last part, so the fields do not add up to this value." } } }, @@ -47739,7 +47739,7 @@ "type": "object", "properties": { "turnLatencies": { - "description": "These are the individual latencies for each turn.", + "description": "These are the individual latencies for each turn, in milliseconds, measured on Vapi's servers without network or playback time.\nA turn is recorded only when the assistant replies to the user. A first message the assistant speaks first is not recorded; with `assistant-waits-for-user` it is recorded, with `endpointingLatency` 0. A component that was not measured on a turn is 0.", "type": "array", "items": { "$ref": "#/components/schemas/TurnLatency" @@ -47747,11 +47747,11 @@ }, "modelLatencyAverage": { "type": "number", - "description": "This is the average latency for the model to output the first token." + "description": "This is the average `modelLatency` across `turnLatencies`, in milliseconds.\nTurns that recorded 0 because the model latency was not measured are included in the average." }, "voiceLatencyAverage": { "type": "number", - "description": "This is the average latency for the text to speech." + "description": "This is the average `voiceLatency` across `turnLatencies`, in milliseconds.\nTurns that recorded 0 because the voice latency was not measured are included in the average." }, "transcriberLatencyAverage": { "type": "number", @@ -77237,8 +77237,7 @@ } }, "required": [ - "endUserId", - "organizationId" + "endUserId" ] }, "CredentialSessionError": { From 19ce8aaeddc8e81d1923ceb7bf22a7aadb420f05 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 6 Nov 2026 00:25:12 +0000 Subject: [PATCH 06/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 72 +++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index d34cda010..b827ea73d 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -36277,6 +36277,11 @@ "type": "string", "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" }, + "serverVersion": { + "type": "string", + "description": "The semver version of your Langfuse server, e.g. 3.63.0, as its /api/public/health endpoint reports it. Optional.", + "maxLength": 32 + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", @@ -66804,6 +66809,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -66934,6 +66943,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -67012,6 +67025,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -67186,6 +67203,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -67260,6 +67281,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -67308,6 +67333,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -67456,6 +67485,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -67534,6 +67567,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -67586,6 +67623,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -67732,12 +67773,13 @@ "operation": { "type": "string", "enum": [ + "count", "average", "sum", "min", "max" ], - "description": "This is the aggregation operation to perform on the column.\nWhen the column is a number type, the operation must be one of the following:\n- average\n- sum\n- min\n- max", + "description": "This is the aggregation operation to perform on the column.\nWhen the column is a number type, the operation must be one of the following:\n- count\n- average\n- sum\n- min\n- max", "example": "sum" }, "name": { @@ -67958,6 +68000,12 @@ "pipeline.denoiserFailed" ] }, + "column": { + "type": "string", + "description": "The structured output an evaluation monitor tracks, as artifact.structuredOutputs[OutputID]", + "example": "artifact.structuredOutputs[1016c445-5a16-410d-a744-3bc07d8b1508]", + "pattern": "^artifact\\.structuredOutputs\\[[^\\]]+\\]$" + }, "operation": { "type": "string", "description": "This is the operation to perform on matching events.\n- \"count\": Returns the raw count of matching events\n- \"percentage\": Returns (count of matching events / total calls) * 100", @@ -68479,6 +68527,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -68557,6 +68609,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -68609,6 +68665,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -73250,6 +73310,11 @@ "type": "string", "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" }, + "serverVersion": { + "type": "string", + "description": "The semver version of your Langfuse server, e.g. 3.63.0, as its /api/public/health endpoint reports it. Optional.", + "maxLength": 32 + }, "id": { "type": "string", "description": "This is the unique identifier for the credential." @@ -76415,6 +76480,11 @@ "type": "string", "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" }, + "serverVersion": { + "type": "string", + "description": "The semver version of your Langfuse server, e.g. 3.63.0, as its /api/public/health endpoint reports it. Optional.", + "maxLength": 32 + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", From 275db04606f8749b5b4360745e78f2619a9eca71 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 7 Nov 2026 00:23:04 +0000 Subject: [PATCH 07/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 1188 +++++++++++++++++++++++++++++++++++- 1 file changed, 1157 insertions(+), 31 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index b827ea73d..29e97bc77 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -10497,6 +10497,694 @@ ] } }, + "/guardrail/rules": { + "get": { + "operationId": "GuardrailRulesController_list", + "summary": "List guardrail rules", + "parameters": [ + { + "name": "limit", + "required": false, + "in": "query", + "description": "Positive bounded list size, matching the shared library reader.", + "schema": { + "minimum": 1, + "maximum": 1000, + "default": 100, + "type": "number" + } + }, + { + "name": "search", + "required": false, + "in": "query", + "description": "Case-insensitive name or identifier fragment; omitted means all resources.", + "schema": { + "type": "string" + } + }, + { + "name": "packId", + "required": false, + "in": "query", + "description": "Limits rules to a pack in the authenticated organization without per-member requests.", + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "name": "createdAtGt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtGe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GuardrailRule" + } + } + } + } + } + }, + "tags": [ + "Guardrail Rules" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/guardrail/rules/paginated": { + "get": { + "operationId": "GuardrailRulesController_paginated", + "summary": "List paginated guardrail rules", + "parameters": [ + { + "name": "limit", + "required": false, + "in": "query", + "schema": { + "minimum": 1, + "maximum": 1000, + "default": 100, + "type": "number" + } + }, + { + "name": "search", + "required": false, + "in": "query", + "description": "Case-insensitive name or identifier fragment; omitted means all resources.", + "schema": { + "type": "string" + } + }, + { + "name": "packId", + "required": false, + "in": "query", + "description": "Limits rules to a pack in the authenticated organization without per-member requests.", + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "name": "sortBy", + "required": false, + "in": "query", + "description": "Only persisted creation order is supported, with the ID as a stable tie-breaker.", + "schema": { + "enum": [ + "createdAt" + ], + "type": "string" + } + }, + { + "name": "createdAtGt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtGe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "page", + "required": false, + "in": "query", + "description": "A safe integer page; the reader also validates the computed offset.", + "schema": { + "minimum": 1, + "maximum": 9007199254740991, + "type": "number" + } + }, + { + "name": "sortOrder", + "required": false, + "in": "query", + "description": "This is the sort order for pagination. Defaults to 'DESC'.", + "schema": { + "enum": [ + "ASC", + "DESC" + ], + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GuardrailRulesPage" + } + } + } + } + }, + "tags": [ + "Guardrail Rules" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/guardrail/rules/{id}": { + "get": { + "operationId": "GuardrailRulesController_find", + "summary": "Get guardrail rule", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The unique identifier for the resource.", + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GuardrailRule" + } + } + } + } + }, + "tags": [ + "Guardrail Rules" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/guardrail/packs": { + "get": { + "operationId": "GuardrailPacksController_list", + "summary": "List guardrail packs", + "parameters": [ + { + "name": "limit", + "required": false, + "in": "query", + "description": "Positive bounded list size, matching the shared library reader.", + "schema": { + "minimum": 1, + "maximum": 1000, + "default": 100, + "type": "number" + } + }, + { + "name": "search", + "required": false, + "in": "query", + "description": "Case-insensitive name or identifier fragment; omitted means all resources.", + "schema": { + "type": "string" + } + }, + { + "name": "createdAtGt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtGe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GuardrailPack" + } + } + } + } + } + }, + "tags": [ + "Guardrail Packs" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/guardrail/packs/paginated": { + "get": { + "operationId": "GuardrailPacksController_paginated", + "summary": "List paginated guardrail packs", + "parameters": [ + { + "name": "limit", + "required": false, + "in": "query", + "schema": { + "minimum": 1, + "maximum": 1000, + "default": 100, + "type": "number" + } + }, + { + "name": "search", + "required": false, + "in": "query", + "description": "Case-insensitive name or identifier fragment; omitted means all resources.", + "schema": { + "type": "string" + } + }, + { + "name": "sortBy", + "required": false, + "in": "query", + "description": "Only persisted creation order is supported, with the ID as a stable tie-breaker.", + "schema": { + "enum": [ + "createdAt" + ], + "type": "string" + } + }, + { + "name": "createdAtGt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtGe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "page", + "required": false, + "in": "query", + "description": "A safe integer page; the reader also validates the computed offset.", + "schema": { + "minimum": 1, + "maximum": 9007199254740991, + "type": "number" + } + }, + { + "name": "sortOrder", + "required": false, + "in": "query", + "description": "This is the sort order for pagination. Defaults to 'DESC'.", + "schema": { + "enum": [ + "ASC", + "DESC" + ], + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GuardrailPacksPage" + } + } + } + } + }, + "tags": [ + "Guardrail Packs" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/guardrail/packs/{id}": { + "get": { + "operationId": "GuardrailPacksController_find", + "summary": "Get guardrail pack", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "The unique identifier for the resource.", + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GuardrailPack" + } + } + } + } + }, + "tags": [ + "Guardrail Packs" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, "/provider/{provider}/{resourceName}": { "post": { "operationId": "ProviderResourceController_createProviderResource", @@ -11239,7 +11927,7 @@ }, "confidenceThreshold": { "type": "number", - "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4", + "description": "Transcripts below this confidence threshold will be discarded.\n\nDefaults to 0.4 for legacy streaming models. Universal Pro models do not\nfilter by confidence unless this field is explicitly set.", "minimum": 0, "maximum": 1, "example": 0.4 @@ -14596,7 +15284,7 @@ }, "confidenceThreshold": { "type": "number", - "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4", + "description": "Transcripts below this confidence threshold will be discarded.\n\nDefaults to 0.4 for legacy streaming models. Universal Pro models do not\nfilter by confidence unless this field is explicitly set.", "minimum": 0, "maximum": 1, "example": 0.4 @@ -18979,13 +19667,17 @@ "example": "Hello! I understand you need to be transferred. Let me connect you." }, "backgroundSound": { - "description": "This is the background sound in the transfer assistant call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the transfer assistant call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -21115,13 +21807,17 @@ "example": 600 }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -22014,13 +22710,17 @@ "example": 600 }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -28999,13 +29699,17 @@ ] }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -37588,13 +38292,17 @@ "example": 600 }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -38539,13 +39247,17 @@ "example": 600 }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -39586,13 +40298,17 @@ "example": 600 }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -40615,13 +41331,17 @@ "example": 600 }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -41645,13 +42365,17 @@ "example": 600 }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -42568,13 +43292,17 @@ "example": 600 }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -43467,13 +44195,17 @@ "example": 600 }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -44370,13 +45102,17 @@ ] }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -45079,13 +45815,17 @@ ] }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -45770,13 +46510,17 @@ ] }, "backgroundSound": { - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nBundled sounds: 'office', 'white-noise', 'city', 'crowd' and 'farm'. GPT Live assistants don't play 'office'.\nYou can also provide a custom sound by providing a URL to an audio file.", "oneOf": [ { "type": "string", "enum": [ "off", - "office" + "office", + "white-noise", + "city", + "crowd", + "farm" ], "example": "office" }, @@ -70969,6 +71713,129 @@ "coverage" ] }, + "CallHealthDashboardTriageRequestDTO": { + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "resolve", + "dismiss", + "restore" + ] + }, + "expectedRowVersion": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "comment": { + "type": "string", + "description": "Trimmed; at most 2,048 UTF-16 code units. Empty comments are omitted from activity." + } + }, + "required": [ + "action", + "expectedRowVersion" + ] + }, + "CallHealthDashboardIssueReferenceDTO": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "minLength": 1 + }, + "status": { + "type": "string", + "enum": [ + "active", + "resolved", + "dismissed" + ] + }, + "rowVersion": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "id", + "name", + "status", + "rowVersion" + ] + }, + "CallHealthDashboardIssueActivityDTO": { + "type": "object", + "properties": { + "rowVersion": { + "type": "integer", + "description": "Existing issue version after this transition; also the per-issue activity identity.", + "minimum": 1, + "maximum": 9007199254740991 + }, + "action": { + "type": "string", + "description": "User resolve, dismiss or restore, or the system reopen written when a new match reopens a resolved issue.", + "enum": [ + "resolve", + "dismiss", + "restore", + "reopen" + ] + }, + "actorUserId": { + "type": "string", + "description": "Omitted for private-key actors and system entries; names/emails are not copied.", + "format": "uuid" + }, + "comment": { + "type": "string", + "description": "Optional team-visible comment; omitted after privacy scrubbing.", + "maxLength": 2048 + }, + "createdAt": { + "type": "string", + "description": "Database action time; ordering uses rowVersion rather than rounded timestamps.", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.(\\d{1,6}))?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$" + } + }, + "required": [ + "rowVersion", + "action", + "createdAt" + ] + }, + "CallHealthDashboardIssueActivityListResponseDTO": { + "type": "object", + "properties": { + "results": { + "description": "Newest issue versions first; this is shared team activity, not per-user feedback.", + "maxItems": 100, + "type": "array", + "items": { + "$ref": "#/components/schemas/CallHealthDashboardIssueActivityDTO" + } + }, + "nextCursor": { + "type": "string", + "description": "Signed continuation bound to the authenticated organization, issue and activity contract.", + "minLength": 1, + "maxLength": 2048, + "pattern": "^[A-Za-z0-9_-]+$" + } + }, + "required": [ + "results" + ] + }, "CreateOrgDTO": { "type": "object", "properties": { @@ -71105,7 +71972,8 @@ "description": "This is the status of the subscription. Past due subscriptions are subscriptions\nwith past due payments.", "enum": [ "active", - "frozen" + "frozen", + "blocked" ] }, "credits": { @@ -78610,6 +79478,264 @@ } } }, + "GuardrailFixedResponseAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "auto-response" + ] + }, + "mode": { + "type": "string", + "description": "Omitted legacy modes normalize to fixed when transformed.", + "default": "fixed", + "enum": [ + "fixed" + ] + }, + "text": { + "type": "string", + "description": "Replacement speech; it must pass its own guardrail evaluation.", + "pattern": "/\\S/" + } + }, + "required": [ + "type", + "text" + ] + }, + "GuardrailRedirectAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "auto-response" + ] + }, + "mode": { + "type": "string", + "enum": [ + "redirect" + ] + }, + "instructions": { + "type": "string", + "description": "Steering instructions for generating a replacement candidate.", + "pattern": "/\\S/" + } + }, + "required": [ + "type", + "mode", + "instructions" + ] + }, + "GuardrailEscalateAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "escalate" + ] + }, + "toolId": { + "type": "string", + "description": "Existing same-organization tool; attachment is checked at assignment. Tool edits/deletion can invalidate the action: activation must revalidate the current tool and arguments, and use failurePolicy on failure.", + "format": "uuid" + }, + "arguments": { + "type": "object", + "description": "Parameter names follow the normalized tool schema (SMS uses body/to).", + "additionalProperties": true + } + }, + "required": [ + "type", + "toolId", + "arguments" + ] + }, + "GuardrailAuthoring": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "always", + "never" + ] + }, + "behavior": { + "type": "string", + "pattern": "/\\S/" + }, + "condition": { + "type": "string", + "description": "Natural-language condition evaluated using the candidate and call history.", + "pattern": "/\\S/" + } + }, + "required": [ + "mode", + "behavior" + ] + }, + "GuardrailRule": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "orgId": { + "type": "string", + "format": "uuid" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string", + "pattern": "/\\S/" + }, + "authoring": { + "nullable": true, + "description": "Structured editor input. Supplied PATCH authoring replaces the complete object; advanced text writes clear it to null.", + "allOf": [ + { + "$ref": "#/components/schemas/GuardrailAuthoring" + } + ] + }, + "instructions": { + "type": "string", + "description": "Evaluated instructions, generated from authoring or supplied in advanced mode.", + "pattern": "/\\S/" + }, + "sensitivity": { + "type": "string", + "description": "Evaluation sensitivity; numeric cutoffs are internal and provisional.", + "enum": [ + "low", + "medium", + "aggressive" + ] + }, + "action": { + "description": "Supplied PATCH actions replace the complete variant.", + "oneOf": [ + { + "oneOf": [ + { + "$ref": "#/components/schemas/GuardrailFixedResponseAction" + }, + { + "$ref": "#/components/schemas/GuardrailRedirectAction" + } + ] + }, + { + "$ref": "#/components/schemas/GuardrailEscalateAction" + } + ] + } + }, + "required": [ + "id", + "orgId", + "createdAt", + "updatedAt", + "name", + "sensitivity", + "action" + ] + }, + "GuardrailRulesPage": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GuardrailRule" + } + }, + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + } + }, + "required": [ + "results", + "metadata" + ] + }, + "GuardrailPack": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "orgId": { + "type": "string", + "format": "uuid" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string", + "pattern": "/\\S/" + }, + "ruleIds": { + "type": "array", + "description": "Projected from membership rows; a supplied array replaces membership.", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "id", + "orgId", + "createdAt", + "updatedAt", + "name", + "ruleIds" + ] + }, + "GuardrailPacksPage": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GuardrailPack" + } + }, + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + } + }, + "required": [ + "results", + "metadata" + ] + }, "CartesiaPronunciationDictItem": { "type": "object", "properties": { From da61fa33804a9b9e10fe7c1a58c476fb376887df Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 10 Nov 2026 00:23:11 +0000 Subject: [PATCH 08/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 69 ++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 14 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 29e97bc77..b6d2b3c5e 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -13531,10 +13531,15 @@ "type": "string", "enum": [ "stt-rt-v4", - "stt-rt-v5" + "stt-rt-v5", + "stt-rt-v6" ], "description": "The Soniox model to use for transcription." }, + "agentTextInputEnabled": { + "type": "boolean", + "description": "Sends the assistant's speech to Soniox as context, which improves caller transcription and filters out echo. Only supported on stt-rt-v6. Defaults to on; set to false to disable." + }, "language": { "type": "string", "enum": [ @@ -13932,14 +13937,14 @@ }, "endpointSensitivity": { "type": "number", - "description": "How likely Soniox is to emit an endpoint (end the caller turn). Higher values make endpoints more likely for faster turn-taking; negative values make them less likely, which helps when callers pause mid-sentence (e.g. reading numbers group by group). Range: -1.0 to 1.0. Default: 0.3 (the platform low-latency voice profile; Soniox's own default is 0.0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4. Soniox recommends tuning endpointLatencyAdjustmentLevel first, and advises against negative sensitivity while the level is above 0 (the settings work against each other).", + "description": "How likely Soniox is to emit an endpoint (end the caller turn). Higher values make endpoints more likely for faster turn-taking; negative values make them less likely, which helps when callers pause mid-sentence (e.g. reading numbers group by group). Range: -1.0 to 1.0. Default: 0.3 (the platform low-latency voice profile; Soniox's own default is 0.0). Supported by stt-rt-v5 and stt-rt-v6; omitted from the Soniox request on explicit stt-rt-v4. Soniox recommends tuning endpointLatencyAdjustmentLevel first, and advises against negative sensitivity while the level is above 0 (the settings work against each other).", "minimum": -1, "maximum": 1, "example": 0.3 }, "endpointLatencyAdjustmentLevel": { "type": "number", - "description": "How aggressively Soniox reduces endpoint latency. 0 is Soniox's default semantic endpointing; 3 is the most aggressive. Higher levels return endpoints sooner but may split speech into more segments and slightly reduce accuracy. Integer. Range: 0-3. Default: 2 (the platform low-latency voice profile; Soniox's own default is 0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4.", + "description": "How aggressively Soniox reduces endpoint latency. 0 is Soniox's default semantic endpointing; 3 is the most aggressive. Higher levels return endpoints sooner but may split speech into more segments and slightly reduce accuracy. Integer. Range: 0-3. Default: 2 (the platform low-latency voice profile; Soniox's own default is 0). Supported by stt-rt-v5 and stt-rt-v6; omitted from the Soniox request on explicit stt-rt-v4.", "minimum": 0, "maximum": 3, "example": 2 @@ -16720,10 +16725,15 @@ "type": "string", "enum": [ "stt-rt-v4", - "stt-rt-v5" + "stt-rt-v5", + "stt-rt-v6" ], "description": "The Soniox model to use for transcription." }, + "agentTextInputEnabled": { + "type": "boolean", + "description": "Sends the assistant's speech to Soniox as context, which improves caller transcription and filters out echo. Only supported on stt-rt-v6. Defaults to on; set to false to disable." + }, "language": { "type": "string", "enum": [ @@ -17121,14 +17131,14 @@ }, "endpointSensitivity": { "type": "number", - "description": "How likely Soniox is to emit an endpoint (end the caller turn). Higher values make endpoints more likely for faster turn-taking; negative values make them less likely, which helps when callers pause mid-sentence (e.g. reading numbers group by group). Range: -1.0 to 1.0. Default: 0.3 (the platform low-latency voice profile; Soniox's own default is 0.0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4. Soniox recommends tuning endpointLatencyAdjustmentLevel first, and advises against negative sensitivity while the level is above 0 (the settings work against each other).", + "description": "How likely Soniox is to emit an endpoint (end the caller turn). Higher values make endpoints more likely for faster turn-taking; negative values make them less likely, which helps when callers pause mid-sentence (e.g. reading numbers group by group). Range: -1.0 to 1.0. Default: 0.3 (the platform low-latency voice profile; Soniox's own default is 0.0). Supported by stt-rt-v5 and stt-rt-v6; omitted from the Soniox request on explicit stt-rt-v4. Soniox recommends tuning endpointLatencyAdjustmentLevel first, and advises against negative sensitivity while the level is above 0 (the settings work against each other).", "minimum": -1, "maximum": 1, "example": 0.3 }, "endpointLatencyAdjustmentLevel": { "type": "number", - "description": "How aggressively Soniox reduces endpoint latency. 0 is Soniox's default semantic endpointing; 3 is the most aggressive. Higher levels return endpoints sooner but may split speech into more segments and slightly reduce accuracy. Integer. Range: 0-3. Default: 2 (the platform low-latency voice profile; Soniox's own default is 0). Supported by stt-rt-v5; omitted from the Soniox request on explicit stt-rt-v4.", + "description": "How aggressively Soniox reduces endpoint latency. 0 is Soniox's default semantic endpointing; 3 is the most aggressive. Higher levels return endpoints sooner but may split speech into more segments and slightly reduce accuracy. Integer. Range: 0-3. Default: 2 (the platform low-latency voice profile; Soniox's own default is 0). Supported by stt-rt-v5 and stt-rt-v6; omitted from the Soniox request on explicit stt-rt-v4.", "minimum": 0, "maximum": 3, "example": 2 @@ -24659,7 +24669,7 @@ ] }, "thinking": { - "description": "Optional configuration for Anthropic's thinking feature.\nOnly applicable for claude-3-7-sonnet-20250219 model.\nIf provided, maxTokens must be greater than thinking.budgetTokens.", + "description": "Optional configuration for Anthropic's thinking feature.\nOnly applicable for models that support a thinking budget.\nSet maxTokens greater than thinking.budgetTokens; the default cap is too small.", "allOf": [ { "$ref": "#/components/schemas/AnthropicThinkingConfig" @@ -24852,6 +24862,7 @@ "claude-sonnet-4-6", "claude-haiku-4-5-20251001", "claude-haiku-5-5", + "global.anthropic.claude-sonnet-4-6", "global.anthropic.claude-haiku-4-5-20251001-v1:0" ] }, @@ -24874,6 +24885,7 @@ "claude-sonnet-4-6", "claude-haiku-4-5-20251001", "claude-haiku-5-5", + "global.anthropic.claude-sonnet-4-6", "global.anthropic.claude-haiku-4-5-20251001-v1:0" ], "maxItems": 1, @@ -24898,6 +24910,7 @@ "claude-sonnet-4-6", "claude-haiku-4-5-20251001", "claude-haiku-5-5", + "global.anthropic.claude-sonnet-4-6", "global.anthropic.claude-haiku-4-5-20251001-v1:0" ] } @@ -24915,7 +24928,7 @@ ] }, "thinking": { - "description": "Optional configuration for Anthropic's thinking feature.\nOnly applicable for claude-3-7-sonnet-20250219 model.\nIf provided, maxTokens must be greater than thinking.budgetTokens.", + "description": "Optional configuration for Anthropic's thinking feature.\nOnly applicable for models that support a thinking budget.\nSet maxTokens greater than thinking.budgetTokens; the default cap is too small.", "allOf": [ { "$ref": "#/components/schemas/AnthropicThinkingConfig" @@ -28012,6 +28025,7 @@ "claude-sonnet-4-6", "claude-haiku-4-5-20251001", "claude-haiku-5-5", + "global.anthropic.claude-sonnet-4-6", "global.anthropic.claude-haiku-4-5-20251001-v1:0" ] }, @@ -48462,6 +48476,25 @@ "TurnLatency": { "type": "object", "properties": { + "unmeasured": { + "type": "array", + "description": "These are the latency components that were not measured on this turn. A listed component's latency field is not a real measurement: it usually reads 0, which here means \"not measured\", not 0ms, but a `transcriber` value measured from a speech start keeps its nonzero value. Drop listed components when aggregating. Omitted when every component was measured.\n\n- `transcriber`: no VAD speech marker for the turn, the sample was dropped as stale, the VAD missed this utterance (its newest marker was already used by an earlier turn), the transcript's time predates this utterance, or the VAD had still not flagged the end of speech when the reply started, including when the user kept talking after a tentative stop (the value is then measured from a speech start, or from the stop the user talked through).\n- `endpointing`: no user transcript was committed this turn (for example the first message, or a tool-result turn), or the transcript's time predates this utterance (carried over from an earlier one).\n- `model`: the model sent no output token this turn (for example a static message).\n- `voice`: no voice timing from model output this turn.", + "enum": [ + "transcriber", + "endpointing", + "model", + "voice" + ], + "items": { + "type": "string", + "enum": [ + "transcriber", + "endpointing", + "model", + "voice" + ] + } + }, "modelLatency": { "type": "number", "description": "This is the time in milliseconds from the start of the turn's model stage to the model's first output token.\nIt includes knowledge-base retrieval and request routing before the provider request. 0 when it was not measured on this turn." @@ -48472,7 +48505,7 @@ }, "transcriberLatency": { "type": "number", - "description": "This is the time in milliseconds from the user's last voice activity signal, normally the end of speech, to the transcriber returning the words of that speech.\n0 when it was not measured, including when the words arrived before that signal." + "description": "This is the time in milliseconds from the user's last voice activity signal, normally the end of speech, to the transcriber returning the words of that speech.\n0 both when it was not measured (listed in `unmeasured`) and when the words arrived before that signal." }, "endpointingLatency": { "type": "number", @@ -48480,7 +48513,7 @@ }, "turnLatency": { "type": "number", - "description": "This is the time in milliseconds from the user's last voice activity signal to Vapi starting to send the assistant's reply audio.\nIt is computed as `transcriberLatency` + `endpointingLatency` + the time from that decision to the reply starting, so when `transcriberLatency` is 0 because it was not measured, this total leaves that interval out. `modelLatency` and `voiceLatency` fall inside the last part, so the fields do not add up to this value." + "description": "This is the time in milliseconds from the user's last voice activity signal to Vapi starting to send the assistant's reply audio.\nIt is computed as `transcriberLatency` + `endpointingLatency` + the time from that decision to the reply starting, so it is not a real measurement either when `unmeasured` lists `transcriber`: the total then leaves that interval out (0) or counts it from a speech start. `modelLatency` and `voiceLatency` fall inside the last part, so the fields do not add up to this value." } } }, @@ -48529,6 +48562,10 @@ "numAssistantInterrupted": { "type": "number", "description": "This is the number of times the assistant was interrupted by the user during the call." + }, + "turnLatencyUnmeasuredTracked": { + "type": "boolean", + "description": "This is `true` when the call was recorded with `TurnLatency.unmeasured`, so a turn without that list had every component measured.\nAbsent on calls recorded before `unmeasured` existed, where a 0 latency may mean either 0ms or \"not measured\"." } } }, @@ -64744,11 +64781,13 @@ "properties": { "metric": { "type": "string", - "description": "This is the latency component to measure.\n- turn: total time from the end of user speech to the start of assistant speech\n- model: LLM time to first token\n- voice: TTS time to first audio", + "description": "This is the latency component to measure.\n- turn: total time from the end of user speech to the start of assistant speech\n- model: LLM time to first token\n- voice: TTS time to first audio\n- transcriber: time from the end of user speech to the transcript's words being known\n- endpointing: time from the transcript's words being known to deciding the user finished their turn\n\nTurns where a component was not measured are left out of that metric.", "enum": [ "turn", "model", - "voice" + "voice", + "transcriber", + "endpointing" ], "example": "turn" }, @@ -66023,7 +66062,9 @@ "enum": [ "turn", "model", - "voice" + "voice", + "transcriber", + "endpointing" ] }, "aggregation": { @@ -71595,7 +71636,7 @@ "currentGoalVersion": { "type": "string", "pattern": "^[1-9][0-9]*$", - "description": "Current revision of the requested goal for a visible call. Absent when that goal does not belong to the source assistant or the source is hidden. An absent evaluation does not imply queued or pending work." + "description": "Current revision of the requested goal for a visible call with a registered evaluation. Absent when the call has no registered evaluation, when that goal does not belong to the source assistant, or when the source is hidden. An absent evaluation does not imply queued or pending work." }, "currentEvaluation": { "$ref": "#/components/schemas/GoalEvaluationCurrentDTO" From 0d463ac5fd6d2b4bcf3fa55bfd9515cdd540897b Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 11 Nov 2026 00:24:32 +0000 Subject: [PATCH 09/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 132 +++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index b6d2b3c5e..64ef27146 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -13101,6 +13101,13 @@ "zu" ] }, + "keyterms": { + "description": "Words or phrases to bias the transcription towards, such as product names. Supported on scribe_v2 (up to 100 terms of 50 characters each) and scribe_v2_realtime (up to 50 terms of 20 characters each). Each term has at most 5 words and none of `< > { } [ ] \\`. Adds ElevenLabs' keyterm prompting rate to the transcriber cost.", + "type": "array", + "items": { + "type": "string" + } + }, "silenceThresholdSeconds": { "type": "number", "description": "This is the number of seconds of silence before VAD commits (0.3-3.0).", @@ -16332,6 +16339,13 @@ "zu" ] }, + "keyterms": { + "description": "Words or phrases to bias the transcription towards, such as product names. Supported on scribe_v2 (up to 100 terms of 50 characters each) and scribe_v2_realtime (up to 50 terms of 20 characters each). Each term has at most 5 words and none of `< > { } [ ] \\`. Adds ElevenLabs' keyterm prompting rate to the transcriber cost.", + "type": "array", + "items": { + "type": "string" + } + }, "silenceThresholdSeconds": { "type": "number", "description": "This is the number of seconds of silence before VAD commits (0.3-3.0).", @@ -44692,6 +44706,124 @@ } } }, + "AssistantGoalErrorDTO": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "minimum": 400, + "maximum": 599 + }, + "error": { + "type": "string" + }, + "message": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + } + }, + "required": [ + "statusCode", + "message" + ] + }, + "AssistantGoalCreateDTO": { + "type": "object", + "properties": { + "succeedsWhen": { + "type": "string", + "maxLength": 600, + "minLength": 1, + "description": "Success criteria. Trimmed before commit; blank or non-PostgreSQL-compatible text is rejected." + }, + "leaveOut": { + "type": "string", + "nullable": true, + "maxLength": 300, + "minLength": 1, + "description": "Optional trimmed exclusions. Omit or send null for no exclusions." + } + }, + "required": [ + "succeedsWhen" + ] + }, + "AssistantGoalDTO": { + "type": "object", + "properties": { + "orgId": { + "type": "string", + "format": "uuid" + }, + "assistantId": { + "type": "string", + "format": "uuid" + }, + "goalId": { + "type": "string", + "format": "uuid" + }, + "goalVersion": { + "type": "string", + "description": "Committed decimal bigint revision." + }, + "succeedsWhen": { + "type": "string" + }, + "leaveOut": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "description": "Committed goal-change time anchoring its fixed backfill window." + } + }, + "required": [ + "orgId", + "assistantId", + "goalId", + "goalVersion", + "succeedsWhen", + "createdAt" + ] + }, + "AssistantGoalSetDTO": { + "type": "object", + "properties": { + "expectedGoalVersion": { + "type": "string", + "pattern": "^[1-9][0-9]{0,18}$", + "description": "Observed current revision of this goal as a positive decimal bigint string." + }, + "succeedsWhen": { + "type": "string", + "maxLength": 600, + "minLength": 1, + "description": "Success criteria. Trimmed before commit; blank or non-PostgreSQL-compatible text is rejected." + }, + "leaveOut": { + "type": "string", + "nullable": true, + "maxLength": 300, + "minLength": 1, + "description": "Optional trimmed exclusions. Omit or send null for no exclusions." + } + }, + "required": [ + "expectedGoalVersion", + "succeedsWhen" + ] + }, "Squad": { "type": "object", "properties": { From 8c58a2065da792bd203b426c72a1d129a08ad625 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 12 Nov 2026 00:25:08 +0000 Subject: [PATCH 10/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 826 ++++++------------------------------- 1 file changed, 137 insertions(+), 689 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 64ef27146..f7d37789b 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -10497,694 +10497,6 @@ ] } }, - "/guardrail/rules": { - "get": { - "operationId": "GuardrailRulesController_list", - "summary": "List guardrail rules", - "parameters": [ - { - "name": "limit", - "required": false, - "in": "query", - "description": "Positive bounded list size, matching the shared library reader.", - "schema": { - "minimum": 1, - "maximum": 1000, - "default": 100, - "type": "number" - } - }, - { - "name": "search", - "required": false, - "in": "query", - "description": "Case-insensitive name or identifier fragment; omitted means all resources.", - "schema": { - "type": "string" - } - }, - { - "name": "packId", - "required": false, - "in": "query", - "description": "Limits rules to a pack in the authenticated organization without per-member requests.", - "schema": { - "format": "uuid", - "type": "string" - } - }, - { - "name": "createdAtGt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtGe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GuardrailRule" - } - } - } - } - } - }, - "tags": [ - "Guardrail Rules" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/guardrail/rules/paginated": { - "get": { - "operationId": "GuardrailRulesController_paginated", - "summary": "List paginated guardrail rules", - "parameters": [ - { - "name": "limit", - "required": false, - "in": "query", - "schema": { - "minimum": 1, - "maximum": 1000, - "default": 100, - "type": "number" - } - }, - { - "name": "search", - "required": false, - "in": "query", - "description": "Case-insensitive name or identifier fragment; omitted means all resources.", - "schema": { - "type": "string" - } - }, - { - "name": "packId", - "required": false, - "in": "query", - "description": "Limits rules to a pack in the authenticated organization without per-member requests.", - "schema": { - "format": "uuid", - "type": "string" - } - }, - { - "name": "sortBy", - "required": false, - "in": "query", - "description": "Only persisted creation order is supported, with the ID as a stable tie-breaker.", - "schema": { - "enum": [ - "createdAt" - ], - "type": "string" - } - }, - { - "name": "createdAtGt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtGe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "page", - "required": false, - "in": "query", - "description": "A safe integer page; the reader also validates the computed offset.", - "schema": { - "minimum": 1, - "maximum": 9007199254740991, - "type": "number" - } - }, - { - "name": "sortOrder", - "required": false, - "in": "query", - "description": "This is the sort order for pagination. Defaults to 'DESC'.", - "schema": { - "enum": [ - "ASC", - "DESC" - ], - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GuardrailRulesPage" - } - } - } - } - }, - "tags": [ - "Guardrail Rules" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/guardrail/rules/{id}": { - "get": { - "operationId": "GuardrailRulesController_find", - "summary": "Get guardrail rule", - "parameters": [ - { - "name": "id", - "required": true, - "in": "path", - "description": "The unique identifier for the resource.", - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GuardrailRule" - } - } - } - } - }, - "tags": [ - "Guardrail Rules" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/guardrail/packs": { - "get": { - "operationId": "GuardrailPacksController_list", - "summary": "List guardrail packs", - "parameters": [ - { - "name": "limit", - "required": false, - "in": "query", - "description": "Positive bounded list size, matching the shared library reader.", - "schema": { - "minimum": 1, - "maximum": 1000, - "default": 100, - "type": "number" - } - }, - { - "name": "search", - "required": false, - "in": "query", - "description": "Case-insensitive name or identifier fragment; omitted means all resources.", - "schema": { - "type": "string" - } - }, - { - "name": "createdAtGt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtGe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GuardrailPack" - } - } - } - } - } - }, - "tags": [ - "Guardrail Packs" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/guardrail/packs/paginated": { - "get": { - "operationId": "GuardrailPacksController_paginated", - "summary": "List paginated guardrail packs", - "parameters": [ - { - "name": "limit", - "required": false, - "in": "query", - "schema": { - "minimum": 1, - "maximum": 1000, - "default": 100, - "type": "number" - } - }, - { - "name": "search", - "required": false, - "in": "query", - "description": "Case-insensitive name or identifier fragment; omitted means all resources.", - "schema": { - "type": "string" - } - }, - { - "name": "sortBy", - "required": false, - "in": "query", - "description": "Only persisted creation order is supported, with the ID as a stable tie-breaker.", - "schema": { - "enum": [ - "createdAt" - ], - "type": "string" - } - }, - { - "name": "createdAtGt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtGe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "page", - "required": false, - "in": "query", - "description": "A safe integer page; the reader also validates the computed offset.", - "schema": { - "minimum": 1, - "maximum": 9007199254740991, - "type": "number" - } - }, - { - "name": "sortOrder", - "required": false, - "in": "query", - "description": "This is the sort order for pagination. Defaults to 'DESC'.", - "schema": { - "enum": [ - "ASC", - "DESC" - ], - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GuardrailPacksPage" - } - } - } - } - }, - "tags": [ - "Guardrail Packs" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/guardrail/packs/{id}": { - "get": { - "operationId": "GuardrailPacksController_find", - "summary": "Get guardrail pack", - "parameters": [ - { - "name": "id", - "required": true, - "in": "path", - "description": "The unique identifier for the resource.", - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GuardrailPack" - } - } - } - } - }, - "tags": [ - "Guardrail Packs" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, "/provider/{provider}/{resourceName}": { "post": { "operationId": "ProviderResourceController_createProviderResource", @@ -67558,6 +66870,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -67685,6 +66998,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -67811,6 +67125,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -68001,6 +67316,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -68079,6 +67395,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -68149,6 +67466,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -68279,6 +67597,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -68361,6 +67680,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -68435,6 +67755,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -69321,6 +68642,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -69403,6 +68725,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -69477,6 +68800,7 @@ "formulas": { "type": "array", "description": "Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight.\nThe formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html\nA formula is created by using the query names as the variable.\nThe formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{['query name']}} which will be substituted with the query result.\nFor example, if you have 2 queries, 'Was Booking Made' and 'Average Call Duration', you can create a formula like this:\n```\n{{['Query 1']}} / {{['Query 2']}} * 100\n```\n\n```\n({{[Query 1]}} * 10) + {{[Query 2]}}\n```\nThis will take the\n\nYou can also use the query names as the variable in the formula.", + "maxItems": 20, "items": { "$ref": "#/components/schemas/InsightFormula" } @@ -79850,6 +79174,28 @@ "metadata" ] }, + "CreateGuardrailPackDTO": { + "type": "object", + "properties": { + "name": { + "type": "string", + "pattern": "\\S" + }, + "ruleIds": { + "type": "array", + "description": "Projected from membership rows; a supplied array replaces membership.", + "maxItems": 100, + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "name", + "ruleIds" + ] + }, "GuardrailPack": { "type": "object", "properties": { @@ -79871,11 +79217,12 @@ }, "name": { "type": "string", - "pattern": "/\\S/" + "pattern": "\\S" }, "ruleIds": { "type": "array", "description": "Projected from membership rows; a supplied array replaces membership.", + "maxItems": 100, "items": { "type": "string", "format": "uuid" @@ -79891,6 +79238,107 @@ "ruleIds" ] }, + "GuardrailPackImpact": { + "type": "object", + "properties": { + "assistantIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "assistantIds" + ] + }, + "GuardrailPackSnapshot": { + "type": "object", + "properties": { + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string", + "pattern": "\\S" + }, + "ruleIds": { + "type": "array", + "description": "Projected from membership rows; a supplied array replaces membership.", + "maxItems": 100, + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "updatedAt", + "name", + "ruleIds" + ] + }, + "SaveGuardrailPackDTO": { + "type": "object", + "properties": { + "name": { + "type": "string", + "pattern": "\\S" + }, + "ruleIds": { + "type": "array", + "description": "Projected from membership rows; a supplied array replaces membership.", + "maxItems": 100, + "items": { + "type": "string", + "format": "uuid" + } + }, + "expected": { + "description": "The complete last-read snapshot prevents silently replacing another editor’s changes.", + "allOf": [ + { + "$ref": "#/components/schemas/GuardrailPackSnapshot" + } + ] + }, + "confirmedAssistantIds": { + "description": "Exact deduplicated impact acknowledged by the user; rechecked while the pack is locked.", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "expected" + ] + }, + "GuardrailPackConflictResponseDTO": { + "type": "object", + "properties": { + "error": { + "type": "string", + "description": "Machine-readable cause; clients branch on this, never on `message`.", + "enum": [ + "pack_changed", + "impact_changed", + "global_assignment" + ] + }, + "message": { + "type": "string", + "description": "Sentence-case copy safe to show the user." + } + }, + "required": [ + "error", + "message" + ] + }, "GuardrailPacksPage": { "type": "object", "properties": { From 5e8325ebca67e6cd6af6be983c00056a9f2a53b3 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 13 Nov 2026 00:24:59 +0000 Subject: [PATCH 11/11] Update API specifications with fern api update --- fern/apis/api/openapi.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index f7d37789b..99352098b 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -35745,16 +35745,17 @@ "type": "string", "description": "This is not returned in the API." }, - "authUsername": { - "type": "string" - }, "sipRegisterPlan": { - "description": "This can be used to configure if SIP register is required by the SIP trunk. If not provided, no SIP registration will be attempted.", + "nullable": true, + "description": "This can be used to configure if SIP register is required by the SIP trunk. On creation, omission disables registration. On update, omission preserves it; null disables it.", "allOf": [ { "$ref": "#/components/schemas/SipTrunkOutboundSipRegisterPlan" } ] + }, + "authUsername": { + "type": "string" } } }, @@ -38135,12 +38136,12 @@ }, "deprecationDate": { "type": "string", - "description": "Day the model became deprecated, `YYYY-MM-DD` in UTC.", + "description": "Registry effective deprecation day, `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.", + "description": "Registry effective retirement day, `YYYY-MM-DD` in UTC. An observation\nmay use an internal effective day; this field establishes neither an\nannounced vendor shutdown nor automatic replacement eligibility.", "example": "2026-03-26" }, "replacementStatus": {