@domu-ai/kiban-sdk 1.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1870 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.upsertAgentProviderLimitResponseSafetyMarginPercentMin = exports.upsertAgentProviderLimitResponseLimitMin = exports.UpsertAgentProviderLimitBody = exports.upsertAgentProviderLimitBodySafetyMarginPercentMax = exports.upsertAgentProviderLimitBodySafetyMarginPercentMin = exports.upsertAgentProviderLimitBodySafetyMarginPercentDefault = exports.upsertAgentProviderLimitBodyLimitMin = exports.upsertAgentProviderLimitBodyKeyRegExp = exports.ListAgentProviderLimitsResponse = exports.ListAgentProviderLimitsResponseItem = exports.listAgentProviderLimitsResponseAvailableMin = exports.listAgentProviderLimitsResponseCurrentUsageMin = exports.listAgentProviderLimitsResponseSafetyMarginPercentMax = exports.listAgentProviderLimitsResponseSafetyMarginPercentMin = exports.listAgentProviderLimitsResponseLimitMin = exports.VapiInboundResponse = exports.VapiInboundBody = exports.VapiInboundQueryParams = exports.SystemCheckResponse = exports.InvalidateCacheResponse = exports.InvalidateCacheQueryParams = exports.invalidateCacheQueryProviderMax = exports.GetConfigResponse = exports.GetConfigQueryParams = exports.GetConfigParams = exports.getConfigPathProviderMax = exports.UpdateConfigResponse = exports.UpdateConfigBody = exports.updateConfigBodyNameMax = exports.UpdateConfigQueryParams = exports.updateConfigQueryProviderMax = exports.CreateConfigBody = exports.createConfigBodyNameMax = exports.createConfigBodyProviderMax = exports.CreateConfigQueryParams = exports.ListConfigsResponse = exports.ListConfigsResponseItem = exports.ListConfigsQueryParams = exports.UpdateResponse = exports.UpdateBody = exports.UpdateParams = exports.RemoveBody = exports.RemoveQueryParams = exports.CreateBody = exports.createBodyIsEnabledDefault = exports.createBodyProviderMax = exports.CreateQueryParams = exports.ListResponse = exports.ListResponseItem = exports.ListQueryParams = void 0;
37
+ exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = exports.receiveKanbanWebhookBodyThreeNumDroppedDefault = exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageSttAudioDurationDefault = exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = exports.receiveKanbanWebhookBodyTwoNumDroppedDefault = exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageSttAudioDurationDefault = exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = exports.receiveKanbanWebhookBodyOneNumDroppedDefault = exports.ReceiveWebhookResponse = exports.ReceiveWebhookBody = exports.GetTargetResponse = exports.GetTargetResponseItem = exports.GetTargetQueryParams = exports.getTargetQueryIdentifierTypeDefault = exports.GetTargetParams = exports.UploadTargetsBody = exports.JambonzHealthResponse = exports.JambonzWebhookResponse = exports.JambonzWebhookBody = exports.StartCallBody = exports.startCallBodyPriorityDefault = exports.ProcessCallbackResponse = exports.ProcessCallbackBody = exports.ProcessCallbackQueryParams = exports.InitiateTransferResponse = exports.InitiateTransferBody = exports.initiateTransferBodyPaymentMethodDefault = exports.GetPaymentTwimlQueryParams = exports.getPaymentTwimlQueryAmountRegExp = exports.getPaymentTwimlQueryCallProviderDefault = exports.UpsertAgentProviderLimitResponse = exports.upsertAgentProviderLimitResponseSafetyMarginPercentMax = void 0;
38
+ exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = exports.receiveKanbanWebhookBodyNineNumDroppedDefault = exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageSttAudioDurationDefault = exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = exports.receiveKanbanWebhookBodyEightNumDroppedDefault = exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageSttAudioDurationDefault = exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = exports.receiveKanbanWebhookBodySevenNumDroppedDefault = exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageSttAudioDurationDefault = exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = exports.receiveKanbanWebhookBodySixNumDroppedDefault = exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageSttAudioDurationDefault = exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = exports.receiveKanbanWebhookBodyFiveNumDroppedDefault = exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageSttAudioDurationDefault = exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = exports.receiveKanbanWebhookBodyFourNumDroppedDefault = exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageSttAudioDurationDefault = void 0;
39
+ exports.MeResponse = exports.ReceiveKanbanWebhookResponse = exports.ReceiveKanbanWebhookBody = exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageSttAudioDurationDefault = exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = void 0;
40
+ /**
41
+ * Generated by orval v8.2.0 🍺
42
+ * Do not edit manually.
43
+ * Kiban Internal API
44
+ * Internal endpoints for system monitoring and administrative operations. Authentication required.
45
+ * OpenAPI spec version: 1.0.0
46
+ */
47
+ const zod = __importStar(require("zod"));
48
+ /**
49
+ * Returns all configured actions for a campaign, including disabled ones.
50
+ * @summary List campaign actions
51
+ */
52
+ exports.ListQueryParams = zod.object({
53
+ "campaignId": zod.string().min(1)
54
+ });
55
+ exports.ListResponseItem = zod.object({
56
+ "id": zod.string(),
57
+ "campaignId": zod.string(),
58
+ "actionType": zod.string(),
59
+ "provider": zod.string(),
60
+ "configId": zod.string().nullable(),
61
+ "isEnabled": zod.boolean(),
62
+ "createdAt": zod.string(),
63
+ "updatedAt": zod.string()
64
+ });
65
+ exports.ListResponse = zod.array(exports.ListResponseItem);
66
+ /**
67
+ * Registers a new action-provider mapping for a campaign. Validates the provider supports the action type and has a vendor config for the campaign. Auto-resolves configId. Returns 409 if the combination already exists.
68
+ * @summary Add action to campaign
69
+ */
70
+ exports.CreateQueryParams = zod.object({
71
+ "campaignId": zod.string().min(1)
72
+ });
73
+ exports.createBodyProviderMax = 50;
74
+ exports.createBodyIsEnabledDefault = true;
75
+ exports.CreateBody = zod.object({
76
+ "actionType": zod.enum(['interaction.start', 'interaction.end', 'contact.get', 'contact.update', 'payment.notify', 'payment.delegate']).describe('Action type to register'),
77
+ "provider": zod.string().min(1).max(exports.createBodyProviderMax).describe('Provider name (e.g. \'sst\', \'livevox\', \'nubank\')'),
78
+ "isEnabled": zod.boolean().default(exports.createBodyIsEnabledDefault).describe('Whether the action is enabled')
79
+ });
80
+ /**
81
+ * Deletes a campaign action by ID. Returns 404 if not found.
82
+ * @summary Remove action from campaign
83
+ */
84
+ exports.RemoveQueryParams = zod.object({
85
+ "campaignId": zod.string().min(1),
86
+ "actionId": zod.string().min(1)
87
+ });
88
+ exports.RemoveBody = zod.object({});
89
+ /**
90
+ * Updates a call record with the provided data. If provider is specified, fetches external contact data first.
91
+ * @summary Update a call record
92
+ */
93
+ exports.UpdateParams = zod.object({
94
+ "id": zod.string()
95
+ });
96
+ exports.UpdateBody = zod.unknown().nullable();
97
+ exports.UpdateResponse = zod.unknown().nullable();
98
+ /**
99
+ * Returns all active integration vendor configs for a campaign in the current environment.
100
+ * @summary List vendor configs for a campaign
101
+ */
102
+ exports.ListConfigsQueryParams = zod.object({
103
+ "campaignId": zod.string().min(1)
104
+ });
105
+ exports.ListConfigsResponseItem = zod.object({
106
+ "id": zod.string(),
107
+ "provider": zod.string(),
108
+ "name": zod.string(),
109
+ "campaignId": zod.string(),
110
+ "environment": zod.enum(['staging', 'production']),
111
+ "isActive": zod.boolean(),
112
+ "createdAt": zod.string(),
113
+ "updatedAt": zod.string()
114
+ });
115
+ exports.ListConfigsResponse = zod.array(exports.ListConfigsResponseItem);
116
+ /**
117
+ * Creates a new integration vendor config. The config object is encrypted before storage. Requires valid M2M Bearer token in Authorization header.
118
+ * @summary Create integration config
119
+ */
120
+ exports.CreateConfigQueryParams = zod.object({
121
+ "campaignId": zod.string().min(1)
122
+ });
123
+ exports.createConfigBodyProviderMax = 50;
124
+ exports.createConfigBodyNameMax = 100;
125
+ exports.CreateConfigBody = zod.object({
126
+ "provider": zod.string().min(1).max(exports.createConfigBodyProviderMax),
127
+ "name": zod.string().min(1).max(exports.createConfigBodyNameMax),
128
+ "environment": zod.enum(['staging', 'production']),
129
+ "config": zod.record(zod.string(), zod.unknown())
130
+ });
131
+ /**
132
+ * Updates an existing integration config by campaignId and provider. Supports partial updates for name, config, and isActive. Config is re-encrypted on update. Automatically invalidates Redis cache.
133
+ * @summary Update integration config
134
+ */
135
+ exports.updateConfigQueryProviderMax = 50;
136
+ exports.UpdateConfigQueryParams = zod.object({
137
+ "campaignId": zod.string().min(1),
138
+ "provider": zod.string().min(1).max(exports.updateConfigQueryProviderMax)
139
+ });
140
+ exports.updateConfigBodyNameMax = 100;
141
+ exports.UpdateConfigBody = zod.object({
142
+ "name": zod.string().min(1).max(exports.updateConfigBodyNameMax).optional(),
143
+ "config": zod.record(zod.string(), zod.unknown()).optional(),
144
+ "isActive": zod.boolean().optional()
145
+ });
146
+ exports.UpdateConfigResponse = zod.object({
147
+ "id": zod.string(),
148
+ "provider": zod.string(),
149
+ "name": zod.string(),
150
+ "campaignId": zod.string(),
151
+ "environment": zod.enum(['staging', 'production']),
152
+ "isActive": zod.boolean(),
153
+ "createdAt": zod.string(),
154
+ "updatedAt": zod.string()
155
+ });
156
+ /**
157
+ * Retrieves decrypted integration config for a campaign and provider. Requires valid M2M Bearer token in Authorization header.
158
+ * @summary Get integration config
159
+ */
160
+ exports.getConfigPathProviderMax = 50;
161
+ exports.GetConfigParams = zod.object({
162
+ "provider": zod.string().min(1).max(exports.getConfigPathProviderMax)
163
+ });
164
+ exports.GetConfigQueryParams = zod.object({
165
+ "campaignId": zod.string().min(1)
166
+ });
167
+ exports.GetConfigResponse = zod.object({
168
+ "name": zod.string(),
169
+ "config": zod.record(zod.string(), zod.unknown())
170
+ });
171
+ /**
172
+ * Clears the Redis cache for a specific campaign/provider config. Requires valid M2M Bearer token.
173
+ * @summary Invalidate config cache
174
+ */
175
+ exports.invalidateCacheQueryProviderMax = 50;
176
+ exports.InvalidateCacheQueryParams = zod.object({
177
+ "campaignId": zod.string().min(1),
178
+ "provider": zod.string().min(1).max(exports.invalidateCacheQueryProviderMax)
179
+ });
180
+ exports.InvalidateCacheResponse = zod.object({
181
+ "message": zod.string()
182
+ });
183
+ /**
184
+ * Performs active health checks on critical system dependencies including memory utilization and disk space. Returns detailed metrics for monitoring dashboards, alerting systems, and operational troubleshooting. Intended for internal use only.
185
+ * @summary Comprehensive system health and diagnostics
186
+ */
187
+ exports.SystemCheckResponse = zod.object({
188
+ "status": zod.enum(['healthy', 'degraded', 'unhealthy']).describe('Overall system health: healthy (all checks pass), degraded (non-critical issues), unhealthy (critical failures)'),
189
+ "uptime": zod.number().describe('Server uptime in seconds since last restart'),
190
+ "timestamp": zod.string().describe('ISO 8601 UTC timestamp of health check execution'),
191
+ "version": zod.string().describe('Current API version'),
192
+ "environment": zod.enum(['development', 'staging', 'production', 'test']).describe('Deployment environment'),
193
+ "checks": zod.object({
194
+ "memory": zod.object({
195
+ "status": zod.boolean().describe('Memory availability - false when utilization exceeds 90%'),
196
+ "usedMb": zod.number().describe('Current heap memory usage in megabytes'),
197
+ "totalMb": zod.number().describe('Total allocated heap memory in megabytes'),
198
+ "percentageUsed": zod.number().describe('Memory utilization percentage (0-100)')
199
+ }),
200
+ "disk": zod.object({
201
+ "status": zod.boolean().describe('Disk space availability - false when free space below 10%'),
202
+ "freeMb": zod.number().describe('Available disk space in megabytes'),
203
+ "percentageFree": zod.number().describe('Free disk space percentage (0-100)')
204
+ })
205
+ })
206
+ });
207
+ /**
208
+ * Receives assistant-request webhooks from VAPI for inbound calls. Returns the assistant configuration to use for the call based on the phone number configuration, campaign, and agent settings.
209
+ * @summary Handle VAPI inbound call webhook
210
+ */
211
+ exports.VapiInboundQueryParams = zod.object({
212
+ "source_call_id": zod.string().optional()
213
+ });
214
+ exports.VapiInboundBody = zod.object({
215
+ "message": zod.object({
216
+ "type": zod.string()
217
+ })
218
+ });
219
+ exports.VapiInboundResponse = zod.object({
220
+ "assistant": zod.object({
221
+ "name": zod.string().optional(),
222
+ "firstMessage": zod.string().optional(),
223
+ "model": zod.object({
224
+ "provider": zod.string(),
225
+ "model": zod.string(),
226
+ "messages": zod.array(zod.object({
227
+ "role": zod.enum(['system', 'user', 'assistant']),
228
+ "content": zod.string()
229
+ }))
230
+ }),
231
+ "voice": zod.object({
232
+ "provider": zod.string(),
233
+ "voiceId": zod.string()
234
+ }).optional(),
235
+ "tools": zod.array(zod.unknown().nullable()).optional(),
236
+ "endCallFunctionEnabled": zod.boolean().optional(),
237
+ "endCallMessage": zod.string().optional(),
238
+ "metadata": zod.object({
239
+ "targetId": zod.string(),
240
+ "campaignId": zod.string(),
241
+ "agentId": zod.string()
242
+ }).optional()
243
+ }).optional()
244
+ });
245
+ /**
246
+ * Returns all configured agent provider limits with their current usage from Redis. Shows how many concurrent calls are active for each provider and how many slots are available. Returns 503 if Redis or database is unavailable, 500 for unexpected errors.
247
+ * @summary List all agent provider limits with current usage
248
+ */
249
+ exports.listAgentProviderLimitsResponseLimitMin = 0;
250
+ exports.listAgentProviderLimitsResponseSafetyMarginPercentMin = 0;
251
+ exports.listAgentProviderLimitsResponseSafetyMarginPercentMax = 100;
252
+ exports.listAgentProviderLimitsResponseCurrentUsageMin = 0;
253
+ exports.listAgentProviderLimitsResponseAvailableMin = 0;
254
+ exports.ListAgentProviderLimitsResponseItem = zod.object({
255
+ "id": zod.string().uuid(),
256
+ "key": zod.string(),
257
+ "limit": zod.number().min(exports.listAgentProviderLimitsResponseLimitMin),
258
+ "safetyMarginPercent": zod.number().min(exports.listAgentProviderLimitsResponseSafetyMarginPercentMin).max(exports.listAgentProviderLimitsResponseSafetyMarginPercentMax),
259
+ "effectiveLimit": zod.number().nullable(),
260
+ "currentUsage": zod.number().min(exports.listAgentProviderLimitsResponseCurrentUsageMin).describe('Current number of active calls for this provider'),
261
+ "available": zod.number().min(exports.listAgentProviderLimitsResponseAvailableMin).describe('Available slots (effectiveLimit - currentUsage)'),
262
+ "createdAt": zod.string(),
263
+ "updatedAt": zod.string()
264
+ });
265
+ exports.ListAgentProviderLimitsResponse = zod.array(exports.ListAgentProviderLimitsResponseItem);
266
+ /**
267
+ * Creates a new agent provider limit or updates an existing one if the key already exists. Returns 201 Created for new resources, 200 OK for updates. The effective limit is automatically calculated based on the limit and safety margin percentage.
268
+ * @summary Create or update agent provider limit
269
+ */
270
+ exports.upsertAgentProviderLimitBodyKeyRegExp = new RegExp('^[^\\s]\*$');
271
+ exports.upsertAgentProviderLimitBodyLimitMin = 0;
272
+ exports.upsertAgentProviderLimitBodySafetyMarginPercentDefault = 0;
273
+ exports.upsertAgentProviderLimitBodySafetyMarginPercentMin = 0;
274
+ exports.upsertAgentProviderLimitBodySafetyMarginPercentMax = 100;
275
+ exports.UpsertAgentProviderLimitBody = zod.object({
276
+ "key": zod.string().min(1).regex(exports.upsertAgentProviderLimitBodyKeyRegExp).describe('Unique identifier for the agent provider (e.g., \'vapi\', \'livekit\'). Must be Redis key compliant (no whitespace).'),
277
+ "limit": zod.number().min(exports.upsertAgentProviderLimitBodyLimitMin).describe('Maximum concurrent calls allowed'),
278
+ "safetyMarginPercent": zod.number().min(exports.upsertAgentProviderLimitBodySafetyMarginPercentMin).max(exports.upsertAgentProviderLimitBodySafetyMarginPercentMax).default(exports.upsertAgentProviderLimitBodySafetyMarginPercentDefault).describe('Safety margin percentage (0-100)')
279
+ });
280
+ exports.upsertAgentProviderLimitResponseLimitMin = 0;
281
+ exports.upsertAgentProviderLimitResponseSafetyMarginPercentMin = 0;
282
+ exports.upsertAgentProviderLimitResponseSafetyMarginPercentMax = 100;
283
+ exports.UpsertAgentProviderLimitResponse = zod.object({
284
+ "id": zod.string().uuid(),
285
+ "key": zod.string(),
286
+ "limit": zod.number().min(exports.upsertAgentProviderLimitResponseLimitMin),
287
+ "safetyMarginPercent": zod.number().min(exports.upsertAgentProviderLimitResponseSafetyMarginPercentMin).max(exports.upsertAgentProviderLimitResponseSafetyMarginPercentMax),
288
+ "effectiveLimit": zod.number().nullable(),
289
+ "createdAt": zod.string(),
290
+ "updatedAt": zod.string()
291
+ });
292
+ /**
293
+ * Returns TwiML for Twilio Pay. Called by Twilio when redirected from VAPI payment flow. Response Content-Type is text/xml.
294
+ * @summary Generate payment TwiML
295
+ */
296
+ exports.getPaymentTwimlQueryCallProviderDefault = `vapi`;
297
+ exports.getPaymentTwimlQueryAmountRegExp = new RegExp('^\\d+(\\.\\d{1,2})?$');
298
+ exports.GetPaymentTwimlQueryParams = zod.object({
299
+ "campaignId": zod.string().describe('Campaign ID for callback correlation'),
300
+ "callId": zod.string().describe('Call ID for callback correlation'),
301
+ "callProvider": zod.string().default(exports.getPaymentTwimlQueryCallProviderDefault).describe('Call provider (e.g., \"vapi\")'),
302
+ "amount": zod.string().regex(exports.getPaymentTwimlQueryAmountRegExp).describe('Payment amount (e.g., \"208.51\")'),
303
+ "paymentDate": zod.string().describe('Payment date in YYYY-MM-DD format'),
304
+ "isToday": zod.enum(['true', 'false']).describe('Whether payment is for today (\"true\" or \"false\")')
305
+ });
306
+ /**
307
+ * Generates TwiML for IVR payment capture and updates the active Twilio call to begin the payment flow.
308
+ * @summary Initiate payment transfer on active call
309
+ */
310
+ exports.initiateTransferBodyPaymentMethodDefault = `credit-card`;
311
+ exports.InitiateTransferBody = zod.object({
312
+ "campaignId": zod.string(),
313
+ "amount": zod.number(),
314
+ "callId": zod.string(),
315
+ "callerPhone": zod.string(),
316
+ "callerName": zod.string().optional(),
317
+ "paymentMethod": zod.enum(['credit-card', 'ach', 'saved-payment-method']).default(exports.initiateTransferBodyPaymentMethodDefault),
318
+ "paymentMethodId": zod.string().optional(),
319
+ "paymentDate": zod.string().optional(),
320
+ "paymentPlanFrequency": zod.enum(['daily', 'weekly', 'biweekly', 'monthly']).optional(),
321
+ "paymentPlanType": zod.enum(['recurring', 'promiseToPay']).optional(),
322
+ "numberOfPayments": zod.number().min(1).optional()
323
+ });
324
+ exports.InitiateTransferResponse = zod.object({
325
+ "twiml": zod.string(),
326
+ "redisSessionId": zod.string(),
327
+ "paymentProvider": zod.string(),
328
+ "paymentConnector": zod.string()
329
+ });
330
+ /**
331
+ * Receives callback from Twilio Pay after payment attempt. Returns TwiML response with voice prompts based on payment result.
332
+ * @summary Process Twilio Pay callback
333
+ */
334
+ exports.ProcessCallbackQueryParams = zod.object({
335
+ "sessionId": zod.string()
336
+ });
337
+ exports.ProcessCallbackBody = zod.object({
338
+ "CallSid": zod.string(),
339
+ "AccountSid": zod.string(),
340
+ "Result": zod.enum(['success', 'payment-connector-error', 'caller-interrupted-before-completion', 'caller-hung-up-before-completion', 'caller-interrupted-with-star', 'validation-error', 'too-many-failed-attempts', 'too-many-attempts', 'too-many-attempts-exceeded', 'card-declined', 'input-validation-failed', 'expired-card', 'input-timeout', 'internal-error']).optional(),
341
+ "PaymentMethod": zod.string().optional(),
342
+ "PaymentConfirmationCode": zod.string().optional(),
343
+ "PaymentToken": zod.string().optional(),
344
+ "ProfileId": zod.string().optional(),
345
+ "PaymentError": zod.string().optional(),
346
+ "PayErrorCode": zod.string().optional(),
347
+ "ErrorCode": zod.string().optional(),
348
+ "ErrorMessage": zod.string().optional(),
349
+ "Digits": zod.string().optional(),
350
+ "PaymentCardNumber": zod.string().optional(),
351
+ "PaymentCardType": zod.string().optional(),
352
+ "PaymentCardExpirationDate": zod.string().optional(),
353
+ "SecurityCode": zod.string().optional(),
354
+ "PaymentCardPostalCode": zod.string().optional(),
355
+ "BankAccountNumber": zod.string().optional(),
356
+ "BankRoutingNumber": zod.string().optional(),
357
+ "BankAccountType": zod.string().optional()
358
+ });
359
+ exports.ProcessCallbackResponse = zod.string().describe('TwiML XML response with voice prompts for the caller');
360
+ /**
361
+ * Adds a new call job to the queue for processing. The call will be initiated asynchronously by the worker. Returns immediately with job ID for tracking.
362
+ * @summary Queue a new outbound call job
363
+ */
364
+ exports.startCallBodyPriorityDefault = `standard`;
365
+ exports.StartCallBody = zod.object({
366
+ "targetId": zod.string().min(1).describe('ID of the target to call'),
367
+ "attempt": zod.number().min(1).describe('Attempt number for calling the target'),
368
+ "slug": zod.string().min(1).describe('Slug for the agent'),
369
+ "campaignId": zod.string().min(1).describe('ID of the campaign'),
370
+ "label": zod.string().min(1).describe('Label for the call'),
371
+ "priority": zod.enum(['standard']).default(exports.startCallBodyPriorityDefault)
372
+ });
373
+ /**
374
+ * Unified webhook for Jambonz calling and call status events. Handles both inbound and outbound calls (differentiated by direction field). When callStatus is 'trying', performs header normalization and returns dial verbs. For other statuses (in-progress, completed, failed), logs the event and returns 200 OK.
375
+ * @summary Handle Jambonz call webhook
376
+ */
377
+ exports.JambonzWebhookBody = zod.object({
378
+ "call_sid": zod.string(),
379
+ "call_status": zod.enum(['trying', 'ringing', 'early-media', 'in-progress', 'completed', 'failed', 'no-answer', 'busy']),
380
+ "direction": zod.enum(['inbound', 'outbound']).optional(),
381
+ "call_id": zod.string().optional(),
382
+ "account_sid": zod.string().optional(),
383
+ "from": zod.string().optional(),
384
+ "to": zod.string().optional(),
385
+ "caller_name": zod.string().optional(),
386
+ "sip_status": zod.number().optional(),
387
+ "sip_reason": zod.string().optional(),
388
+ "originating_sip_trunk_name": zod.string().optional(),
389
+ "originating_sip_ip": zod.string().optional(),
390
+ "application_sid": zod.string().optional(),
391
+ "local_sip_address": zod.string().optional(),
392
+ "service_provider_sid": zod.string().optional(),
393
+ "sbc_callid": zod.string().optional(),
394
+ "trace_id": zod.string().optional(),
395
+ "sip": zod.object({
396
+ "headers": zod.record(zod.string(), zod.string()).describe('SIP headers'),
397
+ "body": zod.string().optional(),
398
+ "method": zod.string().optional(),
399
+ "version": zod.string().optional(),
400
+ "uri": zod.string().optional(),
401
+ "raw": zod.string().optional()
402
+ }).optional()
403
+ });
404
+ exports.JambonzWebhookResponse = zod.union([zod.array(zod.union([zod.object({
405
+ "verb": zod.enum(['dial']),
406
+ "callerId": zod.string().optional(),
407
+ "answerOnBridge": zod.boolean().optional(),
408
+ "target": zod.array(zod.object({
409
+ "type": zod.enum(['sip', 'phone']),
410
+ "sipUri": zod.string().optional(),
411
+ "number": zod.string().optional(),
412
+ "trunk": zod.string().optional()
413
+ })),
414
+ "headers": zod.record(zod.string(), zod.string()).optional()
415
+ }), zod.object({
416
+ "verb": zod.enum(['sip:decline']),
417
+ "status": zod.number(),
418
+ "reason": zod.string().optional()
419
+ })])), zod.object({})]);
420
+ /**
421
+ * Verifies active SIP routes exist in the database for call routing.
422
+ * @summary SIP webhook health check
423
+ */
424
+ exports.JambonzHealthResponse = zod.object({
425
+ "status": zod.enum(['ok']),
426
+ "active_routes": zod.literal(true)
427
+ });
428
+ /**
429
+ * Queues a background job to process a CSV file containing targets. The job will fetch the file from S3, parse each row, and upsert targets into the database. Returns a job ID.
430
+ * @summary Queue a target upload job
431
+ */
432
+ exports.UploadTargetsBody = zod.object({
433
+ "campaignId": zod.string().min(1).describe('ID of the campaign'),
434
+ "fileKey": zod.string().min(1).describe('S3 key of the uploaded CSV file'),
435
+ "bucket": zod.string().min(1).optional().describe('S3 bucket name (defaults to configured bucket)')
436
+ });
437
+ /**
438
+ * Looks up a target by phone number or external ID (account number). Defaults to phone lookup for backward compatibility.
439
+ * @summary Get target by identifier
440
+ */
441
+ exports.GetTargetParams = zod.object({
442
+ "identifier": zod.string().describe('Identifier value (phone number or account number)')
443
+ });
444
+ exports.getTargetQueryIdentifierTypeDefault = `phone`;
445
+ exports.GetTargetQueryParams = zod.object({
446
+ "identifierType": zod.enum(['phone', 'external_id']).default(exports.getTargetQueryIdentifierTypeDefault).describe('Type of identifier: \'phone\' for phone number, \'external_id\' for account number'),
447
+ "fields": zod.string().describe('Comma-separated column names to retrieve from targets table'),
448
+ "campaignId": zod.string().describe('Campaign ID to filter target lookup')
449
+ });
450
+ exports.GetTargetResponseItem = zod.record(zod.string(), zod.unknown().nullable());
451
+ exports.GetTargetResponse = zod.array(exports.GetTargetResponseItem);
452
+ /**
453
+ * Endpoint for receiving webhook events from Vapi. Handles status-update and end-of-call-report events. Other event types are acknowledged but not processed. Protected by HMAC-SHA256 signature verification.
454
+ * @summary Receive Vapi webhook events
455
+ */
456
+ exports.ReceiveWebhookBody = zod.object({
457
+ "message": zod.union([zod.object({
458
+ "type": zod.enum(['status-update']),
459
+ "status": zod.enum(['queued', 'ringing', 'in-progress', 'forwarding', 'ended']),
460
+ "endedReason": zod.string().optional(),
461
+ "call": zod.object({
462
+ "id": zod.string().min(1),
463
+ "orgId": zod.string().min(1).optional(),
464
+ "createdAt": zod.string().datetime({}).optional(),
465
+ "updatedAt": zod.string().datetime({}).optional(),
466
+ "type": zod.enum(['inboundPhoneCall', 'outboundPhoneCall', 'webCall']).optional(),
467
+ "status": zod.enum(['queued', 'ringing', 'in-progress', 'forwarding', 'ended']).optional(),
468
+ "phoneCallProvider": zod.string().optional(),
469
+ "phoneCallProviderId": zod.string().optional(),
470
+ "phoneNumberId": zod.string().min(1).optional(),
471
+ "assistantId": zod.string().nullish(),
472
+ "assistant": zod.unknown().nullish(),
473
+ "squadId": zod.string().nullish(),
474
+ "squad": zod.unknown().nullish(),
475
+ "phoneCallTransport": zod.string().optional(),
476
+ "startedAt": zod.string().datetime({}).optional(),
477
+ "endedAt": zod.string().datetime({}).optional(),
478
+ "endedReason": zod.string().optional(),
479
+ "cost": zod.number().optional(),
480
+ "costBreakdown": zod.object({
481
+ "vapi": zod.number().optional(),
482
+ "transport": zod.number().optional(),
483
+ "stt": zod.number().optional(),
484
+ "llm": zod.number().optional(),
485
+ "tts": zod.number().optional(),
486
+ "total": zod.number().optional(),
487
+ "llmPromptTokens": zod.number().optional(),
488
+ "llmCompletionTokens": zod.number().optional(),
489
+ "ttsCharacters": zod.number().optional()
490
+ }).optional(),
491
+ "messages": zod.array(zod.object({
492
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
493
+ "message": zod.string().optional(),
494
+ "name": zod.string().optional(),
495
+ "function_call": zod.unknown().nullish(),
496
+ "tool_calls": zod.array(zod.object({
497
+ "id": zod.string().optional(),
498
+ "type": zod.enum(['function']).optional(),
499
+ "function": zod.object({
500
+ "name": zod.string(),
501
+ "arguments": zod.string().optional()
502
+ }).optional(),
503
+ "result": zod.string().optional()
504
+ })).optional(),
505
+ "time": zod.number().optional(),
506
+ "endTime": zod.number().optional(),
507
+ "secondsFromStart": zod.number().optional()
508
+ })).optional(),
509
+ "transcript": zod.string().optional(),
510
+ "recordingUrl": zod.string().url().optional(),
511
+ "stereoRecordingUrl": zod.string().url().optional(),
512
+ "artifact": zod.object({
513
+ "recording": zod.object({
514
+ "recordingUrl": zod.string().url().optional(),
515
+ "stereoRecordingUrl": zod.string().url().optional()
516
+ }).optional(),
517
+ "transcript": zod.string().optional(),
518
+ "messages": zod.array(zod.object({
519
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
520
+ "message": zod.string().optional(),
521
+ "name": zod.string().optional(),
522
+ "function_call": zod.unknown().nullish(),
523
+ "tool_calls": zod.array(zod.object({
524
+ "id": zod.string().optional(),
525
+ "type": zod.enum(['function']).optional(),
526
+ "function": zod.object({
527
+ "name": zod.string(),
528
+ "arguments": zod.string().optional()
529
+ }).optional(),
530
+ "result": zod.string().optional()
531
+ })).optional(),
532
+ "time": zod.number().optional(),
533
+ "endTime": zod.number().optional(),
534
+ "secondsFromStart": zod.number().optional()
535
+ })).optional(),
536
+ "messagesOpenAIFormatted": zod.array(zod.unknown().nullable()).optional(),
537
+ "recordingUrl": zod.string().url().optional(),
538
+ "stereoRecordingUrl": zod.string().url().optional(),
539
+ "videoRecordingUrl": zod.string().url().optional(),
540
+ "videoRecordingStartDelaySeconds": zod.number().optional(),
541
+ "performanceMetrics": zod.object({
542
+ "modelLatencyP50": zod.number().optional(),
543
+ "modelLatencyP90": zod.number().optional(),
544
+ "modelLatencyP95": zod.number().optional(),
545
+ "modelLatencyP99": zod.number().optional(),
546
+ "modelLatencyAverage": zod.number().optional(),
547
+ "voiceLatencyP50": zod.number().optional(),
548
+ "voiceLatencyP90": zod.number().optional(),
549
+ "voiceLatencyP95": zod.number().optional(),
550
+ "voiceLatencyP99": zod.number().optional(),
551
+ "voiceLatencyAverage": zod.number().optional(),
552
+ "transcriberLatencyP50": zod.number().optional(),
553
+ "transcriberLatencyP90": zod.number().optional(),
554
+ "transcriberLatencyP95": zod.number().optional(),
555
+ "transcriberLatencyP99": zod.number().optional(),
556
+ "transcriberLatencyAverage": zod.number().optional(),
557
+ "endpointingLatencyP50": zod.number().optional(),
558
+ "endpointingLatencyP90": zod.number().optional(),
559
+ "endpointingLatencyP95": zod.number().optional(),
560
+ "endpointingLatencyP99": zod.number().optional(),
561
+ "endpointingLatencyAverage": zod.number().optional(),
562
+ "turnLatencyP50": zod.number().optional(),
563
+ "turnLatencyP90": zod.number().optional(),
564
+ "turnLatencyP95": zod.number().optional(),
565
+ "turnLatencyP99": zod.number().optional(),
566
+ "turnLatencyAverage": zod.number().optional()
567
+ }).optional()
568
+ }).optional(),
569
+ "analysis": zod.object({
570
+ "summary": zod.string().optional(),
571
+ "structuredData": zod.record(zod.string(), zod.unknown()).optional(),
572
+ "successEvaluation": zod.string().optional()
573
+ }).optional()
574
+ }).optional(),
575
+ "phoneNumber": zod.object({
576
+ "id": zod.string().min(1).optional(),
577
+ "orgId": zod.string().min(1).optional(),
578
+ "number": zod.string().optional(),
579
+ "name": zod.string().optional(),
580
+ "assistantId": zod.string().nullish(),
581
+ "squadId": zod.string().nullish(),
582
+ "createdAt": zod.string().datetime({}).optional(),
583
+ "updatedAt": zod.string().datetime({}).optional()
584
+ }).optional(),
585
+ "customer": zod.object({
586
+ "number": zod.string().optional(),
587
+ "name": zod.string().optional(),
588
+ "extension": zod.string().optional()
589
+ }).optional(),
590
+ "timestamp": zod.string().datetime({}).optional()
591
+ }), zod.object({
592
+ "type": zod.enum(['end-of-call-report']),
593
+ "call": zod.object({
594
+ "id": zod.string().min(1),
595
+ "orgId": zod.string().min(1).optional(),
596
+ "createdAt": zod.string().datetime({}).optional(),
597
+ "updatedAt": zod.string().datetime({}).optional(),
598
+ "type": zod.enum(['inboundPhoneCall', 'outboundPhoneCall', 'webCall']).optional(),
599
+ "status": zod.enum(['queued', 'ringing', 'in-progress', 'forwarding', 'ended']).optional(),
600
+ "phoneCallProvider": zod.string().optional(),
601
+ "phoneCallProviderId": zod.string().optional(),
602
+ "phoneNumberId": zod.string().min(1).optional(),
603
+ "assistantId": zod.string().nullish(),
604
+ "assistant": zod.unknown().nullish(),
605
+ "squadId": zod.string().nullish(),
606
+ "squad": zod.unknown().nullish(),
607
+ "phoneCallTransport": zod.string().optional(),
608
+ "startedAt": zod.string().datetime({}).optional(),
609
+ "endedAt": zod.string().datetime({}).optional(),
610
+ "endedReason": zod.string().optional(),
611
+ "cost": zod.number().optional(),
612
+ "costBreakdown": zod.object({
613
+ "vapi": zod.number().optional(),
614
+ "transport": zod.number().optional(),
615
+ "stt": zod.number().optional(),
616
+ "llm": zod.number().optional(),
617
+ "tts": zod.number().optional(),
618
+ "total": zod.number().optional(),
619
+ "llmPromptTokens": zod.number().optional(),
620
+ "llmCompletionTokens": zod.number().optional(),
621
+ "ttsCharacters": zod.number().optional()
622
+ }).optional(),
623
+ "messages": zod.array(zod.object({
624
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
625
+ "message": zod.string().optional(),
626
+ "name": zod.string().optional(),
627
+ "function_call": zod.unknown().nullish(),
628
+ "tool_calls": zod.array(zod.object({
629
+ "id": zod.string().optional(),
630
+ "type": zod.enum(['function']).optional(),
631
+ "function": zod.object({
632
+ "name": zod.string(),
633
+ "arguments": zod.string().optional()
634
+ }).optional(),
635
+ "result": zod.string().optional()
636
+ })).optional(),
637
+ "time": zod.number().optional(),
638
+ "endTime": zod.number().optional(),
639
+ "secondsFromStart": zod.number().optional()
640
+ })).optional(),
641
+ "transcript": zod.string().optional(),
642
+ "recordingUrl": zod.string().url().optional(),
643
+ "stereoRecordingUrl": zod.string().url().optional(),
644
+ "artifact": zod.object({
645
+ "recording": zod.object({
646
+ "recordingUrl": zod.string().url().optional(),
647
+ "stereoRecordingUrl": zod.string().url().optional()
648
+ }).optional(),
649
+ "transcript": zod.string().optional(),
650
+ "messages": zod.array(zod.object({
651
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
652
+ "message": zod.string().optional(),
653
+ "name": zod.string().optional(),
654
+ "function_call": zod.unknown().nullish(),
655
+ "tool_calls": zod.array(zod.object({
656
+ "id": zod.string().optional(),
657
+ "type": zod.enum(['function']).optional(),
658
+ "function": zod.object({
659
+ "name": zod.string(),
660
+ "arguments": zod.string().optional()
661
+ }).optional(),
662
+ "result": zod.string().optional()
663
+ })).optional(),
664
+ "time": zod.number().optional(),
665
+ "endTime": zod.number().optional(),
666
+ "secondsFromStart": zod.number().optional()
667
+ })).optional(),
668
+ "messagesOpenAIFormatted": zod.array(zod.unknown().nullable()).optional(),
669
+ "recordingUrl": zod.string().url().optional(),
670
+ "stereoRecordingUrl": zod.string().url().optional(),
671
+ "videoRecordingUrl": zod.string().url().optional(),
672
+ "videoRecordingStartDelaySeconds": zod.number().optional(),
673
+ "performanceMetrics": zod.object({
674
+ "modelLatencyP50": zod.number().optional(),
675
+ "modelLatencyP90": zod.number().optional(),
676
+ "modelLatencyP95": zod.number().optional(),
677
+ "modelLatencyP99": zod.number().optional(),
678
+ "modelLatencyAverage": zod.number().optional(),
679
+ "voiceLatencyP50": zod.number().optional(),
680
+ "voiceLatencyP90": zod.number().optional(),
681
+ "voiceLatencyP95": zod.number().optional(),
682
+ "voiceLatencyP99": zod.number().optional(),
683
+ "voiceLatencyAverage": zod.number().optional(),
684
+ "transcriberLatencyP50": zod.number().optional(),
685
+ "transcriberLatencyP90": zod.number().optional(),
686
+ "transcriberLatencyP95": zod.number().optional(),
687
+ "transcriberLatencyP99": zod.number().optional(),
688
+ "transcriberLatencyAverage": zod.number().optional(),
689
+ "endpointingLatencyP50": zod.number().optional(),
690
+ "endpointingLatencyP90": zod.number().optional(),
691
+ "endpointingLatencyP95": zod.number().optional(),
692
+ "endpointingLatencyP99": zod.number().optional(),
693
+ "endpointingLatencyAverage": zod.number().optional(),
694
+ "turnLatencyP50": zod.number().optional(),
695
+ "turnLatencyP90": zod.number().optional(),
696
+ "turnLatencyP95": zod.number().optional(),
697
+ "turnLatencyP99": zod.number().optional(),
698
+ "turnLatencyAverage": zod.number().optional()
699
+ }).optional()
700
+ }).optional(),
701
+ "analysis": zod.object({
702
+ "summary": zod.string().optional(),
703
+ "structuredData": zod.record(zod.string(), zod.unknown()).optional(),
704
+ "successEvaluation": zod.string().optional()
705
+ }).optional()
706
+ }),
707
+ "endedReason": zod.string().optional(),
708
+ "artifact": zod.object({
709
+ "recording": zod.object({
710
+ "recordingUrl": zod.string().url().optional(),
711
+ "stereoRecordingUrl": zod.string().url().optional()
712
+ }).optional(),
713
+ "transcript": zod.string().optional(),
714
+ "messages": zod.array(zod.object({
715
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
716
+ "message": zod.string().optional(),
717
+ "name": zod.string().optional(),
718
+ "function_call": zod.unknown().nullish(),
719
+ "tool_calls": zod.array(zod.object({
720
+ "id": zod.string().optional(),
721
+ "type": zod.enum(['function']).optional(),
722
+ "function": zod.object({
723
+ "name": zod.string(),
724
+ "arguments": zod.string().optional()
725
+ }).optional(),
726
+ "result": zod.string().optional()
727
+ })).optional(),
728
+ "time": zod.number().optional(),
729
+ "endTime": zod.number().optional(),
730
+ "secondsFromStart": zod.number().optional()
731
+ })).optional(),
732
+ "messagesOpenAIFormatted": zod.array(zod.unknown().nullable()).optional(),
733
+ "recordingUrl": zod.string().url().optional(),
734
+ "stereoRecordingUrl": zod.string().url().optional(),
735
+ "videoRecordingUrl": zod.string().url().optional(),
736
+ "videoRecordingStartDelaySeconds": zod.number().optional(),
737
+ "performanceMetrics": zod.object({
738
+ "modelLatencyP50": zod.number().optional(),
739
+ "modelLatencyP90": zod.number().optional(),
740
+ "modelLatencyP95": zod.number().optional(),
741
+ "modelLatencyP99": zod.number().optional(),
742
+ "modelLatencyAverage": zod.number().optional(),
743
+ "voiceLatencyP50": zod.number().optional(),
744
+ "voiceLatencyP90": zod.number().optional(),
745
+ "voiceLatencyP95": zod.number().optional(),
746
+ "voiceLatencyP99": zod.number().optional(),
747
+ "voiceLatencyAverage": zod.number().optional(),
748
+ "transcriberLatencyP50": zod.number().optional(),
749
+ "transcriberLatencyP90": zod.number().optional(),
750
+ "transcriberLatencyP95": zod.number().optional(),
751
+ "transcriberLatencyP99": zod.number().optional(),
752
+ "transcriberLatencyAverage": zod.number().optional(),
753
+ "endpointingLatencyP50": zod.number().optional(),
754
+ "endpointingLatencyP90": zod.number().optional(),
755
+ "endpointingLatencyP95": zod.number().optional(),
756
+ "endpointingLatencyP99": zod.number().optional(),
757
+ "endpointingLatencyAverage": zod.number().optional(),
758
+ "turnLatencyP50": zod.number().optional(),
759
+ "turnLatencyP90": zod.number().optional(),
760
+ "turnLatencyP95": zod.number().optional(),
761
+ "turnLatencyP99": zod.number().optional(),
762
+ "turnLatencyAverage": zod.number().optional()
763
+ }).optional()
764
+ }).optional(),
765
+ "timestamp": zod.string().datetime({}).optional(),
766
+ "analysis": zod.object({
767
+ "summary": zod.string().optional(),
768
+ "structuredData": zod.record(zod.string(), zod.unknown()).optional(),
769
+ "successEvaluation": zod.string().optional()
770
+ }).optional(),
771
+ "messages": zod.array(zod.object({
772
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
773
+ "message": zod.string().optional(),
774
+ "name": zod.string().optional(),
775
+ "function_call": zod.unknown().nullish(),
776
+ "tool_calls": zod.array(zod.object({
777
+ "id": zod.string().optional(),
778
+ "type": zod.enum(['function']).optional(),
779
+ "function": zod.object({
780
+ "name": zod.string(),
781
+ "arguments": zod.string().optional()
782
+ }).optional(),
783
+ "result": zod.string().optional()
784
+ })).optional(),
785
+ "time": zod.number().optional(),
786
+ "endTime": zod.number().optional(),
787
+ "secondsFromStart": zod.number().optional()
788
+ })).optional(),
789
+ "phoneNumber": zod.object({
790
+ "id": zod.string().min(1).optional(),
791
+ "orgId": zod.string().min(1).optional(),
792
+ "number": zod.string().optional(),
793
+ "name": zod.string().optional(),
794
+ "assistantId": zod.string().nullish(),
795
+ "squadId": zod.string().nullish(),
796
+ "createdAt": zod.string().datetime({}).optional(),
797
+ "updatedAt": zod.string().datetime({}).optional()
798
+ }).optional(),
799
+ "customer": zod.object({
800
+ "number": zod.string().optional(),
801
+ "name": zod.string().optional(),
802
+ "extension": zod.string().optional()
803
+ }).optional(),
804
+ "stereoRecordingUrl": zod.string().url().optional(),
805
+ "recordingUrl": zod.string().url().optional(),
806
+ "transcript": zod.string().optional(),
807
+ "summary": zod.string().optional()
808
+ }), zod.object({
809
+ "type": zod.enum(['transcript']),
810
+ "transcriptType": zod.enum(['partial', 'final']),
811
+ "transcript": zod.string(),
812
+ "role": zod.enum(['assistant', 'user']),
813
+ "timestamp": zod.string().datetime({}).optional(),
814
+ "call": zod.object({
815
+ "id": zod.string().min(1),
816
+ "orgId": zod.string().min(1).optional(),
817
+ "createdAt": zod.string().datetime({}).optional(),
818
+ "updatedAt": zod.string().datetime({}).optional(),
819
+ "type": zod.enum(['inboundPhoneCall', 'outboundPhoneCall', 'webCall']).optional(),
820
+ "status": zod.enum(['queued', 'ringing', 'in-progress', 'forwarding', 'ended']).optional(),
821
+ "phoneCallProvider": zod.string().optional(),
822
+ "phoneCallProviderId": zod.string().optional(),
823
+ "phoneNumberId": zod.string().min(1).optional(),
824
+ "assistantId": zod.string().nullish(),
825
+ "assistant": zod.unknown().nullish(),
826
+ "squadId": zod.string().nullish(),
827
+ "squad": zod.unknown().nullish(),
828
+ "phoneCallTransport": zod.string().optional(),
829
+ "startedAt": zod.string().datetime({}).optional(),
830
+ "endedAt": zod.string().datetime({}).optional(),
831
+ "endedReason": zod.string().optional(),
832
+ "cost": zod.number().optional(),
833
+ "costBreakdown": zod.object({
834
+ "vapi": zod.number().optional(),
835
+ "transport": zod.number().optional(),
836
+ "stt": zod.number().optional(),
837
+ "llm": zod.number().optional(),
838
+ "tts": zod.number().optional(),
839
+ "total": zod.number().optional(),
840
+ "llmPromptTokens": zod.number().optional(),
841
+ "llmCompletionTokens": zod.number().optional(),
842
+ "ttsCharacters": zod.number().optional()
843
+ }).optional(),
844
+ "messages": zod.array(zod.object({
845
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
846
+ "message": zod.string().optional(),
847
+ "name": zod.string().optional(),
848
+ "function_call": zod.unknown().nullish(),
849
+ "tool_calls": zod.array(zod.object({
850
+ "id": zod.string().optional(),
851
+ "type": zod.enum(['function']).optional(),
852
+ "function": zod.object({
853
+ "name": zod.string(),
854
+ "arguments": zod.string().optional()
855
+ }).optional(),
856
+ "result": zod.string().optional()
857
+ })).optional(),
858
+ "time": zod.number().optional(),
859
+ "endTime": zod.number().optional(),
860
+ "secondsFromStart": zod.number().optional()
861
+ })).optional(),
862
+ "transcript": zod.string().optional(),
863
+ "recordingUrl": zod.string().url().optional(),
864
+ "stereoRecordingUrl": zod.string().url().optional(),
865
+ "artifact": zod.object({
866
+ "recording": zod.object({
867
+ "recordingUrl": zod.string().url().optional(),
868
+ "stereoRecordingUrl": zod.string().url().optional()
869
+ }).optional(),
870
+ "transcript": zod.string().optional(),
871
+ "messages": zod.array(zod.object({
872
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
873
+ "message": zod.string().optional(),
874
+ "name": zod.string().optional(),
875
+ "function_call": zod.unknown().nullish(),
876
+ "tool_calls": zod.array(zod.object({
877
+ "id": zod.string().optional(),
878
+ "type": zod.enum(['function']).optional(),
879
+ "function": zod.object({
880
+ "name": zod.string(),
881
+ "arguments": zod.string().optional()
882
+ }).optional(),
883
+ "result": zod.string().optional()
884
+ })).optional(),
885
+ "time": zod.number().optional(),
886
+ "endTime": zod.number().optional(),
887
+ "secondsFromStart": zod.number().optional()
888
+ })).optional(),
889
+ "messagesOpenAIFormatted": zod.array(zod.unknown().nullable()).optional(),
890
+ "recordingUrl": zod.string().url().optional(),
891
+ "stereoRecordingUrl": zod.string().url().optional(),
892
+ "videoRecordingUrl": zod.string().url().optional(),
893
+ "videoRecordingStartDelaySeconds": zod.number().optional(),
894
+ "performanceMetrics": zod.object({
895
+ "modelLatencyP50": zod.number().optional(),
896
+ "modelLatencyP90": zod.number().optional(),
897
+ "modelLatencyP95": zod.number().optional(),
898
+ "modelLatencyP99": zod.number().optional(),
899
+ "modelLatencyAverage": zod.number().optional(),
900
+ "voiceLatencyP50": zod.number().optional(),
901
+ "voiceLatencyP90": zod.number().optional(),
902
+ "voiceLatencyP95": zod.number().optional(),
903
+ "voiceLatencyP99": zod.number().optional(),
904
+ "voiceLatencyAverage": zod.number().optional(),
905
+ "transcriberLatencyP50": zod.number().optional(),
906
+ "transcriberLatencyP90": zod.number().optional(),
907
+ "transcriberLatencyP95": zod.number().optional(),
908
+ "transcriberLatencyP99": zod.number().optional(),
909
+ "transcriberLatencyAverage": zod.number().optional(),
910
+ "endpointingLatencyP50": zod.number().optional(),
911
+ "endpointingLatencyP90": zod.number().optional(),
912
+ "endpointingLatencyP95": zod.number().optional(),
913
+ "endpointingLatencyP99": zod.number().optional(),
914
+ "endpointingLatencyAverage": zod.number().optional(),
915
+ "turnLatencyP50": zod.number().optional(),
916
+ "turnLatencyP90": zod.number().optional(),
917
+ "turnLatencyP95": zod.number().optional(),
918
+ "turnLatencyP99": zod.number().optional(),
919
+ "turnLatencyAverage": zod.number().optional()
920
+ }).optional()
921
+ }).optional(),
922
+ "analysis": zod.object({
923
+ "summary": zod.string().optional(),
924
+ "structuredData": zod.record(zod.string(), zod.unknown()).optional(),
925
+ "successEvaluation": zod.string().optional()
926
+ }).optional()
927
+ }).optional()
928
+ }), zod.object({
929
+ "type": zod.enum(['conversation-update']),
930
+ "conversation": zod.array(zod.object({
931
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
932
+ "message": zod.string().optional(),
933
+ "name": zod.string().optional(),
934
+ "function_call": zod.unknown().nullish(),
935
+ "tool_calls": zod.array(zod.object({
936
+ "id": zod.string().optional(),
937
+ "type": zod.enum(['function']).optional(),
938
+ "function": zod.object({
939
+ "name": zod.string(),
940
+ "arguments": zod.string().optional()
941
+ }).optional(),
942
+ "result": zod.string().optional()
943
+ })).optional(),
944
+ "time": zod.number().optional(),
945
+ "endTime": zod.number().optional(),
946
+ "secondsFromStart": zod.number().optional()
947
+ })),
948
+ "timestamp": zod.string().datetime({}).optional()
949
+ }), zod.object({
950
+ "type": zod.enum(['assistant-request']),
951
+ "call": zod.object({
952
+ "id": zod.string().min(1),
953
+ "orgId": zod.string().min(1).optional(),
954
+ "createdAt": zod.string().datetime({}).optional(),
955
+ "updatedAt": zod.string().datetime({}).optional(),
956
+ "type": zod.enum(['inboundPhoneCall', 'outboundPhoneCall', 'webCall']).optional(),
957
+ "status": zod.enum(['queued', 'ringing', 'in-progress', 'forwarding', 'ended']).optional(),
958
+ "phoneCallProvider": zod.string().optional(),
959
+ "phoneCallProviderId": zod.string().optional(),
960
+ "phoneNumberId": zod.string().min(1).optional(),
961
+ "assistantId": zod.string().nullish(),
962
+ "assistant": zod.unknown().nullish(),
963
+ "squadId": zod.string().nullish(),
964
+ "squad": zod.unknown().nullish(),
965
+ "phoneCallTransport": zod.string().optional(),
966
+ "startedAt": zod.string().datetime({}).optional(),
967
+ "endedAt": zod.string().datetime({}).optional(),
968
+ "endedReason": zod.string().optional(),
969
+ "cost": zod.number().optional(),
970
+ "costBreakdown": zod.object({
971
+ "vapi": zod.number().optional(),
972
+ "transport": zod.number().optional(),
973
+ "stt": zod.number().optional(),
974
+ "llm": zod.number().optional(),
975
+ "tts": zod.number().optional(),
976
+ "total": zod.number().optional(),
977
+ "llmPromptTokens": zod.number().optional(),
978
+ "llmCompletionTokens": zod.number().optional(),
979
+ "ttsCharacters": zod.number().optional()
980
+ }).optional(),
981
+ "messages": zod.array(zod.object({
982
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
983
+ "message": zod.string().optional(),
984
+ "name": zod.string().optional(),
985
+ "function_call": zod.unknown().nullish(),
986
+ "tool_calls": zod.array(zod.object({
987
+ "id": zod.string().optional(),
988
+ "type": zod.enum(['function']).optional(),
989
+ "function": zod.object({
990
+ "name": zod.string(),
991
+ "arguments": zod.string().optional()
992
+ }).optional(),
993
+ "result": zod.string().optional()
994
+ })).optional(),
995
+ "time": zod.number().optional(),
996
+ "endTime": zod.number().optional(),
997
+ "secondsFromStart": zod.number().optional()
998
+ })).optional(),
999
+ "transcript": zod.string().optional(),
1000
+ "recordingUrl": zod.string().url().optional(),
1001
+ "stereoRecordingUrl": zod.string().url().optional(),
1002
+ "artifact": zod.object({
1003
+ "recording": zod.object({
1004
+ "recordingUrl": zod.string().url().optional(),
1005
+ "stereoRecordingUrl": zod.string().url().optional()
1006
+ }).optional(),
1007
+ "transcript": zod.string().optional(),
1008
+ "messages": zod.array(zod.object({
1009
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
1010
+ "message": zod.string().optional(),
1011
+ "name": zod.string().optional(),
1012
+ "function_call": zod.unknown().nullish(),
1013
+ "tool_calls": zod.array(zod.object({
1014
+ "id": zod.string().optional(),
1015
+ "type": zod.enum(['function']).optional(),
1016
+ "function": zod.object({
1017
+ "name": zod.string(),
1018
+ "arguments": zod.string().optional()
1019
+ }).optional(),
1020
+ "result": zod.string().optional()
1021
+ })).optional(),
1022
+ "time": zod.number().optional(),
1023
+ "endTime": zod.number().optional(),
1024
+ "secondsFromStart": zod.number().optional()
1025
+ })).optional(),
1026
+ "messagesOpenAIFormatted": zod.array(zod.unknown().nullable()).optional(),
1027
+ "recordingUrl": zod.string().url().optional(),
1028
+ "stereoRecordingUrl": zod.string().url().optional(),
1029
+ "videoRecordingUrl": zod.string().url().optional(),
1030
+ "videoRecordingStartDelaySeconds": zod.number().optional(),
1031
+ "performanceMetrics": zod.object({
1032
+ "modelLatencyP50": zod.number().optional(),
1033
+ "modelLatencyP90": zod.number().optional(),
1034
+ "modelLatencyP95": zod.number().optional(),
1035
+ "modelLatencyP99": zod.number().optional(),
1036
+ "modelLatencyAverage": zod.number().optional(),
1037
+ "voiceLatencyP50": zod.number().optional(),
1038
+ "voiceLatencyP90": zod.number().optional(),
1039
+ "voiceLatencyP95": zod.number().optional(),
1040
+ "voiceLatencyP99": zod.number().optional(),
1041
+ "voiceLatencyAverage": zod.number().optional(),
1042
+ "transcriberLatencyP50": zod.number().optional(),
1043
+ "transcriberLatencyP90": zod.number().optional(),
1044
+ "transcriberLatencyP95": zod.number().optional(),
1045
+ "transcriberLatencyP99": zod.number().optional(),
1046
+ "transcriberLatencyAverage": zod.number().optional(),
1047
+ "endpointingLatencyP50": zod.number().optional(),
1048
+ "endpointingLatencyP90": zod.number().optional(),
1049
+ "endpointingLatencyP95": zod.number().optional(),
1050
+ "endpointingLatencyP99": zod.number().optional(),
1051
+ "endpointingLatencyAverage": zod.number().optional(),
1052
+ "turnLatencyP50": zod.number().optional(),
1053
+ "turnLatencyP90": zod.number().optional(),
1054
+ "turnLatencyP95": zod.number().optional(),
1055
+ "turnLatencyP99": zod.number().optional(),
1056
+ "turnLatencyAverage": zod.number().optional()
1057
+ }).optional()
1058
+ }).optional(),
1059
+ "analysis": zod.object({
1060
+ "summary": zod.string().optional(),
1061
+ "structuredData": zod.record(zod.string(), zod.unknown()).optional(),
1062
+ "successEvaluation": zod.string().optional()
1063
+ }).optional()
1064
+ }).optional(),
1065
+ "phoneNumber": zod.object({
1066
+ "id": zod.string().min(1).optional(),
1067
+ "orgId": zod.string().min(1).optional(),
1068
+ "number": zod.string().optional(),
1069
+ "name": zod.string().optional(),
1070
+ "assistantId": zod.string().nullish(),
1071
+ "squadId": zod.string().nullish(),
1072
+ "createdAt": zod.string().datetime({}).optional(),
1073
+ "updatedAt": zod.string().datetime({}).optional()
1074
+ }).optional(),
1075
+ "customer": zod.object({
1076
+ "number": zod.string().optional(),
1077
+ "name": zod.string().optional(),
1078
+ "extension": zod.string().optional()
1079
+ }).optional(),
1080
+ "timestamp": zod.string().datetime({}).optional()
1081
+ }), zod.object({
1082
+ "type": zod.enum(['tool-calls']),
1083
+ "toolCalls": zod.array(zod.object({
1084
+ "id": zod.string().optional(),
1085
+ "type": zod.enum(['function']).optional(),
1086
+ "function": zod.object({
1087
+ "name": zod.string(),
1088
+ "arguments": zod.string().optional()
1089
+ }).optional(),
1090
+ "result": zod.string().optional()
1091
+ })),
1092
+ "timestamp": zod.string().datetime({}).optional()
1093
+ }), zod.object({
1094
+ "type": zod.enum(['transfer-destination-request']),
1095
+ "call": zod.object({
1096
+ "id": zod.string().min(1),
1097
+ "orgId": zod.string().min(1).optional(),
1098
+ "createdAt": zod.string().datetime({}).optional(),
1099
+ "updatedAt": zod.string().datetime({}).optional(),
1100
+ "type": zod.enum(['inboundPhoneCall', 'outboundPhoneCall', 'webCall']).optional(),
1101
+ "status": zod.enum(['queued', 'ringing', 'in-progress', 'forwarding', 'ended']).optional(),
1102
+ "phoneCallProvider": zod.string().optional(),
1103
+ "phoneCallProviderId": zod.string().optional(),
1104
+ "phoneNumberId": zod.string().min(1).optional(),
1105
+ "assistantId": zod.string().nullish(),
1106
+ "assistant": zod.unknown().nullish(),
1107
+ "squadId": zod.string().nullish(),
1108
+ "squad": zod.unknown().nullish(),
1109
+ "phoneCallTransport": zod.string().optional(),
1110
+ "startedAt": zod.string().datetime({}).optional(),
1111
+ "endedAt": zod.string().datetime({}).optional(),
1112
+ "endedReason": zod.string().optional(),
1113
+ "cost": zod.number().optional(),
1114
+ "costBreakdown": zod.object({
1115
+ "vapi": zod.number().optional(),
1116
+ "transport": zod.number().optional(),
1117
+ "stt": zod.number().optional(),
1118
+ "llm": zod.number().optional(),
1119
+ "tts": zod.number().optional(),
1120
+ "total": zod.number().optional(),
1121
+ "llmPromptTokens": zod.number().optional(),
1122
+ "llmCompletionTokens": zod.number().optional(),
1123
+ "ttsCharacters": zod.number().optional()
1124
+ }).optional(),
1125
+ "messages": zod.array(zod.object({
1126
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
1127
+ "message": zod.string().optional(),
1128
+ "name": zod.string().optional(),
1129
+ "function_call": zod.unknown().nullish(),
1130
+ "tool_calls": zod.array(zod.object({
1131
+ "id": zod.string().optional(),
1132
+ "type": zod.enum(['function']).optional(),
1133
+ "function": zod.object({
1134
+ "name": zod.string(),
1135
+ "arguments": zod.string().optional()
1136
+ }).optional(),
1137
+ "result": zod.string().optional()
1138
+ })).optional(),
1139
+ "time": zod.number().optional(),
1140
+ "endTime": zod.number().optional(),
1141
+ "secondsFromStart": zod.number().optional()
1142
+ })).optional(),
1143
+ "transcript": zod.string().optional(),
1144
+ "recordingUrl": zod.string().url().optional(),
1145
+ "stereoRecordingUrl": zod.string().url().optional(),
1146
+ "artifact": zod.object({
1147
+ "recording": zod.object({
1148
+ "recordingUrl": zod.string().url().optional(),
1149
+ "stereoRecordingUrl": zod.string().url().optional()
1150
+ }).optional(),
1151
+ "transcript": zod.string().optional(),
1152
+ "messages": zod.array(zod.object({
1153
+ "role": zod.enum(['assistant', 'user', 'system', 'function', 'tool']),
1154
+ "message": zod.string().optional(),
1155
+ "name": zod.string().optional(),
1156
+ "function_call": zod.unknown().nullish(),
1157
+ "tool_calls": zod.array(zod.object({
1158
+ "id": zod.string().optional(),
1159
+ "type": zod.enum(['function']).optional(),
1160
+ "function": zod.object({
1161
+ "name": zod.string(),
1162
+ "arguments": zod.string().optional()
1163
+ }).optional(),
1164
+ "result": zod.string().optional()
1165
+ })).optional(),
1166
+ "time": zod.number().optional(),
1167
+ "endTime": zod.number().optional(),
1168
+ "secondsFromStart": zod.number().optional()
1169
+ })).optional(),
1170
+ "messagesOpenAIFormatted": zod.array(zod.unknown().nullable()).optional(),
1171
+ "recordingUrl": zod.string().url().optional(),
1172
+ "stereoRecordingUrl": zod.string().url().optional(),
1173
+ "videoRecordingUrl": zod.string().url().optional(),
1174
+ "videoRecordingStartDelaySeconds": zod.number().optional(),
1175
+ "performanceMetrics": zod.object({
1176
+ "modelLatencyP50": zod.number().optional(),
1177
+ "modelLatencyP90": zod.number().optional(),
1178
+ "modelLatencyP95": zod.number().optional(),
1179
+ "modelLatencyP99": zod.number().optional(),
1180
+ "modelLatencyAverage": zod.number().optional(),
1181
+ "voiceLatencyP50": zod.number().optional(),
1182
+ "voiceLatencyP90": zod.number().optional(),
1183
+ "voiceLatencyP95": zod.number().optional(),
1184
+ "voiceLatencyP99": zod.number().optional(),
1185
+ "voiceLatencyAverage": zod.number().optional(),
1186
+ "transcriberLatencyP50": zod.number().optional(),
1187
+ "transcriberLatencyP90": zod.number().optional(),
1188
+ "transcriberLatencyP95": zod.number().optional(),
1189
+ "transcriberLatencyP99": zod.number().optional(),
1190
+ "transcriberLatencyAverage": zod.number().optional(),
1191
+ "endpointingLatencyP50": zod.number().optional(),
1192
+ "endpointingLatencyP90": zod.number().optional(),
1193
+ "endpointingLatencyP95": zod.number().optional(),
1194
+ "endpointingLatencyP99": zod.number().optional(),
1195
+ "endpointingLatencyAverage": zod.number().optional(),
1196
+ "turnLatencyP50": zod.number().optional(),
1197
+ "turnLatencyP90": zod.number().optional(),
1198
+ "turnLatencyP95": zod.number().optional(),
1199
+ "turnLatencyP99": zod.number().optional(),
1200
+ "turnLatencyAverage": zod.number().optional()
1201
+ }).optional()
1202
+ }).optional(),
1203
+ "analysis": zod.object({
1204
+ "summary": zod.string().optional(),
1205
+ "structuredData": zod.record(zod.string(), zod.unknown()).optional(),
1206
+ "successEvaluation": zod.string().optional()
1207
+ }).optional()
1208
+ }).optional(),
1209
+ "timestamp": zod.string().datetime({}).optional()
1210
+ }), zod.object({
1211
+ "type": zod.enum(['transfer-update']),
1212
+ "destination": zod.object({
1213
+ "type": zod.string(),
1214
+ "number": zod.string().optional(),
1215
+ "message": zod.string().optional()
1216
+ }),
1217
+ "timestamp": zod.string().datetime({}).optional()
1218
+ }), zod.object({
1219
+ "type": zod.enum(['language-change-detected']),
1220
+ "language": zod.string(),
1221
+ "timestamp": zod.string().datetime({}).optional()
1222
+ }), zod.object({
1223
+ "type": zod.enum(['phone-call-control']),
1224
+ "request": zod.object({
1225
+ "type": zod.string()
1226
+ }),
1227
+ "timestamp": zod.string().datetime({}).optional()
1228
+ })])
1229
+ });
1230
+ exports.ReceiveWebhookResponse = zod.object({
1231
+ "received": zod.boolean().describe('Whether the webhook was received')
1232
+ });
1233
+ /**
1234
+ * Endpoint for receiving webhook events from the Kanban service. Handles room lifecycle events, call status updates, and transcriptions.
1235
+ * @summary Receive Kanban webhook events
1236
+ */
1237
+ exports.receiveKanbanWebhookBodyOneNumDroppedDefault = 1;
1238
+ exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = 0;
1239
+ exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = 0;
1240
+ exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = 0;
1241
+ exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = 0;
1242
+ exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = 0;
1243
+ exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = 0;
1244
+ exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = 0;
1245
+ exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageSttAudioDurationDefault = 0;
1246
+ exports.receiveKanbanWebhookBodyTwoNumDroppedDefault = 1;
1247
+ exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = 0;
1248
+ exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = 0;
1249
+ exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = 0;
1250
+ exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = 0;
1251
+ exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = 0;
1252
+ exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = 0;
1253
+ exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = 0;
1254
+ exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageSttAudioDurationDefault = 0;
1255
+ exports.receiveKanbanWebhookBodyThreeNumDroppedDefault = 1;
1256
+ exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = 0;
1257
+ exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = 0;
1258
+ exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = 0;
1259
+ exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = 0;
1260
+ exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = 0;
1261
+ exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = 0;
1262
+ exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = 0;
1263
+ exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageSttAudioDurationDefault = 0;
1264
+ exports.receiveKanbanWebhookBodyFourNumDroppedDefault = 1;
1265
+ exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = 0;
1266
+ exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = 0;
1267
+ exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = 0;
1268
+ exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = 0;
1269
+ exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = 0;
1270
+ exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = 0;
1271
+ exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = 0;
1272
+ exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageSttAudioDurationDefault = 0;
1273
+ exports.receiveKanbanWebhookBodyFiveNumDroppedDefault = 1;
1274
+ exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = 0;
1275
+ exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = 0;
1276
+ exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = 0;
1277
+ exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = 0;
1278
+ exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = 0;
1279
+ exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = 0;
1280
+ exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = 0;
1281
+ exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageSttAudioDurationDefault = 0;
1282
+ exports.receiveKanbanWebhookBodySixNumDroppedDefault = 1;
1283
+ exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = 0;
1284
+ exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = 0;
1285
+ exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = 0;
1286
+ exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = 0;
1287
+ exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = 0;
1288
+ exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = 0;
1289
+ exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = 0;
1290
+ exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageSttAudioDurationDefault = 0;
1291
+ exports.receiveKanbanWebhookBodySevenNumDroppedDefault = 1;
1292
+ exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = 0;
1293
+ exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = 0;
1294
+ exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = 0;
1295
+ exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = 0;
1296
+ exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = 0;
1297
+ exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = 0;
1298
+ exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = 0;
1299
+ exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageSttAudioDurationDefault = 0;
1300
+ exports.receiveKanbanWebhookBodyEightNumDroppedDefault = 1;
1301
+ exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = 0;
1302
+ exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = 0;
1303
+ exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = 0;
1304
+ exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = 0;
1305
+ exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = 0;
1306
+ exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = 0;
1307
+ exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = 0;
1308
+ exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageSttAudioDurationDefault = 0;
1309
+ exports.receiveKanbanWebhookBodyNineNumDroppedDefault = 1;
1310
+ exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmPromptTokensDefault = 0;
1311
+ exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault = 0;
1312
+ exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault = 0;
1313
+ exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault = 0;
1314
+ exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault = 0;
1315
+ exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageTtsCharactersCountDefault = 0;
1316
+ exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageTtsAudioDurationDefault = 0;
1317
+ exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageSttAudioDurationDefault = 0;
1318
+ exports.ReceiveKanbanWebhookBody = zod.union([zod.object({
1319
+ "id": zod.string().min(1),
1320
+ "createdAt": zod.number().nullable(),
1321
+ "numDropped": zod.number().default(exports.receiveKanbanWebhookBodyOneNumDroppedDefault),
1322
+ "event": zod.enum(['room_created']),
1323
+ "room": zod.object({
1324
+ "sid": zod.string().optional(),
1325
+ "name": zod.string().min(1),
1326
+ "metadata": zod.object({
1327
+ "call_id": zod.string(),
1328
+ "campaign_id": zod.string(),
1329
+ "target_id": zod.string(),
1330
+ "closing_reason": zod.string().nullish(),
1331
+ "closed_at": zod.number().nullish(),
1332
+ "usage_metrics": zod.object({
1333
+ "usage": zod.object({
1334
+ "llm_prompt_tokens": zod.number().default(exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmPromptTokensDefault),
1335
+ "llm_completion_tokens": zod.number().default(exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault),
1336
+ "llm_prompt_cached_tokens": zod.number().default(exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault),
1337
+ "llm_input_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault),
1338
+ "llm_output_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault),
1339
+ "tts_characters_count": zod.number().default(exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageTtsCharactersCountDefault),
1340
+ "tts_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageTtsAudioDurationDefault),
1341
+ "stt_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyOneRoomMetadataUsageMetricsUsageSttAudioDurationDefault)
1342
+ }),
1343
+ "models": zod.object({
1344
+ "llm": zod.object({
1345
+ "provider": zod.string(),
1346
+ "model": zod.string()
1347
+ }).optional(),
1348
+ "tts": zod.object({
1349
+ "provider": zod.string(),
1350
+ "model": zod.string()
1351
+ }).optional(),
1352
+ "stt": zod.object({
1353
+ "provider": zod.string(),
1354
+ "model": zod.string()
1355
+ }).optional()
1356
+ }),
1357
+ "latency": zod.array(zod.object({
1358
+ "turn_index": zod.number(),
1359
+ "llm_node_ttft": zod.number().optional(),
1360
+ "tts_node_ttfb": zod.number().optional(),
1361
+ "e2e_latency": zod.number().optional(),
1362
+ "transcription_delay": zod.number().optional(),
1363
+ "end_of_turn_delay": zod.number().optional()
1364
+ }))
1365
+ }).optional()
1366
+ }),
1367
+ "emptyTimeout": zod.number().optional(),
1368
+ "departureTimeout": zod.number().optional(),
1369
+ "maxParticipants": zod.number().optional(),
1370
+ "creationTime": zod.string().optional(),
1371
+ "numParticipants": zod.number().optional(),
1372
+ "numPublishers": zod.number().optional(),
1373
+ "activeRecording": zod.boolean().optional()
1374
+ })
1375
+ }), zod.object({
1376
+ "id": zod.string().min(1),
1377
+ "createdAt": zod.number().nullable(),
1378
+ "numDropped": zod.number().default(exports.receiveKanbanWebhookBodyTwoNumDroppedDefault),
1379
+ "event": zod.enum(['call_agent_dispatched']),
1380
+ "room": zod.object({
1381
+ "sid": zod.string().optional(),
1382
+ "name": zod.string().min(1),
1383
+ "metadata": zod.object({
1384
+ "call_id": zod.string(),
1385
+ "campaign_id": zod.string(),
1386
+ "target_id": zod.string(),
1387
+ "closing_reason": zod.string().nullish(),
1388
+ "closed_at": zod.number().nullish(),
1389
+ "usage_metrics": zod.object({
1390
+ "usage": zod.object({
1391
+ "llm_prompt_tokens": zod.number().default(exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmPromptTokensDefault),
1392
+ "llm_completion_tokens": zod.number().default(exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault),
1393
+ "llm_prompt_cached_tokens": zod.number().default(exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault),
1394
+ "llm_input_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault),
1395
+ "llm_output_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault),
1396
+ "tts_characters_count": zod.number().default(exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageTtsCharactersCountDefault),
1397
+ "tts_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageTtsAudioDurationDefault),
1398
+ "stt_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyTwoRoomMetadataUsageMetricsUsageSttAudioDurationDefault)
1399
+ }),
1400
+ "models": zod.object({
1401
+ "llm": zod.object({
1402
+ "provider": zod.string(),
1403
+ "model": zod.string()
1404
+ }).optional(),
1405
+ "tts": zod.object({
1406
+ "provider": zod.string(),
1407
+ "model": zod.string()
1408
+ }).optional(),
1409
+ "stt": zod.object({
1410
+ "provider": zod.string(),
1411
+ "model": zod.string()
1412
+ }).optional()
1413
+ }),
1414
+ "latency": zod.array(zod.object({
1415
+ "turn_index": zod.number(),
1416
+ "llm_node_ttft": zod.number().optional(),
1417
+ "tts_node_ttfb": zod.number().optional(),
1418
+ "e2e_latency": zod.number().optional(),
1419
+ "transcription_delay": zod.number().optional(),
1420
+ "end_of_turn_delay": zod.number().optional()
1421
+ }))
1422
+ }).optional()
1423
+ }),
1424
+ "emptyTimeout": zod.number().optional(),
1425
+ "departureTimeout": zod.number().optional(),
1426
+ "maxParticipants": zod.number().optional(),
1427
+ "creationTime": zod.string().optional(),
1428
+ "numParticipants": zod.number().optional(),
1429
+ "numPublishers": zod.number().optional(),
1430
+ "activeRecording": zod.boolean().optional()
1431
+ })
1432
+ }), zod.object({
1433
+ "id": zod.string().min(1),
1434
+ "createdAt": zod.number().nullable(),
1435
+ "numDropped": zod.number().default(exports.receiveKanbanWebhookBodyThreeNumDroppedDefault),
1436
+ "event": zod.enum(['call_sip_initiated']),
1437
+ "room": zod.object({
1438
+ "sid": zod.string().optional(),
1439
+ "name": zod.string().min(1),
1440
+ "metadata": zod.object({
1441
+ "call_id": zod.string(),
1442
+ "campaign_id": zod.string(),
1443
+ "target_id": zod.string(),
1444
+ "closing_reason": zod.string().nullish(),
1445
+ "closed_at": zod.number().nullish(),
1446
+ "usage_metrics": zod.object({
1447
+ "usage": zod.object({
1448
+ "llm_prompt_tokens": zod.number().default(exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmPromptTokensDefault),
1449
+ "llm_completion_tokens": zod.number().default(exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault),
1450
+ "llm_prompt_cached_tokens": zod.number().default(exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault),
1451
+ "llm_input_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault),
1452
+ "llm_output_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault),
1453
+ "tts_characters_count": zod.number().default(exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageTtsCharactersCountDefault),
1454
+ "tts_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageTtsAudioDurationDefault),
1455
+ "stt_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyThreeRoomMetadataUsageMetricsUsageSttAudioDurationDefault)
1456
+ }),
1457
+ "models": zod.object({
1458
+ "llm": zod.object({
1459
+ "provider": zod.string(),
1460
+ "model": zod.string()
1461
+ }).optional(),
1462
+ "tts": zod.object({
1463
+ "provider": zod.string(),
1464
+ "model": zod.string()
1465
+ }).optional(),
1466
+ "stt": zod.object({
1467
+ "provider": zod.string(),
1468
+ "model": zod.string()
1469
+ }).optional()
1470
+ }),
1471
+ "latency": zod.array(zod.object({
1472
+ "turn_index": zod.number(),
1473
+ "llm_node_ttft": zod.number().optional(),
1474
+ "tts_node_ttfb": zod.number().optional(),
1475
+ "e2e_latency": zod.number().optional(),
1476
+ "transcription_delay": zod.number().optional(),
1477
+ "end_of_turn_delay": zod.number().optional()
1478
+ }))
1479
+ }).optional()
1480
+ }),
1481
+ "emptyTimeout": zod.number().optional(),
1482
+ "departureTimeout": zod.number().optional(),
1483
+ "maxParticipants": zod.number().optional(),
1484
+ "creationTime": zod.string().optional(),
1485
+ "numParticipants": zod.number().optional(),
1486
+ "numPublishers": zod.number().optional(),
1487
+ "activeRecording": zod.boolean().optional()
1488
+ })
1489
+ }), zod.object({
1490
+ "id": zod.string().min(1),
1491
+ "createdAt": zod.number().nullable(),
1492
+ "numDropped": zod.number().default(exports.receiveKanbanWebhookBodyFourNumDroppedDefault),
1493
+ "event": zod.enum(['call_failed']),
1494
+ "room": zod.object({
1495
+ "sid": zod.string().optional(),
1496
+ "name": zod.string().min(1),
1497
+ "metadata": zod.object({
1498
+ "call_id": zod.string(),
1499
+ "campaign_id": zod.string(),
1500
+ "target_id": zod.string(),
1501
+ "closing_reason": zod.string().nullish(),
1502
+ "closed_at": zod.number().nullish(),
1503
+ "usage_metrics": zod.object({
1504
+ "usage": zod.object({
1505
+ "llm_prompt_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmPromptTokensDefault),
1506
+ "llm_completion_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault),
1507
+ "llm_prompt_cached_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault),
1508
+ "llm_input_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault),
1509
+ "llm_output_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault),
1510
+ "tts_characters_count": zod.number().default(exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageTtsCharactersCountDefault),
1511
+ "tts_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageTtsAudioDurationDefault),
1512
+ "stt_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyFourRoomMetadataUsageMetricsUsageSttAudioDurationDefault)
1513
+ }),
1514
+ "models": zod.object({
1515
+ "llm": zod.object({
1516
+ "provider": zod.string(),
1517
+ "model": zod.string()
1518
+ }).optional(),
1519
+ "tts": zod.object({
1520
+ "provider": zod.string(),
1521
+ "model": zod.string()
1522
+ }).optional(),
1523
+ "stt": zod.object({
1524
+ "provider": zod.string(),
1525
+ "model": zod.string()
1526
+ }).optional()
1527
+ }),
1528
+ "latency": zod.array(zod.object({
1529
+ "turn_index": zod.number(),
1530
+ "llm_node_ttft": zod.number().optional(),
1531
+ "tts_node_ttfb": zod.number().optional(),
1532
+ "e2e_latency": zod.number().optional(),
1533
+ "transcription_delay": zod.number().optional(),
1534
+ "end_of_turn_delay": zod.number().optional()
1535
+ }))
1536
+ }).optional()
1537
+ }),
1538
+ "emptyTimeout": zod.number().optional(),
1539
+ "departureTimeout": zod.number().optional(),
1540
+ "maxParticipants": zod.number().optional(),
1541
+ "creationTime": zod.string().optional(),
1542
+ "numParticipants": zod.number().optional(),
1543
+ "numPublishers": zod.number().optional(),
1544
+ "activeRecording": zod.boolean().optional()
1545
+ }),
1546
+ "error": zod.object({
1547
+ "stage": zod.string(),
1548
+ "code": zod.string(),
1549
+ "message": zod.string()
1550
+ })
1551
+ }), zod.object({
1552
+ "id": zod.string().min(1),
1553
+ "createdAt": zod.number().nullable(),
1554
+ "numDropped": zod.number().default(exports.receiveKanbanWebhookBodyFiveNumDroppedDefault),
1555
+ "event": zod.enum(['transcription']),
1556
+ "room": zod.object({
1557
+ "sid": zod.string().optional(),
1558
+ "name": zod.string().min(1),
1559
+ "metadata": zod.object({
1560
+ "call_id": zod.string(),
1561
+ "campaign_id": zod.string(),
1562
+ "target_id": zod.string(),
1563
+ "closing_reason": zod.string().nullish(),
1564
+ "closed_at": zod.number().nullish(),
1565
+ "usage_metrics": zod.object({
1566
+ "usage": zod.object({
1567
+ "llm_prompt_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmPromptTokensDefault),
1568
+ "llm_completion_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault),
1569
+ "llm_prompt_cached_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault),
1570
+ "llm_input_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault),
1571
+ "llm_output_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault),
1572
+ "tts_characters_count": zod.number().default(exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageTtsCharactersCountDefault),
1573
+ "tts_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageTtsAudioDurationDefault),
1574
+ "stt_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyFiveRoomMetadataUsageMetricsUsageSttAudioDurationDefault)
1575
+ }),
1576
+ "models": zod.object({
1577
+ "llm": zod.object({
1578
+ "provider": zod.string(),
1579
+ "model": zod.string()
1580
+ }).optional(),
1581
+ "tts": zod.object({
1582
+ "provider": zod.string(),
1583
+ "model": zod.string()
1584
+ }).optional(),
1585
+ "stt": zod.object({
1586
+ "provider": zod.string(),
1587
+ "model": zod.string()
1588
+ }).optional()
1589
+ }),
1590
+ "latency": zod.array(zod.object({
1591
+ "turn_index": zod.number(),
1592
+ "llm_node_ttft": zod.number().optional(),
1593
+ "tts_node_ttfb": zod.number().optional(),
1594
+ "e2e_latency": zod.number().optional(),
1595
+ "transcription_delay": zod.number().optional(),
1596
+ "end_of_turn_delay": zod.number().optional()
1597
+ }))
1598
+ }).optional()
1599
+ }),
1600
+ "emptyTimeout": zod.number().optional(),
1601
+ "departureTimeout": zod.number().optional(),
1602
+ "maxParticipants": zod.number().optional(),
1603
+ "creationTime": zod.string().optional(),
1604
+ "numParticipants": zod.number().optional(),
1605
+ "numPublishers": zod.number().optional(),
1606
+ "activeRecording": zod.boolean().optional()
1607
+ }),
1608
+ "transcription": zod.object({
1609
+ "transcript": zod.string(),
1610
+ "role": zod.string()
1611
+ })
1612
+ }), zod.object({
1613
+ "id": zod.string().min(1),
1614
+ "createdAt": zod.number().nullable(),
1615
+ "numDropped": zod.number().default(exports.receiveKanbanWebhookBodySixNumDroppedDefault),
1616
+ "event": zod.enum(['agent_room_close']),
1617
+ "room": zod.object({
1618
+ "sid": zod.string().optional(),
1619
+ "name": zod.string().min(1),
1620
+ "metadata": zod.object({
1621
+ "call_id": zod.string(),
1622
+ "campaign_id": zod.string(),
1623
+ "target_id": zod.string(),
1624
+ "closing_reason": zod.string().nullish(),
1625
+ "closed_at": zod.number().nullish(),
1626
+ "usage_metrics": zod.object({
1627
+ "usage": zod.object({
1628
+ "llm_prompt_tokens": zod.number().default(exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmPromptTokensDefault),
1629
+ "llm_completion_tokens": zod.number().default(exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault),
1630
+ "llm_prompt_cached_tokens": zod.number().default(exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault),
1631
+ "llm_input_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault),
1632
+ "llm_output_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault),
1633
+ "tts_characters_count": zod.number().default(exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageTtsCharactersCountDefault),
1634
+ "tts_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageTtsAudioDurationDefault),
1635
+ "stt_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodySixRoomMetadataUsageMetricsUsageSttAudioDurationDefault)
1636
+ }),
1637
+ "models": zod.object({
1638
+ "llm": zod.object({
1639
+ "provider": zod.string(),
1640
+ "model": zod.string()
1641
+ }).optional(),
1642
+ "tts": zod.object({
1643
+ "provider": zod.string(),
1644
+ "model": zod.string()
1645
+ }).optional(),
1646
+ "stt": zod.object({
1647
+ "provider": zod.string(),
1648
+ "model": zod.string()
1649
+ }).optional()
1650
+ }),
1651
+ "latency": zod.array(zod.object({
1652
+ "turn_index": zod.number(),
1653
+ "llm_node_ttft": zod.number().optional(),
1654
+ "tts_node_ttfb": zod.number().optional(),
1655
+ "e2e_latency": zod.number().optional(),
1656
+ "transcription_delay": zod.number().optional(),
1657
+ "end_of_turn_delay": zod.number().optional()
1658
+ }))
1659
+ }).optional()
1660
+ }),
1661
+ "emptyTimeout": zod.number().optional(),
1662
+ "departureTimeout": zod.number().optional(),
1663
+ "maxParticipants": zod.number().optional(),
1664
+ "creationTime": zod.string().optional(),
1665
+ "numParticipants": zod.number().optional(),
1666
+ "numPublishers": zod.number().optional(),
1667
+ "activeRecording": zod.boolean().optional()
1668
+ })
1669
+ }), zod.object({
1670
+ "id": zod.string().min(1),
1671
+ "createdAt": zod.number().nullable(),
1672
+ "numDropped": zod.number().default(exports.receiveKanbanWebhookBodySevenNumDroppedDefault),
1673
+ "event": zod.enum(['room_finished']),
1674
+ "room": zod.object({
1675
+ "sid": zod.string().optional(),
1676
+ "name": zod.string().min(1),
1677
+ "metadata": zod.object({
1678
+ "call_id": zod.string(),
1679
+ "campaign_id": zod.string(),
1680
+ "target_id": zod.string(),
1681
+ "closing_reason": zod.string().nullish(),
1682
+ "closed_at": zod.number().nullish(),
1683
+ "usage_metrics": zod.object({
1684
+ "usage": zod.object({
1685
+ "llm_prompt_tokens": zod.number().default(exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmPromptTokensDefault),
1686
+ "llm_completion_tokens": zod.number().default(exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault),
1687
+ "llm_prompt_cached_tokens": zod.number().default(exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault),
1688
+ "llm_input_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault),
1689
+ "llm_output_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault),
1690
+ "tts_characters_count": zod.number().default(exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageTtsCharactersCountDefault),
1691
+ "tts_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageTtsAudioDurationDefault),
1692
+ "stt_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodySevenRoomMetadataUsageMetricsUsageSttAudioDurationDefault)
1693
+ }),
1694
+ "models": zod.object({
1695
+ "llm": zod.object({
1696
+ "provider": zod.string(),
1697
+ "model": zod.string()
1698
+ }).optional(),
1699
+ "tts": zod.object({
1700
+ "provider": zod.string(),
1701
+ "model": zod.string()
1702
+ }).optional(),
1703
+ "stt": zod.object({
1704
+ "provider": zod.string(),
1705
+ "model": zod.string()
1706
+ }).optional()
1707
+ }),
1708
+ "latency": zod.array(zod.object({
1709
+ "turn_index": zod.number(),
1710
+ "llm_node_ttft": zod.number().optional(),
1711
+ "tts_node_ttfb": zod.number().optional(),
1712
+ "e2e_latency": zod.number().optional(),
1713
+ "transcription_delay": zod.number().optional(),
1714
+ "end_of_turn_delay": zod.number().optional()
1715
+ }))
1716
+ }).optional()
1717
+ }),
1718
+ "emptyTimeout": zod.number().optional(),
1719
+ "departureTimeout": zod.number().optional(),
1720
+ "maxParticipants": zod.number().optional(),
1721
+ "creationTime": zod.string().optional(),
1722
+ "numParticipants": zod.number().optional(),
1723
+ "numPublishers": zod.number().optional(),
1724
+ "activeRecording": zod.boolean().optional()
1725
+ })
1726
+ }), zod.object({
1727
+ "id": zod.string().min(1),
1728
+ "createdAt": zod.number().nullable(),
1729
+ "numDropped": zod.number().default(exports.receiveKanbanWebhookBodyEightNumDroppedDefault),
1730
+ "event": zod.enum(['participant_joined']),
1731
+ "room": zod.object({
1732
+ "sid": zod.string().optional(),
1733
+ "name": zod.string().min(1),
1734
+ "metadata": zod.object({
1735
+ "call_id": zod.string(),
1736
+ "campaign_id": zod.string(),
1737
+ "target_id": zod.string(),
1738
+ "closing_reason": zod.string().nullish(),
1739
+ "closed_at": zod.number().nullish(),
1740
+ "usage_metrics": zod.object({
1741
+ "usage": zod.object({
1742
+ "llm_prompt_tokens": zod.number().default(exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmPromptTokensDefault),
1743
+ "llm_completion_tokens": zod.number().default(exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault),
1744
+ "llm_prompt_cached_tokens": zod.number().default(exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault),
1745
+ "llm_input_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault),
1746
+ "llm_output_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault),
1747
+ "tts_characters_count": zod.number().default(exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageTtsCharactersCountDefault),
1748
+ "tts_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageTtsAudioDurationDefault),
1749
+ "stt_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyEightRoomMetadataUsageMetricsUsageSttAudioDurationDefault)
1750
+ }),
1751
+ "models": zod.object({
1752
+ "llm": zod.object({
1753
+ "provider": zod.string(),
1754
+ "model": zod.string()
1755
+ }).optional(),
1756
+ "tts": zod.object({
1757
+ "provider": zod.string(),
1758
+ "model": zod.string()
1759
+ }).optional(),
1760
+ "stt": zod.object({
1761
+ "provider": zod.string(),
1762
+ "model": zod.string()
1763
+ }).optional()
1764
+ }),
1765
+ "latency": zod.array(zod.object({
1766
+ "turn_index": zod.number(),
1767
+ "llm_node_ttft": zod.number().optional(),
1768
+ "tts_node_ttfb": zod.number().optional(),
1769
+ "e2e_latency": zod.number().optional(),
1770
+ "transcription_delay": zod.number().optional(),
1771
+ "end_of_turn_delay": zod.number().optional()
1772
+ }))
1773
+ }).optional()
1774
+ }),
1775
+ "emptyTimeout": zod.number().optional(),
1776
+ "departureTimeout": zod.number().optional(),
1777
+ "maxParticipants": zod.number().optional(),
1778
+ "creationTime": zod.string().optional(),
1779
+ "numParticipants": zod.number().optional(),
1780
+ "numPublishers": zod.number().optional(),
1781
+ "activeRecording": zod.boolean().optional()
1782
+ }),
1783
+ "participant": zod.object({
1784
+ "sid": zod.string(),
1785
+ "identity": zod.string(),
1786
+ "state": zod.string().optional(),
1787
+ "name": zod.string().optional(),
1788
+ "kind": zod.enum(['STANDARD', 'INGRESS', 'EGRESS', 'SIP', 'AGENT']).optional(),
1789
+ "joinedAt": zod.union([zod.string(), zod.number()]).optional(),
1790
+ "joinedAtMs": zod.union([zod.string(), zod.number()]).optional()
1791
+ })
1792
+ }), zod.object({
1793
+ "id": zod.string().min(1),
1794
+ "createdAt": zod.number().nullable(),
1795
+ "numDropped": zod.number().default(exports.receiveKanbanWebhookBodyNineNumDroppedDefault),
1796
+ "event": zod.enum(['participant_left']),
1797
+ "room": zod.object({
1798
+ "sid": zod.string().optional(),
1799
+ "name": zod.string().min(1),
1800
+ "metadata": zod.object({
1801
+ "call_id": zod.string(),
1802
+ "campaign_id": zod.string(),
1803
+ "target_id": zod.string(),
1804
+ "closing_reason": zod.string().nullish(),
1805
+ "closed_at": zod.number().nullish(),
1806
+ "usage_metrics": zod.object({
1807
+ "usage": zod.object({
1808
+ "llm_prompt_tokens": zod.number().default(exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmPromptTokensDefault),
1809
+ "llm_completion_tokens": zod.number().default(exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmCompletionTokensDefault),
1810
+ "llm_prompt_cached_tokens": zod.number().default(exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmPromptCachedTokensDefault),
1811
+ "llm_input_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmInputAudioTokensDefault),
1812
+ "llm_output_audio_tokens": zod.number().default(exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageLlmOutputAudioTokensDefault),
1813
+ "tts_characters_count": zod.number().default(exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageTtsCharactersCountDefault),
1814
+ "tts_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageTtsAudioDurationDefault),
1815
+ "stt_audio_duration": zod.number().default(exports.receiveKanbanWebhookBodyNineRoomMetadataUsageMetricsUsageSttAudioDurationDefault)
1816
+ }),
1817
+ "models": zod.object({
1818
+ "llm": zod.object({
1819
+ "provider": zod.string(),
1820
+ "model": zod.string()
1821
+ }).optional(),
1822
+ "tts": zod.object({
1823
+ "provider": zod.string(),
1824
+ "model": zod.string()
1825
+ }).optional(),
1826
+ "stt": zod.object({
1827
+ "provider": zod.string(),
1828
+ "model": zod.string()
1829
+ }).optional()
1830
+ }),
1831
+ "latency": zod.array(zod.object({
1832
+ "turn_index": zod.number(),
1833
+ "llm_node_ttft": zod.number().optional(),
1834
+ "tts_node_ttfb": zod.number().optional(),
1835
+ "e2e_latency": zod.number().optional(),
1836
+ "transcription_delay": zod.number().optional(),
1837
+ "end_of_turn_delay": zod.number().optional()
1838
+ }))
1839
+ }).optional()
1840
+ }),
1841
+ "emptyTimeout": zod.number().optional(),
1842
+ "departureTimeout": zod.number().optional(),
1843
+ "maxParticipants": zod.number().optional(),
1844
+ "creationTime": zod.string().optional(),
1845
+ "numParticipants": zod.number().optional(),
1846
+ "numPublishers": zod.number().optional(),
1847
+ "activeRecording": zod.boolean().optional()
1848
+ }),
1849
+ "participant": zod.object({
1850
+ "sid": zod.string(),
1851
+ "identity": zod.string(),
1852
+ "state": zod.string().optional(),
1853
+ "name": zod.string().optional(),
1854
+ "kind": zod.enum(['STANDARD', 'INGRESS', 'EGRESS', 'SIP', 'AGENT']).optional(),
1855
+ "joinedAt": zod.union([zod.string(), zod.number()]).optional(),
1856
+ "joinedAtMs": zod.union([zod.string(), zod.number()]).optional()
1857
+ })
1858
+ })]);
1859
+ exports.ReceiveKanbanWebhookResponse = zod.object({
1860
+ "received": zod.boolean()
1861
+ });
1862
+ /**
1863
+ * Returns the authenticated M2M token information including subject, scopes, and token metadata. Requires valid M2M Bearer token in Authorization header.
1864
+ * @summary Get authenticated M2M token information
1865
+ */
1866
+ exports.MeResponse = zod.object({
1867
+ "subject": zod.string().describe('M2M token subject (machine identifier)'),
1868
+ "tokenId": zod.string().describe('Unique M2M token identifier'),
1869
+ "scopes": zod.array(zod.string()).optional().describe('Scopes granted to the M2M token')
1870
+ });