@avallon-labs/sdk 0.0.0-0ca09b5e
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.
- package/README.md +135 -0
- package/dist/index.d.ts +957 -0
- package/dist/index.js +512 -0
- package/dist/index.js.map +1 -0
- package/openapi.yaml +986 -0
- package/package.json +66 -0
package/openapi.yaml
ADDED
|
@@ -0,0 +1,986 @@
|
|
|
1
|
+
openapi: 3.1.0
|
|
2
|
+
info:
|
|
3
|
+
title: Avallon API
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
servers:
|
|
6
|
+
- url: https://api.avallon.ai
|
|
7
|
+
description: US Region (Virginia)
|
|
8
|
+
- url: https://api.eu.avallon.ai
|
|
9
|
+
description: EU Region (Frankfurt)
|
|
10
|
+
security:
|
|
11
|
+
- ApiKeyAuth: []
|
|
12
|
+
paths:
|
|
13
|
+
/v1/agents:
|
|
14
|
+
get:
|
|
15
|
+
summary: List agents
|
|
16
|
+
description: |-
|
|
17
|
+
List all agents for your tenant.
|
|
18
|
+
|
|
19
|
+
**Filtering:**
|
|
20
|
+
|
|
21
|
+
Filter agents by name using the `agent_name` query parameter (exact match).
|
|
22
|
+
|
|
23
|
+
**Response:**
|
|
24
|
+
|
|
25
|
+
Returns an array of all agents with their configurations and a total count.
|
|
26
|
+
operationId: listAgents
|
|
27
|
+
tags:
|
|
28
|
+
- Agents
|
|
29
|
+
parameters:
|
|
30
|
+
- in: query
|
|
31
|
+
name: agent_name
|
|
32
|
+
schema:
|
|
33
|
+
description: Filter by exact agent name
|
|
34
|
+
example: customer-support-agent
|
|
35
|
+
type: string
|
|
36
|
+
description: Filter by exact agent name
|
|
37
|
+
responses:
|
|
38
|
+
"200":
|
|
39
|
+
description: List of agents
|
|
40
|
+
content:
|
|
41
|
+
application/json:
|
|
42
|
+
schema:
|
|
43
|
+
$ref: "#/components/schemas/AgentList"
|
|
44
|
+
"400":
|
|
45
|
+
description: Bad request
|
|
46
|
+
content:
|
|
47
|
+
application/json:
|
|
48
|
+
schema:
|
|
49
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
50
|
+
"401":
|
|
51
|
+
description: Unauthorized
|
|
52
|
+
content:
|
|
53
|
+
application/json:
|
|
54
|
+
schema:
|
|
55
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
56
|
+
"409":
|
|
57
|
+
description: Conflict
|
|
58
|
+
content:
|
|
59
|
+
application/json:
|
|
60
|
+
schema:
|
|
61
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
62
|
+
"500":
|
|
63
|
+
description: Internal server error
|
|
64
|
+
content:
|
|
65
|
+
application/json:
|
|
66
|
+
schema:
|
|
67
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
68
|
+
post:
|
|
69
|
+
summary: Create agent
|
|
70
|
+
description: |-
|
|
71
|
+
Create a new voice agent with the specified configuration.
|
|
72
|
+
|
|
73
|
+
**Required fields:**
|
|
74
|
+
|
|
75
|
+
All fields in the request body are required except `phone_number_id` and `transfer_phone_number`.
|
|
76
|
+
|
|
77
|
+
**Response:**
|
|
78
|
+
|
|
79
|
+
Returns the created agent with its ID and configuration.
|
|
80
|
+
operationId: createAgent
|
|
81
|
+
tags:
|
|
82
|
+
- Agents
|
|
83
|
+
requestBody:
|
|
84
|
+
content:
|
|
85
|
+
application/json:
|
|
86
|
+
schema:
|
|
87
|
+
type: object
|
|
88
|
+
properties:
|
|
89
|
+
agent_name:
|
|
90
|
+
type: string
|
|
91
|
+
minLength: 1
|
|
92
|
+
description: Name for the agent
|
|
93
|
+
example: customer-support-agent
|
|
94
|
+
direction:
|
|
95
|
+
type: string
|
|
96
|
+
enum:
|
|
97
|
+
- OUTBOUND
|
|
98
|
+
- INBOUND
|
|
99
|
+
description: Call direction the agent handles
|
|
100
|
+
example: INBOUND
|
|
101
|
+
llm_model:
|
|
102
|
+
type: string
|
|
103
|
+
enum:
|
|
104
|
+
- GPT4.1
|
|
105
|
+
- AZURE-GPT4o
|
|
106
|
+
- AZURE-GPT4.1
|
|
107
|
+
- GPT-5
|
|
108
|
+
- GPT-5-low
|
|
109
|
+
- GPT-5-high
|
|
110
|
+
- GPT-5.1-chat-latest
|
|
111
|
+
- GPT-5.1-no-reasoning
|
|
112
|
+
- GEMINI-1.5-flash
|
|
113
|
+
- GEMINI-2.5-flash
|
|
114
|
+
- GEMINI-2.5-flash-lite
|
|
115
|
+
- GEMINI-3-flash
|
|
116
|
+
description: LLM model for conversation
|
|
117
|
+
example: GPT-5
|
|
118
|
+
tts_provider:
|
|
119
|
+
type: string
|
|
120
|
+
enum:
|
|
121
|
+
- elevenlabs
|
|
122
|
+
- cartesia
|
|
123
|
+
- google
|
|
124
|
+
description: Text-to-speech provider
|
|
125
|
+
example: elevenlabs
|
|
126
|
+
tts_model:
|
|
127
|
+
type: string
|
|
128
|
+
enum:
|
|
129
|
+
- eleven_flash_v2_5
|
|
130
|
+
- eleven_turbo_v2_5
|
|
131
|
+
- sonic-multilingual
|
|
132
|
+
- sonic-3
|
|
133
|
+
- chirp_3
|
|
134
|
+
description: Text-to-speech model
|
|
135
|
+
example: eleven_flash_v2_5
|
|
136
|
+
tts_voice_id:
|
|
137
|
+
anyOf:
|
|
138
|
+
- anyOf:
|
|
139
|
+
- type: string
|
|
140
|
+
enum:
|
|
141
|
+
- Achernar
|
|
142
|
+
- Achird
|
|
143
|
+
- type: string
|
|
144
|
+
enum:
|
|
145
|
+
- v3V1d2rk6528UrLKRuy8
|
|
146
|
+
- type: string
|
|
147
|
+
enum:
|
|
148
|
+
- 5c42302c-194b-4d0c-ba1a-8cb485c84ab9
|
|
149
|
+
- e8e5fffb-252c-436d-b842-8879b84445b6
|
|
150
|
+
- f786b574-daa5-4673-aa0c-cbe3e8534c02
|
|
151
|
+
- 8d8ce8c9-44a4-46c4-b10f-9a927b99a853
|
|
152
|
+
- 5ee9feff-1265-424a-9d7f-8e4d431a12c7
|
|
153
|
+
- b9de4a89-2257-424b-94c2-db18ba68c81a
|
|
154
|
+
description: Voice ID from the TTS provider
|
|
155
|
+
example: 21m00Tcm4TlvDq8ikWAM
|
|
156
|
+
stt_model:
|
|
157
|
+
type: string
|
|
158
|
+
enum:
|
|
159
|
+
- DEEPGRAM-NOVA-2-GENERAL
|
|
160
|
+
- DEEPGRAM-NOVA-3-GENERAL
|
|
161
|
+
- AWS-TRANSCRIBE
|
|
162
|
+
description: Speech-to-text model
|
|
163
|
+
example: DEEPGRAM-NOVA-3-GENERAL
|
|
164
|
+
transfer_phone_number:
|
|
165
|
+
anyOf:
|
|
166
|
+
- type: string
|
|
167
|
+
- type: "null"
|
|
168
|
+
description: Phone number to transfer calls to
|
|
169
|
+
example: null
|
|
170
|
+
phone_number_id:
|
|
171
|
+
description: ID of phone number to assign to agent
|
|
172
|
+
example: pn_123456
|
|
173
|
+
type: string
|
|
174
|
+
language:
|
|
175
|
+
type: string
|
|
176
|
+
enum:
|
|
177
|
+
- en-US
|
|
178
|
+
- de-DE
|
|
179
|
+
description: Language for the agent
|
|
180
|
+
example: en-US
|
|
181
|
+
dial_pad:
|
|
182
|
+
description: Whether the agent supports DTMF dial pad input
|
|
183
|
+
example: false
|
|
184
|
+
type: boolean
|
|
185
|
+
end_call:
|
|
186
|
+
description: Whether the agent can end the call
|
|
187
|
+
example: false
|
|
188
|
+
type: boolean
|
|
189
|
+
required:
|
|
190
|
+
- agent_name
|
|
191
|
+
- direction
|
|
192
|
+
- llm_model
|
|
193
|
+
- tts_provider
|
|
194
|
+
- tts_model
|
|
195
|
+
- tts_voice_id
|
|
196
|
+
- stt_model
|
|
197
|
+
- transfer_phone_number
|
|
198
|
+
- language
|
|
199
|
+
responses:
|
|
200
|
+
"201":
|
|
201
|
+
description: Created agent
|
|
202
|
+
content:
|
|
203
|
+
application/json:
|
|
204
|
+
schema:
|
|
205
|
+
$ref: "#/components/schemas/CreateAgentResponse"
|
|
206
|
+
"400":
|
|
207
|
+
description: Bad request
|
|
208
|
+
content:
|
|
209
|
+
application/json:
|
|
210
|
+
schema:
|
|
211
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
212
|
+
"401":
|
|
213
|
+
description: Unauthorized
|
|
214
|
+
content:
|
|
215
|
+
application/json:
|
|
216
|
+
schema:
|
|
217
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
218
|
+
"409":
|
|
219
|
+
description: Conflict
|
|
220
|
+
content:
|
|
221
|
+
application/json:
|
|
222
|
+
schema:
|
|
223
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
224
|
+
"500":
|
|
225
|
+
description: Internal server error
|
|
226
|
+
content:
|
|
227
|
+
application/json:
|
|
228
|
+
schema:
|
|
229
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
230
|
+
/v1/agents/{id}:
|
|
231
|
+
get:
|
|
232
|
+
summary: Get agent
|
|
233
|
+
description: Retrieve a single agent by ID.
|
|
234
|
+
operationId: getAgent
|
|
235
|
+
tags:
|
|
236
|
+
- Agents
|
|
237
|
+
parameters:
|
|
238
|
+
- in: path
|
|
239
|
+
name: id
|
|
240
|
+
schema:
|
|
241
|
+
type: string
|
|
242
|
+
minLength: 1
|
|
243
|
+
description: Agent ID
|
|
244
|
+
example: 550e8400-e29b-41d4-a716-446655440000
|
|
245
|
+
required: true
|
|
246
|
+
description: Agent ID
|
|
247
|
+
responses:
|
|
248
|
+
"200":
|
|
249
|
+
description: Agent details
|
|
250
|
+
content:
|
|
251
|
+
application/json:
|
|
252
|
+
schema:
|
|
253
|
+
$ref: "#/components/schemas/GetAgentResponse"
|
|
254
|
+
"400":
|
|
255
|
+
description: Bad request
|
|
256
|
+
content:
|
|
257
|
+
application/json:
|
|
258
|
+
schema:
|
|
259
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
260
|
+
"401":
|
|
261
|
+
description: Unauthorized
|
|
262
|
+
content:
|
|
263
|
+
application/json:
|
|
264
|
+
schema:
|
|
265
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
266
|
+
"404":
|
|
267
|
+
description: Not found
|
|
268
|
+
content:
|
|
269
|
+
application/json:
|
|
270
|
+
schema:
|
|
271
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
272
|
+
"409":
|
|
273
|
+
description: Conflict
|
|
274
|
+
content:
|
|
275
|
+
application/json:
|
|
276
|
+
schema:
|
|
277
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
278
|
+
"500":
|
|
279
|
+
description: Internal server error
|
|
280
|
+
content:
|
|
281
|
+
application/json:
|
|
282
|
+
schema:
|
|
283
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
284
|
+
/platform/api-keys:
|
|
285
|
+
get:
|
|
286
|
+
summary: List API keys
|
|
287
|
+
description: |-
|
|
288
|
+
List all API keys for your tenant.
|
|
289
|
+
|
|
290
|
+
By default, revoked keys are excluded. Set `include_revoked=true` to include them.
|
|
291
|
+
|
|
292
|
+
**Note:** The full API key value is never returned — only the key prefix is shown.
|
|
293
|
+
operationId: listApiKeys
|
|
294
|
+
tags:
|
|
295
|
+
- API Keys
|
|
296
|
+
parameters:
|
|
297
|
+
- in: query
|
|
298
|
+
name: include_revoked
|
|
299
|
+
schema:
|
|
300
|
+
description: Include revoked keys in the response
|
|
301
|
+
type: string
|
|
302
|
+
enum:
|
|
303
|
+
- "true"
|
|
304
|
+
- "false"
|
|
305
|
+
description: Include revoked keys in the response
|
|
306
|
+
responses:
|
|
307
|
+
"200":
|
|
308
|
+
description: List of API keys
|
|
309
|
+
content:
|
|
310
|
+
application/json:
|
|
311
|
+
schema:
|
|
312
|
+
$ref: "#/components/schemas/ApiKeyList"
|
|
313
|
+
"400":
|
|
314
|
+
description: Bad request
|
|
315
|
+
content:
|
|
316
|
+
application/json:
|
|
317
|
+
schema:
|
|
318
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
319
|
+
"401":
|
|
320
|
+
description: Unauthorized
|
|
321
|
+
content:
|
|
322
|
+
application/json:
|
|
323
|
+
schema:
|
|
324
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
325
|
+
"409":
|
|
326
|
+
description: Conflict
|
|
327
|
+
content:
|
|
328
|
+
application/json:
|
|
329
|
+
schema:
|
|
330
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
331
|
+
"500":
|
|
332
|
+
description: Internal server error
|
|
333
|
+
content:
|
|
334
|
+
application/json:
|
|
335
|
+
schema:
|
|
336
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
337
|
+
post:
|
|
338
|
+
summary: Create an API key
|
|
339
|
+
description: >-
|
|
340
|
+
Create a new API key for authenticating with the Avallon API.
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
**Important:** The full API key is only returned once in the response. Store it securely — it cannot be
|
|
344
|
+
retrieved again.
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
Keys are scoped to an environment (`test` or `live`) and optionally accept an expiration date.
|
|
348
|
+
operationId: createApiKey
|
|
349
|
+
tags:
|
|
350
|
+
- API Keys
|
|
351
|
+
requestBody:
|
|
352
|
+
content:
|
|
353
|
+
application/json:
|
|
354
|
+
schema:
|
|
355
|
+
type: object
|
|
356
|
+
properties:
|
|
357
|
+
name:
|
|
358
|
+
type: string
|
|
359
|
+
minLength: 1
|
|
360
|
+
maxLength: 100
|
|
361
|
+
description: Human-readable name for the API key
|
|
362
|
+
expires_at:
|
|
363
|
+
description: Optional expiration date (ISO 8601)
|
|
364
|
+
type: string
|
|
365
|
+
format: date-time
|
|
366
|
+
environment:
|
|
367
|
+
default: live
|
|
368
|
+
description: Target environment for the key
|
|
369
|
+
type: string
|
|
370
|
+
enum:
|
|
371
|
+
- test
|
|
372
|
+
- live
|
|
373
|
+
required:
|
|
374
|
+
- name
|
|
375
|
+
responses:
|
|
376
|
+
"201":
|
|
377
|
+
description: The created API key (includes the full key — only shown once)
|
|
378
|
+
content:
|
|
379
|
+
application/json:
|
|
380
|
+
schema:
|
|
381
|
+
$ref: "#/components/schemas/ApiKeyCreated"
|
|
382
|
+
"400":
|
|
383
|
+
description: Bad request
|
|
384
|
+
content:
|
|
385
|
+
application/json:
|
|
386
|
+
schema:
|
|
387
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
388
|
+
"401":
|
|
389
|
+
description: Unauthorized
|
|
390
|
+
content:
|
|
391
|
+
application/json:
|
|
392
|
+
schema:
|
|
393
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
394
|
+
"409":
|
|
395
|
+
description: Conflict
|
|
396
|
+
content:
|
|
397
|
+
application/json:
|
|
398
|
+
schema:
|
|
399
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
400
|
+
"500":
|
|
401
|
+
description: Internal server error
|
|
402
|
+
content:
|
|
403
|
+
application/json:
|
|
404
|
+
schema:
|
|
405
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
406
|
+
/platform/api-keys/{id}/revoke:
|
|
407
|
+
post:
|
|
408
|
+
summary: Revoke an API key
|
|
409
|
+
description: |-
|
|
410
|
+
Revoke an existing API key. Once revoked, the key can no longer be used for authentication.
|
|
411
|
+
|
|
412
|
+
This operation is irreversible — revoked keys cannot be re-enabled. Create a new key if needed.
|
|
413
|
+
|
|
414
|
+
Returns 409 if the key is already revoked, 404 if the key does not exist.
|
|
415
|
+
operationId: revokeApiKey
|
|
416
|
+
tags:
|
|
417
|
+
- API Keys
|
|
418
|
+
parameters:
|
|
419
|
+
- in: path
|
|
420
|
+
name: id
|
|
421
|
+
schema:
|
|
422
|
+
type: string
|
|
423
|
+
format: uuid
|
|
424
|
+
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
|
|
425
|
+
description: The API key ID to revoke
|
|
426
|
+
required: true
|
|
427
|
+
description: The API key ID to revoke
|
|
428
|
+
responses:
|
|
429
|
+
"200":
|
|
430
|
+
description: Revocation confirmation
|
|
431
|
+
content:
|
|
432
|
+
application/json:
|
|
433
|
+
schema:
|
|
434
|
+
$ref: "#/components/schemas/ConfirmationResponse"
|
|
435
|
+
"400":
|
|
436
|
+
description: Bad request
|
|
437
|
+
content:
|
|
438
|
+
application/json:
|
|
439
|
+
schema:
|
|
440
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
441
|
+
"401":
|
|
442
|
+
description: Unauthorized
|
|
443
|
+
content:
|
|
444
|
+
application/json:
|
|
445
|
+
schema:
|
|
446
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
447
|
+
"404":
|
|
448
|
+
description: Not found
|
|
449
|
+
content:
|
|
450
|
+
application/json:
|
|
451
|
+
schema:
|
|
452
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
453
|
+
"409":
|
|
454
|
+
description: Conflict
|
|
455
|
+
content:
|
|
456
|
+
application/json:
|
|
457
|
+
schema:
|
|
458
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
459
|
+
"500":
|
|
460
|
+
description: Internal server error
|
|
461
|
+
content:
|
|
462
|
+
application/json:
|
|
463
|
+
schema:
|
|
464
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
465
|
+
/v1/auth/sign-up:
|
|
466
|
+
post:
|
|
467
|
+
tags:
|
|
468
|
+
- Auth
|
|
469
|
+
security: []
|
|
470
|
+
requestBody:
|
|
471
|
+
content:
|
|
472
|
+
application/json:
|
|
473
|
+
schema:
|
|
474
|
+
type: object
|
|
475
|
+
properties:
|
|
476
|
+
email:
|
|
477
|
+
type: string
|
|
478
|
+
format: email
|
|
479
|
+
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
|
|
480
|
+
password:
|
|
481
|
+
type: string
|
|
482
|
+
required:
|
|
483
|
+
- email
|
|
484
|
+
- password
|
|
485
|
+
responses:
|
|
486
|
+
"200":
|
|
487
|
+
description: Success
|
|
488
|
+
content:
|
|
489
|
+
application/json:
|
|
490
|
+
schema:
|
|
491
|
+
$ref: "#/components/schemas/EmptyResponse"
|
|
492
|
+
"400":
|
|
493
|
+
description: Bad request
|
|
494
|
+
content:
|
|
495
|
+
application/json:
|
|
496
|
+
schema:
|
|
497
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
498
|
+
"401":
|
|
499
|
+
description: Unauthorized
|
|
500
|
+
content:
|
|
501
|
+
application/json:
|
|
502
|
+
schema:
|
|
503
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
504
|
+
"409":
|
|
505
|
+
description: Conflict
|
|
506
|
+
content:
|
|
507
|
+
application/json:
|
|
508
|
+
schema:
|
|
509
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
510
|
+
"500":
|
|
511
|
+
description: Internal server error
|
|
512
|
+
content:
|
|
513
|
+
application/json:
|
|
514
|
+
schema:
|
|
515
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
516
|
+
/v1/auth/sign-in:
|
|
517
|
+
post:
|
|
518
|
+
tags:
|
|
519
|
+
- Auth
|
|
520
|
+
security: []
|
|
521
|
+
requestBody:
|
|
522
|
+
content:
|
|
523
|
+
application/json:
|
|
524
|
+
schema:
|
|
525
|
+
oneOf:
|
|
526
|
+
- type: object
|
|
527
|
+
properties:
|
|
528
|
+
type:
|
|
529
|
+
type: string
|
|
530
|
+
const: password
|
|
531
|
+
email:
|
|
532
|
+
type: string
|
|
533
|
+
password:
|
|
534
|
+
type: string
|
|
535
|
+
required:
|
|
536
|
+
- type
|
|
537
|
+
- email
|
|
538
|
+
- password
|
|
539
|
+
- type: object
|
|
540
|
+
properties:
|
|
541
|
+
type:
|
|
542
|
+
type: string
|
|
543
|
+
const: oauth
|
|
544
|
+
code:
|
|
545
|
+
type: string
|
|
546
|
+
verifier:
|
|
547
|
+
type: string
|
|
548
|
+
required:
|
|
549
|
+
- type
|
|
550
|
+
- code
|
|
551
|
+
- verifier
|
|
552
|
+
- type: object
|
|
553
|
+
properties:
|
|
554
|
+
type:
|
|
555
|
+
type: string
|
|
556
|
+
const: email_otp
|
|
557
|
+
email:
|
|
558
|
+
type: string
|
|
559
|
+
format: email
|
|
560
|
+
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
|
|
561
|
+
token:
|
|
562
|
+
type: string
|
|
563
|
+
minLength: 1
|
|
564
|
+
required:
|
|
565
|
+
- type
|
|
566
|
+
- email
|
|
567
|
+
- token
|
|
568
|
+
type: object
|
|
569
|
+
responses:
|
|
570
|
+
"200":
|
|
571
|
+
description: Success
|
|
572
|
+
content:
|
|
573
|
+
application/json:
|
|
574
|
+
schema:
|
|
575
|
+
$ref: "#/components/schemas/AuthTokens"
|
|
576
|
+
"400":
|
|
577
|
+
description: Bad request
|
|
578
|
+
content:
|
|
579
|
+
application/json:
|
|
580
|
+
schema:
|
|
581
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
582
|
+
"401":
|
|
583
|
+
description: Unauthorized
|
|
584
|
+
content:
|
|
585
|
+
application/json:
|
|
586
|
+
schema:
|
|
587
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
588
|
+
"409":
|
|
589
|
+
description: Conflict
|
|
590
|
+
content:
|
|
591
|
+
application/json:
|
|
592
|
+
schema:
|
|
593
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
594
|
+
"500":
|
|
595
|
+
description: Internal server error
|
|
596
|
+
content:
|
|
597
|
+
application/json:
|
|
598
|
+
schema:
|
|
599
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
600
|
+
/v1/auth/refresh-token:
|
|
601
|
+
post:
|
|
602
|
+
tags:
|
|
603
|
+
- Auth
|
|
604
|
+
security: []
|
|
605
|
+
requestBody:
|
|
606
|
+
content:
|
|
607
|
+
application/json:
|
|
608
|
+
schema:
|
|
609
|
+
type: object
|
|
610
|
+
properties:
|
|
611
|
+
access_token:
|
|
612
|
+
type: string
|
|
613
|
+
refresh_token:
|
|
614
|
+
type: string
|
|
615
|
+
required:
|
|
616
|
+
- access_token
|
|
617
|
+
- refresh_token
|
|
618
|
+
responses:
|
|
619
|
+
"200":
|
|
620
|
+
description: Success
|
|
621
|
+
content:
|
|
622
|
+
application/json:
|
|
623
|
+
schema:
|
|
624
|
+
$ref: "#/components/schemas/AuthTokens"
|
|
625
|
+
"400":
|
|
626
|
+
description: Bad request
|
|
627
|
+
content:
|
|
628
|
+
application/json:
|
|
629
|
+
schema:
|
|
630
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
631
|
+
"401":
|
|
632
|
+
description: Unauthorized
|
|
633
|
+
content:
|
|
634
|
+
application/json:
|
|
635
|
+
schema:
|
|
636
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
637
|
+
"409":
|
|
638
|
+
description: Conflict
|
|
639
|
+
content:
|
|
640
|
+
application/json:
|
|
641
|
+
schema:
|
|
642
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
643
|
+
"500":
|
|
644
|
+
description: Internal server error
|
|
645
|
+
content:
|
|
646
|
+
application/json:
|
|
647
|
+
schema:
|
|
648
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
649
|
+
/v1/auth/oauth-url:
|
|
650
|
+
get:
|
|
651
|
+
tags:
|
|
652
|
+
- Auth
|
|
653
|
+
security: []
|
|
654
|
+
parameters:
|
|
655
|
+
- in: query
|
|
656
|
+
name: provider
|
|
657
|
+
schema:
|
|
658
|
+
type: string
|
|
659
|
+
enum:
|
|
660
|
+
- google
|
|
661
|
+
- microsoft
|
|
662
|
+
required: true
|
|
663
|
+
- in: query
|
|
664
|
+
name: redirect_uri
|
|
665
|
+
schema:
|
|
666
|
+
type: string
|
|
667
|
+
format: uri
|
|
668
|
+
required: true
|
|
669
|
+
- in: query
|
|
670
|
+
name: code_challenge_method
|
|
671
|
+
schema:
|
|
672
|
+
type: string
|
|
673
|
+
enum:
|
|
674
|
+
- plain
|
|
675
|
+
- s256
|
|
676
|
+
required: true
|
|
677
|
+
- in: query
|
|
678
|
+
name: code_challenge
|
|
679
|
+
schema:
|
|
680
|
+
type: string
|
|
681
|
+
minLength: 1
|
|
682
|
+
required: true
|
|
683
|
+
responses:
|
|
684
|
+
"200":
|
|
685
|
+
description: Success
|
|
686
|
+
content:
|
|
687
|
+
application/json:
|
|
688
|
+
schema:
|
|
689
|
+
$ref: "#/components/schemas/OAuthUrl"
|
|
690
|
+
"400":
|
|
691
|
+
description: Bad request
|
|
692
|
+
content:
|
|
693
|
+
application/json:
|
|
694
|
+
schema:
|
|
695
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
696
|
+
"401":
|
|
697
|
+
description: Unauthorized
|
|
698
|
+
content:
|
|
699
|
+
application/json:
|
|
700
|
+
schema:
|
|
701
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
702
|
+
"409":
|
|
703
|
+
description: Conflict
|
|
704
|
+
content:
|
|
705
|
+
application/json:
|
|
706
|
+
schema:
|
|
707
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
708
|
+
"500":
|
|
709
|
+
description: Internal server error
|
|
710
|
+
content:
|
|
711
|
+
application/json:
|
|
712
|
+
schema:
|
|
713
|
+
$ref: "#/components/schemas/ErrorResponse"
|
|
714
|
+
components:
|
|
715
|
+
schemas:
|
|
716
|
+
AgentList:
|
|
717
|
+
type: object
|
|
718
|
+
properties:
|
|
719
|
+
agents:
|
|
720
|
+
type: array
|
|
721
|
+
items:
|
|
722
|
+
$ref: "#/components/schemas/Agent"
|
|
723
|
+
total:
|
|
724
|
+
type: integer
|
|
725
|
+
minimum: -9007199254740991
|
|
726
|
+
maximum: 9007199254740991
|
|
727
|
+
description: Total number of agents
|
|
728
|
+
example: 2
|
|
729
|
+
required:
|
|
730
|
+
- agents
|
|
731
|
+
- total
|
|
732
|
+
additionalProperties: false
|
|
733
|
+
Agent:
|
|
734
|
+
type: object
|
|
735
|
+
properties:
|
|
736
|
+
id:
|
|
737
|
+
type: string
|
|
738
|
+
tenant_id:
|
|
739
|
+
type: string
|
|
740
|
+
agent_name:
|
|
741
|
+
type: string
|
|
742
|
+
direction:
|
|
743
|
+
type: string
|
|
744
|
+
enum:
|
|
745
|
+
- INBOUND
|
|
746
|
+
- OUTBOUND
|
|
747
|
+
llm_model:
|
|
748
|
+
type: string
|
|
749
|
+
enum:
|
|
750
|
+
- GPT4.1
|
|
751
|
+
- AZURE-GPT4o
|
|
752
|
+
- AZURE-GPT4.1
|
|
753
|
+
- GPT-5
|
|
754
|
+
- GPT-5-low
|
|
755
|
+
- GPT-5-high
|
|
756
|
+
- GPT-5.1-chat-latest
|
|
757
|
+
- GPT-5.1-no-reasoning
|
|
758
|
+
- GEMINI-1.5-flash
|
|
759
|
+
- GEMINI-2.5-flash
|
|
760
|
+
- GEMINI-2.5-flash-lite
|
|
761
|
+
- GEMINI-3-flash
|
|
762
|
+
tts_provider:
|
|
763
|
+
type: string
|
|
764
|
+
enum:
|
|
765
|
+
- elevenlabs
|
|
766
|
+
- cartesia
|
|
767
|
+
- google
|
|
768
|
+
tts_model:
|
|
769
|
+
type: string
|
|
770
|
+
enum:
|
|
771
|
+
- eleven_flash_v2_5
|
|
772
|
+
- eleven_turbo_v2_5
|
|
773
|
+
- sonic-multilingual
|
|
774
|
+
- sonic-3
|
|
775
|
+
- chirp_3
|
|
776
|
+
language:
|
|
777
|
+
type: string
|
|
778
|
+
enum:
|
|
779
|
+
- en-US
|
|
780
|
+
- de-DE
|
|
781
|
+
tts_voice_id:
|
|
782
|
+
type: string
|
|
783
|
+
stt_model:
|
|
784
|
+
type: string
|
|
785
|
+
enum:
|
|
786
|
+
- DEEPGRAM-NOVA-2-GENERAL
|
|
787
|
+
- DEEPGRAM-NOVA-3-GENERAL
|
|
788
|
+
- AWS-TRANSCRIBE
|
|
789
|
+
transfer_phone_number:
|
|
790
|
+
anyOf:
|
|
791
|
+
- type: string
|
|
792
|
+
- type: "null"
|
|
793
|
+
background_sounds:
|
|
794
|
+
type: string
|
|
795
|
+
enum:
|
|
796
|
+
- enabled
|
|
797
|
+
- disabled
|
|
798
|
+
created_at:
|
|
799
|
+
type: string
|
|
800
|
+
format: date-time
|
|
801
|
+
updated_at:
|
|
802
|
+
type: string
|
|
803
|
+
format: date-time
|
|
804
|
+
phone_number:
|
|
805
|
+
anyOf:
|
|
806
|
+
- type: string
|
|
807
|
+
- type: "null"
|
|
808
|
+
dial_pad:
|
|
809
|
+
type: boolean
|
|
810
|
+
end_call:
|
|
811
|
+
type: boolean
|
|
812
|
+
required:
|
|
813
|
+
- id
|
|
814
|
+
- tenant_id
|
|
815
|
+
- agent_name
|
|
816
|
+
- direction
|
|
817
|
+
- llm_model
|
|
818
|
+
- tts_provider
|
|
819
|
+
- tts_model
|
|
820
|
+
- language
|
|
821
|
+
- tts_voice_id
|
|
822
|
+
- stt_model
|
|
823
|
+
- transfer_phone_number
|
|
824
|
+
- background_sounds
|
|
825
|
+
- created_at
|
|
826
|
+
- updated_at
|
|
827
|
+
- phone_number
|
|
828
|
+
- dial_pad
|
|
829
|
+
- end_call
|
|
830
|
+
additionalProperties: false
|
|
831
|
+
ErrorResponse:
|
|
832
|
+
type: object
|
|
833
|
+
properties:
|
|
834
|
+
data:
|
|
835
|
+
type: object
|
|
836
|
+
properties: {}
|
|
837
|
+
additionalProperties: false
|
|
838
|
+
message:
|
|
839
|
+
type: string
|
|
840
|
+
description: Human-readable error message
|
|
841
|
+
required:
|
|
842
|
+
- data
|
|
843
|
+
- message
|
|
844
|
+
additionalProperties: false
|
|
845
|
+
CreateAgentResponse:
|
|
846
|
+
type: object
|
|
847
|
+
properties:
|
|
848
|
+
agent:
|
|
849
|
+
$ref: "#/components/schemas/Agent"
|
|
850
|
+
required:
|
|
851
|
+
- agent
|
|
852
|
+
additionalProperties: false
|
|
853
|
+
GetAgentResponse:
|
|
854
|
+
type: object
|
|
855
|
+
properties:
|
|
856
|
+
agent:
|
|
857
|
+
$ref: "#/components/schemas/Agent"
|
|
858
|
+
required:
|
|
859
|
+
- agent
|
|
860
|
+
additionalProperties: false
|
|
861
|
+
ApiKeyList:
|
|
862
|
+
type: object
|
|
863
|
+
properties:
|
|
864
|
+
data:
|
|
865
|
+
type: array
|
|
866
|
+
items:
|
|
867
|
+
$ref: "#/components/schemas/ApiKey"
|
|
868
|
+
count:
|
|
869
|
+
type: number
|
|
870
|
+
description: Total number of keys returned
|
|
871
|
+
required:
|
|
872
|
+
- data
|
|
873
|
+
- count
|
|
874
|
+
additionalProperties: false
|
|
875
|
+
ApiKey:
|
|
876
|
+
type: object
|
|
877
|
+
properties:
|
|
878
|
+
id:
|
|
879
|
+
type: string
|
|
880
|
+
description: Unique identifier for the API key
|
|
881
|
+
name:
|
|
882
|
+
type: string
|
|
883
|
+
description: Human-readable name for the API key
|
|
884
|
+
key_prefix:
|
|
885
|
+
type: string
|
|
886
|
+
description: First 12 characters of the key (e.g. ak_live_abc1)
|
|
887
|
+
last_used_at:
|
|
888
|
+
description: Last usage timestamp, if ever used
|
|
889
|
+
type: string
|
|
890
|
+
format: date-time
|
|
891
|
+
expires_at:
|
|
892
|
+
description: Expiration date, if set
|
|
893
|
+
type: string
|
|
894
|
+
format: date-time
|
|
895
|
+
revoked_at:
|
|
896
|
+
description: Revocation timestamp, if revoked
|
|
897
|
+
type: string
|
|
898
|
+
format: date-time
|
|
899
|
+
created_at:
|
|
900
|
+
type: string
|
|
901
|
+
format: date-time
|
|
902
|
+
description: Creation timestamp
|
|
903
|
+
updated_at:
|
|
904
|
+
type: string
|
|
905
|
+
format: date-time
|
|
906
|
+
description: Last update timestamp
|
|
907
|
+
required:
|
|
908
|
+
- id
|
|
909
|
+
- name
|
|
910
|
+
- key_prefix
|
|
911
|
+
- created_at
|
|
912
|
+
- updated_at
|
|
913
|
+
additionalProperties: false
|
|
914
|
+
ApiKeyCreated:
|
|
915
|
+
type: object
|
|
916
|
+
properties:
|
|
917
|
+
id:
|
|
918
|
+
type: string
|
|
919
|
+
description: Unique identifier for the API key
|
|
920
|
+
name:
|
|
921
|
+
type: string
|
|
922
|
+
description: Human-readable name for the API key
|
|
923
|
+
key_prefix:
|
|
924
|
+
type: string
|
|
925
|
+
description: First 12 characters of the key (e.g. ak_live_abc1)
|
|
926
|
+
expires_at:
|
|
927
|
+
description: Expiration date, if set
|
|
928
|
+
type: string
|
|
929
|
+
format: date-time
|
|
930
|
+
created_at:
|
|
931
|
+
type: string
|
|
932
|
+
format: date-time
|
|
933
|
+
description: Creation timestamp
|
|
934
|
+
api_key:
|
|
935
|
+
type: string
|
|
936
|
+
description: The full API key — only returned once at creation
|
|
937
|
+
required:
|
|
938
|
+
- id
|
|
939
|
+
- name
|
|
940
|
+
- key_prefix
|
|
941
|
+
- created_at
|
|
942
|
+
- api_key
|
|
943
|
+
additionalProperties: false
|
|
944
|
+
ConfirmationResponse:
|
|
945
|
+
type: object
|
|
946
|
+
properties:
|
|
947
|
+
message:
|
|
948
|
+
type: string
|
|
949
|
+
description: Confirmation message
|
|
950
|
+
required:
|
|
951
|
+
- message
|
|
952
|
+
additionalProperties: false
|
|
953
|
+
EmptyResponse:
|
|
954
|
+
type: object
|
|
955
|
+
properties: {}
|
|
956
|
+
additionalProperties: false
|
|
957
|
+
AuthTokens:
|
|
958
|
+
type: object
|
|
959
|
+
properties:
|
|
960
|
+
access_token:
|
|
961
|
+
type: string
|
|
962
|
+
refresh_token:
|
|
963
|
+
type: string
|
|
964
|
+
expires_at:
|
|
965
|
+
type: string
|
|
966
|
+
format: date-time
|
|
967
|
+
required:
|
|
968
|
+
- access_token
|
|
969
|
+
- refresh_token
|
|
970
|
+
- expires_at
|
|
971
|
+
additionalProperties: false
|
|
972
|
+
OAuthUrl:
|
|
973
|
+
type: object
|
|
974
|
+
properties:
|
|
975
|
+
url:
|
|
976
|
+
type: string
|
|
977
|
+
format: uri
|
|
978
|
+
required:
|
|
979
|
+
- url
|
|
980
|
+
additionalProperties: false
|
|
981
|
+
securitySchemes:
|
|
982
|
+
ApiKeyAuth:
|
|
983
|
+
type: apiKey
|
|
984
|
+
in: header
|
|
985
|
+
name: x-api-key
|
|
986
|
+
description: API key for authentication
|